summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2020-07-31 19:29:11 +0800
committerDavid Sterba <dsterba@suse.com>2020-08-12 10:15:58 +0200
commitc57dd1f2f6a7cd1bb61802344f59ccdc5278c983 (patch)
treeed2df9be0de6cfb6a5a1deb332a72190c5a1ae45 /drivers/pinctrl
parent881a3a11c2b858fe9b69ef79ac5ee9978a266dc9 (diff)
downloadlinux-stable-c57dd1f2f6a7cd1bb61802344f59ccdc5278c983.tar.gz
linux-stable-c57dd1f2f6a7cd1bb61802344f59ccdc5278c983.tar.bz2
linux-stable-c57dd1f2f6a7cd1bb61802344f59ccdc5278c983.zip
btrfs: trim: fix underflow in trim length to prevent access beyond device boundary
[BUG] The following script can lead to tons of beyond device boundary access: mkfs.btrfs -f $dev -b 10G mount $dev $mnt trimfs $mnt btrfs filesystem resize 1:-1G $mnt trimfs $mnt [CAUSE] Since commit 929be17a9b49 ("btrfs: Switch btrfs_trim_free_extents to find_first_clear_extent_bit"), we try to avoid trimming ranges that's already trimmed. So we check device->alloc_state by finding the first range which doesn't have CHUNK_TRIMMED and CHUNK_ALLOCATED not set. But if we shrunk the device, that bits are not cleared, thus we could easily got a range starts beyond the shrunk device size. This results the returned @start and @end are all beyond device size, then we call "end = min(end, device->total_bytes -1);" making @end smaller than device size. Then finally we goes "len = end - start + 1", totally underflow the result, and lead to the beyond-device-boundary access. [FIX] This patch will fix the problem in two ways: - Clear CHUNK_TRIMMED | CHUNK_ALLOCATED bits when shrinking device This is the root fix - Add extra safety check when trimming free device extents We check and warn if the returned range is already beyond current device. Link: https://github.com/kdave/btrfs-progs/issues/282 Fixes: 929be17a9b49 ("btrfs: Switch btrfs_trim_free_extents to find_first_clear_extent_bit") CC: stable@vger.kernel.org # 5.4+ Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'drivers/pinctrl')
0 files changed, 0 insertions, 0 deletions