diff options
author | Amir Goldstein <amir73il@gmail.com> | 2018-10-11 16:38:14 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2018-10-26 23:34:39 +0200 |
commit | 8f97d1e99149a7f1aa19e47a51b09764382a482e (patch) | |
tree | ca2f5d211b719dd62d06875194be3b1940bcc97f /fs/ioctl.c | |
parent | ovl: clean up error handling in ovl_get_tmpfile() (diff) | |
download | linux-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.c | 3 |
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: |