CVE-2022-48869

USB: gadgetfs: Fix race between mounting and unmounting

published August 21, 2024

CVSS
—
EPSS
0%
Percentile
13.3
In the wild
Unconfirmed
What it is

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

USB: gadgetfs: Fix race between mounting and unmounting

The syzbot fuzzer and Gerald Lee have identified a use-after-free bug

in the gadgetfs driver, involving processes concurrently mounting and

unmounting the gadgetfs filesystem. In particular, gadgetfs_fill_super()

can race with gadgetfs_kill_sb(), causing the latter to deallocate

the_device while the former is using it. The output from KASAN says,

in part:

BUG: KASAN: use-after-free in instrument_atomic_read_write include/linux/instrumented.h:102 [inline]

BUG: KASAN: use-after-free in atomic_fetch_sub_release include/linux/atomic/atomic-instrumented.h:176 [inline]

BUG: KASAN: use-after-free in __refcount_sub_and_test include/linux/refcount.h:272 [inline]

BUG: KASAN: use-after-free in __refcount_dec_and_test include/linux/refcount.h:315 [inline]

BUG: KASAN: use-after-free in refcount_dec_and_test include/linux/refcount.h:333 [inline]

BUG: KASAN: use-after-free in put_dev drivers/usb/gadget/legacy/inode.c:159 [inline]

BUG: KASAN: use-after-free in gadgetfs_kill_sb+0x33/0x100 drivers/usb/gadget/legacy/inode.c:2086

Write of size 4 at addr ffff8880276d7840 by task syz-executor126/18689

CPU: 0 PID: 18689 Comm: syz-executor126 Not tainted 6.1.0-syzkaller #0

Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022

Call Trace:

<TASK>

...

atomic_fetch_sub_release include/linux/atomic/atomic-instrumented.h:176 [inline]

__refcount_sub_and_test include/linux/refcount.h:272 [inline]

__refcount_dec_and_test include/linux/refcount.h:315 [inline]

refcount_dec_and_test include/linux/refcount.h:333 [inline]

put_dev drivers/usb/gadget/legacy/inode.c:159 [inline]

gadgetfs_kill_sb+0x33/0x100 drivers/usb/gadget/legacy/inode.c:2086

deactivate_locked_super+0xa7/0xf0 fs/super.c:332

vfs_get_super fs/super.c:1190 [inline]

get_tree_single+0xd0/0x160 fs/super.c:1207

vfs_get_tree+0x88/0x270 fs/super.c:1531

vfs_fsconfig_locked fs/fsopen.c:232 [inline]

The simplest solution is to ensure that gadgetfs_fill_super() and

gadgetfs_kill_sb() are serialized by making them both acquire a new

mutex.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00232 · 13.3th percentile
Published
2024-08-21T06:09Z
EPSS history
Timeline
  • 21 AUG 06:09Z
    USB: gadgetfs: Fix race between mounting and unmounting
    cvelistv5