]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: fix inode list leak during backref walking at resolve_indirect_refs()
authorFilipe Manana <fdmanana@suse.com>
Tue, 1 Nov 2022 16:15:37 +0000 (16:15 +0000)
committerDavid Sterba <dsterba@suse.com>
Wed, 2 Nov 2022 16:43:25 +0000 (17:43 +0100)
commit8bd0b39edfbf6971e2feccd230f69d0906a14b11
tree4b4c57b26365dddd5987dafbddd9fb543323299f
parentc9269771b354c68b427398b08c78963416f4f73d
btrfs: fix inode list leak during backref walking at resolve_indirect_refs()

During backref walking, at resolve_indirect_refs(), if we get an error
we jump to the 'out' label and call ulist_free() on the 'parents' ulist,
which frees all the elements in the ulist - however that does not free
any inode lists that may be attached to elements, through the 'aux' field
of a ulist node, so we end up leaking lists if we have any attached to
the unodes.

Fix this by calling free_leaf_list() instead of ulist_free() when we exit
from resolve_indirect_refs(). The static function free_leaf_list() is
moved up for this to be possible and it's slightly simplified by removing
unnecessary code.

Fixes: c80ba5760a97 ("Btrfs: add inodes before dropping the extent lock in find_all_leafs")
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/backref.c