In the Linux kernel, the following vulnerability has been resolved:
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.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 3.5 | 4.14.299 |
| linux / linux_kernel | 4.15 | 4.19.265 |
| linux / linux_kernel | 4.20 | 5.4.224 |
| linux / linux_kernel | 5.5 | 5.10.154 |
| linux / linux_kernel | 5.11 | 5.15.78 |
| linux / linux_kernel | 5.16 | 6.0.8 |
| linux / linux_kernel | 6.1-rc1 | 6.1-rc1.x |
| linux / linux_kernel | 6.1-rc2 | 6.1-rc2.x |
| linux / linux_kernel | 6.1-rc3 | 6.1-rc3.x |