qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 15/18] linux-user: Correct signedness of target_


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH 15/18] linux-user: Correct signedness of target_flock l_start and l_len fields
Date: Tue, 7 Jun 2016 22:00:35 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0


Le 06/06/2016 à 20:58, Peter Maydell a écrit :
> The l_start and l_len fields in the various target_flock structures are
> supposed to be '__kernel_off_t' or '__kernel_loff_t', which means they
> should be signed, not unsigned. Correcting the structure definitions means
> that __get_user() and __put_user() will correctly sign extend them if
> the guest is using 32 bit offsets and the host is using 64 bit offsets.
> 
> This fixes failures in the LTP 'fcntl14' tests where it checks that
> negative seek offsets work correctly.
> 
> We reindent the structures to drop hard tabs since we're touching 40%
> of the fields anyway.
> 
> Signed-off-by: Peter Maydell <address@hidden>
> ---
>  linux-user/syscall_defs.h | 34 +++++++++++++++++-----------------
>  1 file changed, 17 insertions(+), 17 deletions(-)
> 
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index 124754f..8a801e0 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2289,34 +2289,34 @@ struct target_statfs64 {
>  #endif
>  
>  struct target_flock {
> -     short l_type;
> -     short l_whence;
> -     abi_ulong l_start;
> -     abi_ulong l_len;
> -     int l_pid;
> +    short l_type;
> +    short l_whence;
> +    abi_long l_start;
> +    abi_long l_len;
> +    int l_pid;
>  };
>  
>  struct target_flock64 {
> -     short  l_type;
> -     short  l_whence;
> +    short  l_type;
> +    short  l_whence;
>  #if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) \
>      || defined(TARGET_SPARC) || defined(TARGET_HPPA) \
>      || defined(TARGET_MICROBLAZE) || defined(TARGET_TILEGX)
> -        int __pad;
> +    int __pad;
>  #endif
> -     unsigned long long l_start;
> -     unsigned long long l_len;
> -     int  l_pid;
> +    long long l_start;
> +    long long l_len;

to be correct, they should be abi_llong.

> +    int  l_pid;
>  } QEMU_PACKED;
>  
>  #ifdef TARGET_ARM
>  struct target_eabi_flock64 {
> -     short  l_type;
> -     short  l_whence;
> -        int __pad;
> -     unsigned long long l_start;
> -     unsigned long long l_len;
> -     int  l_pid;
> +    short  l_type;
> +    short  l_whence;
> +    int __pad;
> +    long long l_start;
> +    long long l_len;

abi_llong

> +    int  l_pid;
>  } QEMU_PACKED;
>  #endif
>  
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]