diff mbox

linux-user/syscall.c: Notice about lock bitmask translation for fcntl

Message ID 5673A718.40103@emindsoft.com.cn
State New
Headers show

Commit Message

Chen Gang Dec. 18, 2015, 6:26 a.m. UTC
For fcntl, it always needs to notice about it, just like do_fcntl() has
done, or it will cause issue (e.g. alpha host run i386 guest).

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 linux-user/syscall.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

Comments

Laurent Vivier Dec. 18, 2015, 9:37 a.m. UTC | #1
Le 18/12/2015 07:26, Chen Gang a écrit :
> 
> For fcntl, it always needs to notice about it, just like do_fcntl() has
> done, or it will cause issue (e.g. alpha host run i386 guest).
> 
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
>  linux-user/syscall.c |   18 ++++++++++++------
>  1 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 0f8adeb..1a60e6f 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>              if (((CPUARMState *)cpu_env)->eabi) {
>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>                      goto efault;
> -                fl.l_type = tswap16(target_efl->l_type);
> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
> +                                                   flock_tbl);
>                  fl.l_whence = tswap16(target_efl->l_whence);
>                  fl.l_start = tswap64(target_efl->l_start);
>                  fl.l_len = tswap64(target_efl->l_len);
> @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>              {
>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>                      goto efault;
> -                fl.l_type = tswap16(target_fl->l_type);
> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
> +                                                   flock_tbl);
>                  fl.l_whence = tswap16(target_fl->l_whence);
>                  fl.l_start = tswap64(target_fl->l_start);
>                  fl.l_len = tswap64(target_fl->l_len);
> @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>                  if (((CPUARMState *)cpu_env)->eabi) {
>                      if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) 
>                          goto efault;
> -                    target_efl->l_type = tswap16(fl.l_type);
> +                    target_efl->l_type = host_to_target_bitmask(
> +                                                 tswap16(fl.l_type), flock_tbl);
>                      target_efl->l_whence = tswap16(fl.l_whence);
>                      target_efl->l_start = tswap64(fl.l_start);
>                      target_efl->l_len = tswap64(fl.l_len);
> @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>                  {
>                      if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) 
>                          goto efault;
> -                    target_fl->l_type = tswap16(fl.l_type);
> +                    target_fl->l_type = host_to_target_bitmask(
> +                                                 tswap16(fl.l_type), flock_tbl);
>                      target_fl->l_whence = tswap16(fl.l_whence);
>                      target_fl->l_start = tswap64(fl.l_start);
>                      target_fl->l_len = tswap64(fl.l_len);
> @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>              if (((CPUARMState *)cpu_env)->eabi) {
>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>                      goto efault;
> -                fl.l_type = tswap16(target_efl->l_type);
> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
> +                                                   flock_tbl);
>                  fl.l_whence = tswap16(target_efl->l_whence);
>                  fl.l_start = tswap64(target_efl->l_start);
>                  fl.l_len = tswap64(target_efl->l_len);
> @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>              {
>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>                      goto efault;
> -                fl.l_type = tswap16(target_fl->l_type);
> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
> +                                                   flock_tbl);
>                  fl.l_whence = tswap16(target_fl->l_whence);
>                  fl.l_start = tswap64(target_fl->l_start);
>                  fl.l_len = tswap64(target_fl->l_len);
> 

