Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
btrfs-progs: do proper error handling in btrfs_chunk_readonly()
[BUG] For a fuzzed image, `btrfs check` both modes trigger BUG_ON(): Opening filesystem to check... volumes.c:1795: btrfs_chunk_readonly: BUG_ON `!ce` triggered, value 1 btrfs(+0x2f712)[0x557beff3b712] btrfs(+0x32059)[0x557beff3e059] btrfs(btrfs_read_block_groups+0x282)[0x557beff30972] btrfs(btrfs_setup_all_roots+0x3f3)[0x557beff2ab23] btrfs(+0x1ef53)[0x557beff2af53] btrfs(open_ctree_fs_info+0x90)[0x557beff2b1a0] btrfs(+0x6d3f9)[0x557beff793f9] btrfs(main+0x94)[0x557beff200c4] /usr/lib/libc.so.6(__libc_start_main+0xf3)[0x7f623ac97ee3] btrfs(_start+0x2e)[0x557beff2035e] [CAUSE] The fuzzed image has a bad extent tree: item 0 key (288230376165343232 BLOCK_GROUP_ITEM 8388608) itemoff 16259 itemsize 24 block group used 0 chunk_objectid 256 flags DATA There is no corresponding chunk for the block group. In then we hit the BUG_ON(), which expects chunk mapping for btrfs_chunk_readonly(). [FIX] Remove that BUG_ON() with proper error handling, and make btrfs_read_block_groups() handle the -ENOENT error from read_one_block_group() to continue. So one corrupted block group item won't screw up the remaining block group items. Issue: #209 Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
- Loading branch information