Message ID | 20200527102810.147999-2-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs-progs: btrfs-image related fixes | expand |
diff --git a/print-tree.c b/print-tree.c index 27acadb22205..38cf8d34ac2e 100644 --- a/print-tree.c +++ b/print-tree.c @@ -1201,7 +1201,7 @@ void btrfs_print_leaf(struct extent_buffer *eb) struct btrfs_item *item; struct btrfs_disk_key disk_key; char flags_str[128]; - u32 leaf_data_size = BTRFS_LEAF_DATA_SIZE(fs_info); + u32 leaf_data_size = __BTRFS_LEAF_DATA_SIZE(eb->len); u32 i; u32 nr; u64 flags;
In certain call sites, like btrfs-image, we want full extent_buffer accessors, but don't have a btrfs_fs_info. In that case, if an extent buffer whose fs_info is NULL, then btrfs_print_leaf() is called on such eb, we will trigger a NULL pointer dereference, at BTRFS_LEAF_DATA_SIZE(fs_info). Fix this by using __BTRFS_LEAF_DATA_SIZE(), which only needs nodesize, and nodesize can be extracted from extent_buffer::len. This allows us to call btrfs_print_leaf() on any extent buffer, which is super handy in gdb. Signed-off-by: Qu Wenruo <wqu@suse.com> --- print-tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)