This patch looks good to me, except that script/checkpatch.pl complains
about "DOS line ending" and "line over 80 characters".

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Chen Gang Dec. 18, 2015, 9:40 p.m. UTC | #2
On 12/18/15 17:37, Laurent Vivier wrote:
> 
> Le 18/12/2015 07:26, Chen Gang a écrit :
>>
>> For fcntl, it always needs to notice about it, just like do_fcntl() has
>> done, or it will cause issue (e.g. alpha host run i386 guest).
>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>>  linux-user/syscall.c |   18 ++++++++++++------
>>  1 files changed, 12 insertions(+), 6 deletions(-)
>>
>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
>> index 0f8adeb..1a60e6f 100644
>> --- a/linux-user/syscall.c
>> +++ b/linux-user/syscall.c
>> @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>              if (((CPUARMState *)cpu_env)->eabi) {
>>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>>                      goto efault;
>> -                fl.l_type = tswap16(target_efl->l_type);
>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>> +                                                   flock_tbl);
>>                  fl.l_whence = tswap16(target_efl->l_whence);
>>                  fl.l_start = tswap64(target_efl->l_start);
>>                  fl.l_len = tswap64(target_efl->l_len);
>> @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>              {
>>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>>                      goto efault;
>> -                fl.l_type = tswap16(target_fl->l_type);
>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>> +                                                   flock_tbl);
>>                  fl.l_whence = tswap16(target_fl->l_whence);
>>                  fl.l_start = tswap64(target_fl->l_start);
>>                  fl.l_len = tswap64(target_fl->l_len);
>> @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>                  if (((CPUARMState *)cpu_env)->eabi) {
>>                      if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) 
>>                          goto efault;
>> -                    target_efl->l_type = tswap16(fl.l_type);
>> +                    target_efl->l_type = host_to_target_bitmask(
>> +                                                 tswap16(fl.l_type), flock_tbl);
>>                      target_efl->l_whence = tswap16(fl.l_whence);
>>                      target_efl->l_start = tswap64(fl.l_start);
>>                      target_efl->l_len = tswap64(fl.l_len);
>> @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>                  {
>>                      if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) 
>>                          goto efault;
>> -                    target_fl->l_type = tswap16(fl.l_type);
>> +                    target_fl->l_type = host_to_target_bitmask(
>> +                                                 tswap16(fl.l_type), flock_tbl);
>>                      target_fl->l_whence = tswap16(fl.l_whence);
>>                      target_fl->l_start = tswap64(fl.l_start);
>>                      target_fl->l_len = tswap64(fl.l_len);
>> @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>              if (((CPUARMState *)cpu_env)->eabi) {
>>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>>                      goto efault;
>> -                fl.l_type = tswap16(target_efl->l_type);
>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>> +                                                   flock_tbl);
>>                  fl.l_whence = tswap16(target_efl->l_whence);
>>                  fl.l_start = tswap64(target_efl->l_start);
>>                  fl.l_len = tswap64(target_efl->l_len);
>> @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>              {
>>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>>                      goto efault;
>> -                fl.l_type = tswap16(target_fl->l_type);
>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>> +                                                   flock_tbl);
>>                  fl.l_whence = tswap16(target_fl->l_whence);
>>                  fl.l_start = tswap64(target_fl->l_start);
>>                  fl.l_len = tswap64(target_fl->l_len);
>>
> 
> This patch looks good to me, except that script/checkpatch.pl complains
> about "DOS line ending" and "line over 80 characters".
> 

I did not get any script/checkpatch.pl complains, originally.

Does my email client configuration is incorrect, then cause incorrect
mail format? I guess not. The related reason is below.

 - I copy your full reply mail contents to a new file (diff.patch).

 - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original
   patch contents).

 - ./script/checkpatch.pl diff.patch, it has no any complains.

> Reviewed-by: Laurent Vivier <laurent@vivier.eu>
> 

