Message ID | 20240710101023.2991031-1-ratna.bolla@quest.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | fuse: Set iov_len to sizeof(int) for FS_IOC_GETFLAGS and FS_IOC_SETFLAGS ioctls | expand |
On Wed, 10 Jul 2024 at 12:10, Ratna Manoj Bolla <manoj.br@gmail.com> wrote: > > Hi, > User programs are passing integer pointers as argument to these ioctls. > Many filesystems(xfs, ext) honour this to prevent corrupting the other four bytes. > > This was discussed in the fsdevel mailing list with subject "Argument type for FS_IOC_GETFLAGS/FS_IOC_SETFLAGS ioctls" > > Please see if we can be compatible by breaking correctness. I don't get it, FS_IOC_[GS]ETFLAGS is handled by the VFS since forever (v5.13 to be precise). Thanks, Miklos
diff --git a/fs/fuse/ioctl.c b/fs/fuse/ioctl.c index 572ce8a82ceb..9e0ec0b3375e 100644 --- a/fs/fuse/ioctl.c +++ b/fs/fuse/ioctl.c @@ -264,7 +264,16 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg, struct iovec *iov = iov_page; iov->iov_base = (void __user *)arg; - iov->iov_len = _IOC_SIZE(cmd); + + switch (cmd) { + case FS_IOC_GETFLAGS: + case FS_IOC_SETFLAGS: + iov->iov_len = sizeof(int); + break; + default: + iov->iov_len = _IOC_SIZE(cmd); + break; + } if (_IOC_DIR(cmd) & _IOC_WRITE) { in_iov = iov;
Hi, User programs are passing integer pointers as argument to these ioctls. Many filesystems(xfs, ext) honour this to prevent corrupting the other four bytes. This was discussed in the fsdevel mailing list with subject "Argument type for FS_IOC_GETFLAGS/FS_IOC_SETFLAGS ioctls" Please see if we can be compatible by breaking correctness. Thanks. Signed-off-by: Ratna Manoj Bolla <manoj.br@gmail.com> --- fs/fuse/ioctl.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)