Description
In the Linux kernel, the following vulnerability has been resolved: btrfs: fix invalid pointer dereference in __btrfs_run_delayed_refs() In the beginning of the loop, we try to obtain a locked delayed ref head, if 'locked_ref' is currently NULL, by calling btrfs_select_ref_head(), which can return an error pointer. If the error pointer is -EAGAIN we do a continue and go back to the beginning of the loop, which will not try again to call btrfs_select_ref_head() since 'locked_ref' is no longer NULL but it's ERR_PTR(-EAGAIN), and then we do: spin_lock(&locked_ref->lock); against a ERR_PTR(-EAGAIN) value, generating an invalid pointer dereference. Fix this by ensuring that 'locked_ref' is set to NULL when btrfs_select_ref_head() returns ERR_PTR(-EAGAIN) and incrementing 'count' as well, to prevent infinite looping. We do this by doing a goto to the bottom of the loop that already sets 'locked_ref' to NULL and does a cond_resched(), with an increment to 'count' right before the goto. These measures were in place before the refactoring in commit 0110a4c43451 ("btrfs: refactor __btrfs_run_delayed_refs loop") but were unintentionally lost afterwards.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < c372ca227e16bace86f1df1fa4ae6849e2fcfa28affected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < a71143590ce9764dbcb47617647592ff8b4d48bcaffected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < 65770111a2d47c2b15e20b2ba92bb12198f289d4affected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < 015dc4a1e0c2cba551d4620eba13d26d5081dc34affected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < ba9fa2ff5981589bb49094d3358c339b37c47f53affected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < 3b15d02be05e74321adb1e0ae0cb4ccfba7c6cb1affected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < 9faa6b69ad73f03c7bde53e07d75a28822dc9a1aaffected0110a4c43451533de1ea1bbdc57b5d452f9d8b25 to < 486f8298b6188ff11ef1f4be7f1d5d2e4d1b1faeaffected
Linux Linux
Default version status: affected
4.20affected0 to < 4.20unaffected5.10.261 to ≤ 5.10.*unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/c372ca227e16bace86f1df1fa4ae6849e2fcfa28 ↗
- https://git.kernel.org/stable/c/a71143590ce9764dbcb47617647592ff8b4d48bc ↗
- https://git.kernel.org/stable/c/65770111a2d47c2b15e20b2ba92bb12198f289d4 ↗
- https://git.kernel.org/stable/c/015dc4a1e0c2cba551d4620eba13d26d5081dc34 ↗
- https://git.kernel.org/stable/c/ba9fa2ff5981589bb49094d3358c339b37c47f53 ↗
- https://git.kernel.org/stable/c/3b15d02be05e74321adb1e0ae0cb4ccfba7c6cb1 ↗
- https://git.kernel.org/stable/c/9faa6b69ad73f03c7bde53e07d75a28822dc9a1a ↗
- https://git.kernel.org/stable/c/486f8298b6188ff11ef1f4be7f1d5d2e4d1b1fae ↗