fuse: Add ioctl flag for x32 compat ioctl
authorIan Abbott <abbotti@mev.co.uk>
Wed, 24 Apr 2019 14:14:11 +0000 (15:14 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 24 Apr 2019 15:05:07 +0000 (17:05 +0200)
commit6407f44aaf2a39b5ccbb1cc1d342b906dcfa8a87
tree62dec382d81a519220a349dbf42697cdec26966a
parent29cc02d949b19fdeba9de9f54b2641005f5865c6
fuse: Add ioctl flag for x32 compat ioctl

Currently, a CUSE server running on a 64-bit kernel can tell when an ioctl
request comes from a process running a 32-bit ABI, but cannot tell whether
the requesting process is using legacy IA32 emulation or x32 ABI.  In
particular, the server does not know the size of the client process's
`time_t` type.

For 64-bit kernels, the `FUSE_IOCTL_COMPAT` and `FUSE_IOCTL_32BIT` flags
are currently set in the ioctl input request (`struct fuse_ioctl_in` member
`flags`) for a 32-bit requesting process.  This patch defines a new flag
`FUSE_IOCTL_COMPAT_X32` and sets it if the 32-bit requesting process is
using the x32 ABI.  This allows the server process to distinguish between
requests coming from client processes using IA32 emulation or the x32 ABI
and so infer the size of the client process's `time_t` type and any other
IA32/x32 differences.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/file.c
include/uapi/linux/fuse.h