Thanks.
Laurent Vivier Dec. 18, 2015, 9:58 p.m. UTC | #3
Le 18/12/2015 22:40, Chen Gang a écrit :
> 
> On 12/18/15 17:37, Laurent Vivier wrote:
>>
>> Le 18/12/2015 07:26, Chen Gang a écrit :
>>>
>>> For fcntl, it always needs to notice about it, just like do_fcntl() has
>>> done, or it will cause issue (e.g. alpha host run i386 guest).
>>>
>>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>>> ---
>>>  linux-user/syscall.c |   18 ++++++++++++------
>>>  1 files changed, 12 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
>>> index 0f8adeb..1a60e6f 100644
>>> --- a/linux-user/syscall.c
>>> +++ b/linux-user/syscall.c
>>> @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>              if (((CPUARMState *)cpu_env)->eabi) {
>>>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>>>                      goto efault;
>>> -                fl.l_type = tswap16(target_efl->l_type);
>>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>>> +                                                   flock_tbl);
>>>                  fl.l_whence = tswap16(target_efl->l_whence);
>>>                  fl.l_start = tswap64(target_efl->l_start);
>>>                  fl.l_len = tswap64(target_efl->l_len);
>>> @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>              {
>>>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>>>                      goto efault;
>>> -                fl.l_type = tswap16(target_fl->l_type);
>>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>>> +                                                   flock_tbl);
>>>                  fl.l_whence = tswap16(target_fl->l_whence);
>>>                  fl.l_start = tswap64(target_fl->l_start);
>>>                  fl.l_len = tswap64(target_fl->l_len);
>>> @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>                  if (((CPUARMState *)cpu_env)->eabi) {
>>>                      if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) 
>>>                          goto efault;
>>> -                    target_efl->l_type = tswap16(fl.l_type);
>>> +                    target_efl->l_type = host_to_target_bitmask(
>>> +                                                 tswap16(fl.l_type), flock_tbl);
>>>                      target_efl->l_whence = tswap16(fl.l_whence);
>>>                      target_efl->l_start = tswap64(fl.l_start);
>>>                      target_efl->l_len = tswap64(fl.l_len);
>>> @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>                  {
>>>                      if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) 
>>>                          goto efault;
>>> -                    target_fl->l_type = tswap16(fl.l_type);
>>> +                    target_fl->l_type = host_to_target_bitmask(
>>> +                                                 tswap16(fl.l_type), flock_tbl);
>>>                      target_fl->l_whence = tswap16(fl.l_whence);
>>>                      target_fl->l_start = tswap64(fl.l_start);
>>>                      target_fl->l_len = tswap64(fl.l_len);
>>> @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>              if (((CPUARMState *)cpu_env)->eabi) {
>>>                  if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
>>>                      goto efault;
>>> -                fl.l_type = tswap16(target_efl->l_type);
>>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>>> +                                                   flock_tbl);
>>>                  fl.l_whence = tswap16(target_efl->l_whence);
>>>                  fl.l_start = tswap64(target_efl->l_start);
>>>                  fl.l_len = tswap64(target_efl->l_len);
>>> @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
>>>              {
>>>                  if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
>>>                      goto efault;
>>> -                fl.l_type = tswap16(target_fl->l_type);
>>> +                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
>>> +                                                   flock_tbl);
>>>                  fl.l_whence = tswap16(target_fl->l_whence);
>>>                  fl.l_start = tswap64(target_fl->l_start);
>>>                  fl.l_len = tswap64(target_fl->l_len);
>>>
>>
>> This patch looks good to me, except that script/checkpatch.pl complains
>> about "DOS line ending" and "line over 80 characters".
>>
> 
> I did not get any script/checkpatch.pl complains, originally.
> 
> Does my email client configuration is incorrect, then cause incorrect
> mail format? I guess not. The related reason is below.
> 
>  - I copy your full reply mail contents to a new file (diff.patch).

If you copy, you loose the special characters. I do a "Save as".

> 
>  - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original
>    patch contents).
> 
>  - ./script/checkpatch.pl diff.patch, it has no any complains.

If I run "file" on the saved file, I have:

    $ file orig.eml
    orig.eml: SMTP mail, ASCII text, with CRLF line terminators

I can convert it with "tr":

    $ tr "\r" "\n" < orig.eml > new.eml

    $ file new.eml
    new.eml: SMTP mail, ASCII text

    $ ./scripts/checkpatch.pl new.eml
    total: 0 errors, 0 warnings, 54 lines checked

    new.eml has no obvious style problems and is ready for submission.

Laurent
Chen Gang Dec. 18, 2015, 10:12 p.m. UTC | #4
On 12/19/15 05:58, Laurent Vivier wrote:
> 
> Le 18/12/2015 22:40, Chen Gang a écrit :
>>

[...]

>> I did not get any script/checkpatch.pl complains, originally.
>>
>> Does my email client configuration is incorrect, then cause incorrect
>> mail format? I guess not. The related reason is below.
>>
>>  - I copy your full reply mail contents to a new file (diff.patch).
> 
> If you copy, you loose the special characters. I do a "Save as".
> 
>>
>>  - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original
>>    patch contents).
>>
>>  - ./script/checkpatch.pl diff.patch, it has no any complains.
> 
> If I run "file" on the saved file, I have:
> 
>     $ file orig.eml
>     orig.eml: SMTP mail, ASCII text, with CRLF line terminators
> 
> I can convert it with "tr":
> 
>     $ tr "\r" "\n" < orig.eml > new.eml
> 
>     $ file new.eml
>     new.eml: SMTP mail, ASCII text
> 
>     $ ./scripts/checkpatch.pl new.eml
>     total: 0 errors, 0 warnings, 54 lines checked
> 
>     new.eml has no obvious style problems and is ready for submission.
> 
> Laurent
> 

OK, thank you very much. I shall config my email client again to notice
about it.


