fuse: limit xattr returned size
authorMiklos Szeredi <mszeredi@redhat.com>
Mon, 3 Oct 2016 09:06:05 +0000 (11:06 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Mon, 3 Oct 2016 09:06:05 +0000 (11:06 +0200)
Don't let userspace filesystem give bogus values for the size of xattr and
xattr list.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/xattr.c

index 04b097f..3caac46 100644 (file)
@@ -79,7 +79,7 @@ ssize_t fuse_getxattr(struct inode *inode, const char *name, void *value,
        }
        ret = fuse_simple_request(fc, &args);
        if (!ret && !size)
-               ret = outarg.size;
+               ret = min_t(ssize_t, outarg.size, XATTR_SIZE_MAX);
        if (ret == -ENOSYS) {
                fc->no_getxattr = 1;
                ret = -EOPNOTSUPP;
@@ -138,7 +138,7 @@ ssize_t fuse_listxattr(struct dentry *entry, char *list, size_t size)
        }
        ret = fuse_simple_request(fc, &args);
        if (!ret && !size)
-               ret = outarg.size;
+               ret = min_t(ssize_t, outarg.size, XATTR_LIST_MAX);
        if (ret > 0 && size)
                ret = fuse_verify_xattr_list(list, ret);
        if (ret == -ENOSYS) {