Merge tag 'for-5.12-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba: "More regression fixes and stabilization. Regressions: - zoned mode - count zone sizes in wider int types - fix space accounting for read-only block groups - subpage: fix page tail zeroing Fixes: - fix spurious warning when remounting with free space tree - fix warning when creating a directory with smack enabled - ioctl checks for qgroup inheritance when creating a snapshot - qgroup - fix missing unlock on error path in zero range - fix amount of released reservation on error - fix flushing from unsafe context with open transaction, potentially deadlocking - minor build warning fixes" * tag 'for-5.12-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: zoned: do not account freed region of read-only block group as zone_unusable btrfs: zoned: use sector_t for zone sectors btrfs: subpage: fix the false data csum mismatch error btrfs: fix warning when creating a directory with smack enabled btrfs: don't flush from btrfs_delayed_inode_reserve_metadata btrfs: export and rename qgroup_reserve_meta btrfs: free correct amount of space in btrfs_delayed_inode_reserve_metadata btrfs: fix spurious free_space_tree remount warning btrfs: validate qgroup inherit for SNAP_CREATE_V2 ioctl btrfs: unlock extents in btrfs_zero_range in case of quota reservation errors btrfs: ref-verify: use 'inline void' keyword ordering
This commit is contained in:
@ -1936,7 +1936,10 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file,
|
||||
if (vol_args->flags & BTRFS_SUBVOL_RDONLY)
|
||||
readonly = true;
|
||||
if (vol_args->flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
|
||||
if (vol_args->size > PAGE_SIZE) {
|
||||
u64 nums;
|
||||
|
||||
if (vol_args->size < sizeof(*inherit) ||
|
||||
vol_args->size > PAGE_SIZE) {
|
||||
ret = -EINVAL;
|
||||
goto free_args;
|
||||
}
|
||||
@ -1945,6 +1948,20 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file,
|
||||
ret = PTR_ERR(inherit);
|
||||
goto free_args;
|
||||
}
|
||||
|
||||
if (inherit->num_qgroups > PAGE_SIZE ||
|
||||
inherit->num_ref_copies > PAGE_SIZE ||
|
||||
inherit->num_excl_copies > PAGE_SIZE) {
|
||||
ret = -EINVAL;
|
||||
goto free_inherit;
|
||||
}
|
||||
|
||||
nums = inherit->num_qgroups + 2 * inherit->num_ref_copies +
|
||||
2 * inherit->num_excl_copies;
|
||||
if (vol_args->size != struct_size(inherit, qgroups, nums)) {
|
||||
ret = -EINVAL;
|
||||
goto free_inherit;
|
||||
}
|
||||
}
|
||||
|
||||
ret = __btrfs_ioctl_snap_create(file, vol_args->name, vol_args->fd,
|
||||
|
Reference in New Issue
Block a user