CVE-2024-50217CWE-416

CVE-2024-50217

High · published November 9, 2024

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

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

btrfs: fix use-after-free of block device file in __btrfs_free_extra_devids()

Mounting btrfs from two images (which have the same one fsid and two

different dev_uuids) in certain executing order may trigger an UAF for

variable 'device->bdev_file' in __btrfs_free_extra_devids(). And

following are the details:

1. Attach image_1 to loop0, attach image_2 to loop1, and scan btrfs

devices by ioctl(BTRFS_IOC_SCAN_DEV):

/ btrfs_device_1 → loop0

fs_device

\ btrfs_device_2 → loop1

2. mount /dev/loop0 /mnt

btrfs_open_devices

btrfs_device_1->bdev_file = btrfs_get_bdev_and_sb(loop0)

btrfs_device_2->bdev_file = btrfs_get_bdev_and_sb(loop1)

btrfs_fill_super

open_ctree

fail: btrfs_close_devices // -ENOMEM

btrfs_close_bdev(btrfs_device_1)

fput(btrfs_device_1->bdev_file)

// btrfs_device_1->bdev_file is freed

btrfs_close_bdev(btrfs_device_2)

fput(btrfs_device_2->bdev_file)

3. mount /dev/loop1 /mnt

btrfs_open_devices

btrfs_get_bdev_and_sb(&bdev_file)

// EIO, btrfs_device_1->bdev_file is not assigned,

// which points to a freed memory area

btrfs_device_2->bdev_file = btrfs_get_bdev_and_sb(loop1)

btrfs_fill_super

open_ctree

btrfs_free_extra_devids

if (btrfs_device_1->bdev_file)

fput(btrfs_device_1->bdev_file) // UAF !

Fix it by setting 'device->bdev_file' as 'NULL' after closing the

btrfs_device in btrfs_close_one_device().

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00278 · 19.3th percentile
Weakness
CWE-416 · Use After Free
Published
2024-11-09T16:15Z
Affected products (6)
ProductVersionsFixed in
linux/linux_kernel≥ 4.8, < 6.11.76.11.7
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (5)
EPSS history
Timeline
  • 09 NOV 10:14Z
    btrfs: fix use-after-free of block device file in __btrfs_free_extra_devids()
    cvelistv5