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 <[email protected]>
> ---
> 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
>
>