Skip to content

Commit

Permalink
linux-user: Correct signedness of target_flock l_start and l_len fields
Browse files Browse the repository at this point in the history
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.

RV: long long -> abi_llong as suggested by Laurent Vivier <[email protected]>
Signed-off-by: Peter Maydell <[email protected]>
Signed-off-by: Riku Voipio <[email protected]>
  • Loading branch information
pm215 authored and Riku Voipio committed Jun 8, 2016
1 parent 49ca6f3 commit 8efb2ed
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions linux-user/syscall_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
abi_llong l_start;
abi_llong l_len;
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;
abi_llong l_start;
abi_llong l_len;
int l_pid;
} QEMU_PACKED;
#endif

Expand Down

0 comments on commit 8efb2ed

Please sign in to comment.