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 <peter.mayd...@linaro.org> > --- > 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 > >