Btrfs: Fix BTRFS_IOC_SUBVOL_SETFLAGS ioctl
PATCH 1/2 Btrfs: Fix BTRFS_IOC_SUBVOL_SETFLAGS ioctl
- Check user-specified flags correctly
- Check the inode owership
- Search root item in root tree but not fs tree
Reported-by Dan Rosenberg <[email protected]>
Signed-off-by Li Zefan <[email protected]>
--- fs/btrfs/ioctl.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
fs/btrfs/ioctl.c +5 -2
@@ -1071,12 +1071,15 @@ static noinline int btrfs_ioctl_subvol_setflags(struct file *file,if (copy_from_user (&flags, arg,sizeof (flags)))return -EFAULT ; -if (flags & ~BTRFS_SUBVOL_CREATE_ASYNC ) +if (flags &BTRFS_SUBVOL_CREATE_ASYNC )return -EINVAL ;if (flags & ~BTRFS_SUBVOL_RDONLY )return -EOPNOTSUPP ; +if (!is_owner_or_cap (inode)) +return -EACCES ; +down_write (&root->fs_info->subvol_sem);/* nothing to do */
@@ -1097,7 +1100,7 @@ static noinline int btrfs_ioctl_subvol_setflags(struct file *file, goto out_reset; } - ret =btrfs_update_root (trans, root, + ret =btrfs_update_root (trans, root->fs_info->tree_root, &root->root_key, &root->root_item);btrfs_commit_transaction (trans, root);
Signature · 1 line
1.6.3