CVE-2024-50273CWE-908

CVE-2024-50273

High · published November 19, 2024

CVSS v3.1
7.8
EPSS
0%
Percentile
20.4
In the wild
Unconfirmed
What it is

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.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00290 · 20.4th percentile
Weakness
CWE-908 · Use of Uninitialized Resource
Published
2024-11-19T07:16Z
Affected products (13)
ProductVersionsFixed in
linux/linux_kernel≥ 4.10, < 4.19.3244.19.324
linux/linux_kernel≥ 4.20, < 5.4.2865.4.286
linux/linux_kernel≥ 5.5, < 5.10.2305.10.230
linux/linux_kernel≥ 5.11, < 5.15.1725.15.172
linux/linux_kernel≥ 5.16, < 6.1.1176.1.117
linux/linux_kernel≥ 6.2, < 6.6.616.6.61
linux/linux_kernel≥ 6.7, < 6.11.86.11.8
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (10)
EPSS history
Timeline
  • 19 NOV 01:30Z
    btrfs: reinitialize delayed ref list after deleting it from the list
    cvelistv5