summaryrefslogtreecommitdiff
path: root/drivers/gnss
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2023-03-02 09:54:12 +0800
committerDavid Sterba <dsterba@suse.com>2023-03-15 20:51:05 +0100
commit1c3ab6dfa0692c3626580a508cf84e794201b357 (patch)
tree6469490346f90c90aafea80c5a5b97d0fddae517 /drivers/gnss
parent675dfe1223a69e270b3d52cb0211c8a501455cec (diff)
btrfs: handle missing chunk mapping more gracefully
[BUG] During my scrub rework, I did a stupid thing like this: bio->bi_iter.bi_sector = stripe->logical; btrfs_submit_bio(fs_info, bio, stripe->mirror_num); Above bi_sector assignment is using logical address directly, which lacks ">> SECTOR_SHIFT". This results a read on a range which has no chunk mapping. This results the following crash: BTRFS critical (device dm-1): unable to find logical 11274289152 length 65536 assertion failed: !IS_ERR(em), in fs/btrfs/volumes.c:6387 Sure this is all my fault, but this shows a possible problem in real world, that some bit flip in file extents/tree block can point to unmapped ranges, and trigger above ASSERT(), or if CONFIG_BTRFS_ASSERT is not configured, cause invalid pointer access. [PROBLEMS] In the above call chain, we just don't handle the possible error from btrfs_get_chunk_map() inside __btrfs_map_block(). [FIX] The fix is straightforward, replace the ASSERT() with proper error handling (callers handle errors already). Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'drivers/gnss')
0 files changed, 0 insertions, 0 deletions