Commit 1847b7ba authored by Peter Maydell's avatar Peter Maydell Committed by Riku Voipio
Browse files

linux-user: Fix target FS_IOC_GETFLAGS and FS_IOC_SETFLAGS numbers



We were defining TARGET_FS_IOC_GETFLAGS and TARGET_FS_IOC_SETFLAGS
using the host 'long' type in the size field, which meant that
they had the wrong values if the host and guest had different
sized longs. Switch to abi_long instead.

This fixes a bug where these ioctls don't work on 32-bit guests
on 64-bit hosts (and makes the LTP test 'setxattr03' pass
where it did not previously.)

Reported-by: default avatarpgndev <pgnet.dev@gmail.com>
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: default avatarLaurent Vivier <laurent@vivier.eu>
Signed-off-by: default avatarRiku Voipio <riku.voipio@linaro.org>
parent cc1b3960
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1101,8 +1101,8 @@ struct target_pollfd {
/* Note that the ioctl numbers claim type "long" but the actual type
 * used by the kernel is "int".
 */
#define TARGET_FS_IOC_GETFLAGS TARGET_IOR('f', 1, long)
#define TARGET_FS_IOC_SETFLAGS TARGET_IOW('f', 2, long)
#define TARGET_FS_IOC_GETFLAGS TARGET_IOR('f', 1, abi_long)
#define TARGET_FS_IOC_SETFLAGS TARGET_IOW('f', 2, abi_long)

#define TARGET_FS_IOC_FIEMAP TARGET_IOWR('f',11,struct fiemap)