diff options
| author | Qu Wenruo <wqu@suse.com> | 2025-11-25 18:49:56 +1030 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2025-12-09 04:35:28 +0100 |
| commit | 313ef70a9f0f637a09d9ef45222f5bdcf30a354b (patch) | |
| tree | b96e3d41920240af52531332fdc6774786a9d3e6 | |
| parent | 428e1b114c1ae94c44f0ae3a15dafcfae4d8a0b4 (diff) | |
btrfs: fix a potential path leak in print_data_reloc_error()
Inside print_data_reloc_error(), if extent_from_logical() failed we
return immediately.
However there are the following cases where extent_from_logical() can
return error but still holds a path:
- btrfs_search_slot() returned 0
- No backref item found in extent tree
- No flags_ret provided
This is not possible in this call site though.
So for the above two cases, we can return without releasing the path,
causing extent buffer leaks.
Fixes: b9a9a85059cd ("btrfs: output affected files when relocation fails")
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
| -rw-r--r-- | fs/btrfs/inode.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 0cbac085cdaf..6633b3dc9314 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -255,6 +255,7 @@ static void print_data_reloc_error(const struct btrfs_inode *inode, u64 file_off if (ret < 0) { btrfs_err_rl(fs_info, "failed to lookup extent item for logical %llu: %d", logical, ret); + btrfs_release_path(&path); return; } eb = path.nodes[0]; |