Thanks.
Laurent Vivier Dec. 18, 2015, 10:15 p.m. UTC | #5
Le 18/12/2015 23:12, Chen Gang a écrit :
> 
> On 12/19/15 05:58, Laurent Vivier wrote:
>>
>> Le 18/12/2015 22:40, Chen Gang a écrit :
>>>
> 
> [...]
> 
>>> I did not get any script/checkpatch.pl complains, originally.
>>>
>>> Does my email client configuration is incorrect, then cause incorrect
>>> mail format? I guess not. The related reason is below.
>>>
>>>  - I copy your full reply mail contents to a new file (diff.patch).
>>
>> If you copy, you loose the special characters. I do a "Save as".
>>
>>>
>>>  - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original
>>>    patch contents).
>>>
>>>  - ./script/checkpatch.pl diff.patch, it has no any complains.
>>
>> If I run "file" on the saved file, I have:
>>
>>     $ file orig.eml
>>     orig.eml: SMTP mail, ASCII text, with CRLF line terminators
>>
>> I can convert it with "tr":
>>
>>     $ tr "\r" "\n" < orig.eml > new.eml
>>
>>     $ file new.eml
>>     new.eml: SMTP mail, ASCII text
>>
>>     $ ./scripts/checkpatch.pl new.eml
>>     total: 0 errors, 0 warnings, 54 lines checked
>>
>>     new.eml has no obvious style problems and is ready for submission.
>>
>> Laurent
>>
> 
> OK, thank you very much. I shall config my email client again to notice
> about it.

You should not use your email client to send patches, you should use
"git send-email":

http://wiki.qemu.org/Contribute/SubmitAPatch

Laurent
Chen Gang Dec. 18, 2015, 10:31 p.m. UTC | #6
On 12/19/15 06:15, Laurent Vivier wrote:
> 
> Le 18/12/2015 23:12, Chen Gang a écrit :
>>

[...]

>>
>> OK, thank you very much. I shall config my email client again to notice
>> about it.
> 
> You should not use your email client to send patches, you should use
> "git send-email":
> 
> http://wiki.qemu.org/Contribute/SubmitAPatch
> 

OK, thanks.
diff mbox

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 0f8adeb..1a60e6f 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9007,7 +9007,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             if (((CPUARMState *)cpu_env)->eabi) {
                 if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
                     goto efault;
-                fl.l_type = tswap16(target_efl->l_type);
+                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
+                                                   flock_tbl);
                 fl.l_whence = tswap16(target_efl->l_whence);
                 fl.l_start = tswap64(target_efl->l_start);
                 fl.l_len = tswap64(target_efl->l_len);
@@ -9018,7 +9019,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             {
                 if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
                     goto efault;
-                fl.l_type = tswap16(target_fl->l_type);
+                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
+                                                   flock_tbl);
                 fl.l_whence = tswap16(target_fl->l_whence);
                 fl.l_start = tswap64(target_fl->l_start);
                 fl.l_len = tswap64(target_fl->l_len);
@@ -9031,7 +9033,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                 if (((CPUARMState *)cpu_env)->eabi) {
                     if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) 
                         goto efault;
-                    target_efl->l_type = tswap16(fl.l_type);
+                    target_efl->l_type = host_to_target_bitmask(
+                                                 tswap16(fl.l_type), flock_tbl);
                     target_efl->l_whence = tswap16(fl.l_whence);
                     target_efl->l_start = tswap64(fl.l_start);
                     target_efl->l_len = tswap64(fl.l_len);
@@ -9042,7 +9045,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                 {
                     if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) 
                         goto efault;
-                    target_fl->l_type = tswap16(fl.l_type);
+                    target_fl->l_type = host_to_target_bitmask(
+                                                 tswap16(fl.l_type), flock_tbl);
                     target_fl->l_whence = tswap16(fl.l_whence);
                     target_fl->l_start = tswap64(fl.l_start);
                     target_fl->l_len = tswap64(fl.l_len);
@@ -9058,7 +9062,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             if (((CPUARMState *)cpu_env)->eabi) {
                 if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) 
                     goto efault;
-                fl.l_type = tswap16(target_efl->l_type);
+                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
+                                                   flock_tbl);
                 fl.l_whence = tswap16(target_efl->l_whence);
                 fl.l_start = tswap64(target_efl->l_start);
                 fl.l_len = tswap64(target_efl->l_len);
@@ -9069,7 +9074,8 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             {
                 if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) 
                     goto efault;
-                fl.l_type = tswap16(target_fl->l_type);
+                fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type),
+                                                   flock_tbl);
                 fl.l_whence = tswap16(target_fl->l_whence);
                 fl.l_start = tswap64(target_fl->l_start);
                 fl.l_len = tswap64(target_fl->l_len);