]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: deal with missing root in sample_block_group_extent_item()
authorFilipe Manana <fdmanana@suse.com>
Wed, 21 Jan 2026 20:48:35 +0000 (20:48 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 3 Feb 2026 06:56:19 +0000 (07:56 +0100)
In case the root does not exists, which is unexpected, btrfs_extent_root()
returns NULL, but we ignore that and so if it happens we can trigger a
NULL pointer dereference later. So verify if we found the root and log an
error message in case it's missing.

Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c

index 66c512bc022c58b1f521f129e7a81b1ca54bdd66..28aa87872f0d9714ebc03773970240d9d34e6ef9 100644 (file)
@@ -607,6 +607,12 @@ static int sample_block_group_extent_item(struct btrfs_caching_control *caching_
        lockdep_assert_held_read(&fs_info->commit_root_sem);
 
        extent_root = btrfs_extent_root(fs_info, block_group->start);
+       if (unlikely(!extent_root)) {
+               btrfs_err(fs_info,
+                         "missing extent root for block group at offset %llu",
+                         block_group->start);
+               return -EUCLEAN;
+       }
 
        search_offset = index * div_u64(block_group->length, max_index);
        search_key.objectid = block_group->start + search_offset;