Re: [PATCH] fuse: Add ioctl flag for compat ioctl with 64-bit time_t

From: Miklos Szeredi
Date: Wed Apr 24 2019 - 06:53:00 EST


On Tue, Apr 23, 2019 at 5:14 PM Ian Abbott <abbotti@xxxxxxxxx> wrote:
>
> On 23/04/2019 13:55, Miklos Szeredi wrote:
> > On Fri, Mar 1, 2019 at 6:08 PM Ian Abbott <abbotti@xxxxxxxxx> wrote:
> >>
> >> 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, for example. 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_64TIME` and sets it if the 32-bit requesting
> >> process (running on a 64-bit kernel) uses a 64-bit `time_t` type.
> >
> > Hi,
> >
> > Thanks for the patch.
> >
> > I think it should rather use in_x32_syscall() helper and follow that
> > naming because there's apparently at least one example in xfs of a
> > non-time_t related ioctl that varies between the x32 vs ia32.
>
> Hi Miklos,
>
> It is conceivable that COMPAT_USE_64BIT_TIME could be true for some
> other arch/ABI (although currently it is only ever set for x86/x32).
> Should it have separate flags for "compat 64-bit time" and "compat x32"
> (even though that is currently redundant)?

No, it should just be a single flag, something like
FUSE_IOCTL_COMPAT_X32 and the documentation should say that it implies
64bit time values.

Thanks,
Miklos