summaryrefslogtreecommitdiffstats
path: root/fs/ioctl.c
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2018-10-11 16:38:14 +0200
committerMiklos Szeredi <mszeredi@redhat.com>2018-10-26 23:34:39 +0200
commit8f97d1e99149a7f1aa19e47a51b09764382a482e (patch)
treeca2f5d211b719dd62d06875194be3b1940bcc97f /fs/ioctl.c
parentovl: clean up error handling in ovl_get_tmpfile() (diff)
downloadlinux-8f97d1e99149a7f1aa19e47a51b09764382a482e.tar.xz
linux-8f97d1e99149a7f1aa19e47a51b09764382a482e.zip
vfs: fix FIGETBSZ ioctl on an overlayfs file
Some anon_bdev filesystems (e.g. overlayfs, ceph) don't have s_blocksize set. Returning zero from FIGETBSZ ioctl results in a Floating point exception from the e2fsprogs utility filefrag, which divides the size of the file with the value returned by FIGETBSZ. Fix the interface by returning -EINVAL for these filesystems. Fixes: d1d04ef8572b ("ovl: stack file ops") Cc: <stable@vger.kernel.org> # v4.19 Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs/ioctl.c')
-rw-r--r--fs/ioctl.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/ioctl.c b/fs/ioctl.c
index 2005529af560..0400297c8d72 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c
@@ -669,6 +669,9 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
return ioctl_fiemap(filp, arg);
case FIGETBSZ:
+ /* anon_bdev filesystems may not have a block size */
+ if (!inode->i_sb->s_blocksize)
+ return -EINVAL;
return put_user(inode->i_sb->s_blocksize, argp);
case FICLONE: