CVE-2024-50273

btrfs: reinitialize delayed ref list after deleting it from the list

State
Published
Severity
7.8 High
Published
Nov 19, 2024
Updated
Aug 5, 2026
Reserved
Oct 21, 2024

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

btrfs: reinitialize delayed ref list after deleting it from the list

At insert_delayed_ref() if we need to update the action of an existing ref to BTRFS_DROP_DELAYED_REF, we delete the ref from its ref head's ref_add_list using list_del(), which leaves the ref's add_list member not reinitialized, as list_del() sets the next and prev members of the list to LIST_POISON1 and LIST_POISON2, respectively.

If later we end up calling drop_delayed_ref() against the ref, which can happen during merging or when destroying delayed refs due to a transaction abort, we can trigger a crash since at drop_delayed_ref() we call list_empty() against the ref's add_list, which returns false since the list was not reinitialized after the list_del() and as a consequence we call list_del() again at drop_delayed_ref(). This results in an invalid list access since the next and prev members are set to poison pointers, resulting in a splat if CONFIG_LIST_HARDENED and CONFIG_DEBUG_LIST are set or invalid poison pointer dereferences otherwise.

So fix this by deleting from the list with list_del_init() instead.

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux
3.15.5 MediumCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:HCISA-ADP

Weaknesses

  • CWE-908 Use of Uninitialized Resource

Affected Products

ProductVersions
LinuxLinux
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before 2fd0948a483e9cb2d669c7199bc620a21c97673dAffected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before 93c5b8decc0ef39ba84f4211d2db6da0a4aefbebAffected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before bf0b0c6d159767c0d1c21f793950d78486690ee0Affected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before c24fa427fc0ae827b2a3a07f13738cbf82c3f851Affected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before 2cb1a73d1d44a1c11b0ee5eeced765dd80ec48e6Affected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before f04be6d68f715c1473a8422fc0460f57b5e99931Affected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before 50a3933760b427759afdd23156a7280a19357a92Affected
  • 1d57ee941692d0cc928526e21a1557b2ae3e11db to before c9a75ec45f1111ef530ab186c2a7684d0a0c9245Affected
LinuxLinux
  • 4.10Affected
  • before 4.10Not affected
  • 4.19.324 through 4.19.*Not affected
  • 5.4.286 through 5.4.*Not affected
  • 5.10.230 through 5.10.*Not affected
  • 5.15.172 through 5.15.*Not affected
  • 6.1.117 through 6.1.*Not affected
  • 6.6.61 through 6.6.*Not affected
  • 6.11.8 through 6.11.*Not affected
  • 6.12 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.