]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: Avoid possible qgroup_rsv_size overflow in btrfs_calculate_inode_block_rsv_size
authorNikolay Borisov <nborisov@suse.com>
Mon, 18 Mar 2019 15:45:20 +0000 (17:45 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 19 Mar 2019 13:12:36 +0000 (14:12 +0100)
commitfe11845005ee6faa5ec2a9ab21b23ef43c96d78c
tree4ab775334ccbb2dbcdfa1c20e6e67569b7ab6721
parentce94a43ba0ebec8a5f10bb0fd1db8cc602ec6cfd
btrfs: Avoid possible qgroup_rsv_size overflow in btrfs_calculate_inode_block_rsv_size

qgroup_rsv_size is calculated as the product of
outstanding_extent * fs_info->nodesize. The product is calculated with
32 bit precision since both variables are defined as u32. Yet
qgroup_rsv_size expects a 64 bit result.

Avoid possible multiplication overflow by casting outstanding_extent to
u64. Such overflow would in the worst case (64K nodesize) require more
than 65536 extents, which is quite large and i'ts not likely that it
would happen in practice.

Fixes-coverity-id: 1435101
Fixes: d58e6433d31f ("btrfs: qgroup: Use independent and accurate per inode qgroup rsv")
CC: stable@vger.kernel.org # 4.19+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c