CVE-2022-48838

Severity CVSS v4.0:
Pending analysis
Type:
CWE-416 Use After Free
Publication date:
16/07/2024
Last modified:
24/07/2024

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> usb: gadget: Fix use-after-free bug by not setting udc-&gt;dev.driver<br /> <br /> The syzbot fuzzer found a use-after-free bug:<br /> <br /> BUG: KASAN: use-after-free in dev_uevent+0x712/0x780 drivers/base/core.c:2320<br /> Read of size 8 at addr ffff88802b934098 by task udevd/3689<br /> <br /> CPU: 2 PID: 3689 Comm: udevd Not tainted 5.17.0-rc4-syzkaller-00229-g4f12b742eb2b #0<br /> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014<br /> Call Trace:<br /> <br /> __dump_stack lib/dump_stack.c:88 [inline]<br /> dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106<br /> print_address_description.constprop.0.cold+0x8d/0x303 mm/kasan/report.c:255<br /> __kasan_report mm/kasan/report.c:442 [inline]<br /> kasan_report.cold+0x83/0xdf mm/kasan/report.c:459<br /> dev_uevent+0x712/0x780 drivers/base/core.c:2320<br /> uevent_show+0x1b8/0x380 drivers/base/core.c:2391<br /> dev_attr_show+0x4b/0x90 drivers/base/core.c:2094<br /> <br /> Although the bug manifested in the driver core, the real cause was a<br /> race with the gadget core. dev_uevent() does:<br /> <br /> if (dev-&gt;driver)<br /> add_uevent_var(env, "DRIVER=%s", dev-&gt;driver-&gt;name);<br /> <br /> and between the test and the dereference of dev-&gt;driver, the gadget<br /> core sets dev-&gt;driver to NULL.<br /> <br /> The race wouldn&amp;#39;t occur if the gadget core registered its devices on<br /> a real bus, using the standard synchronization techniques of the<br /> driver core. However, it&amp;#39;s not necessary to make such a large change<br /> in order to fix this bug; all we need to do is make sure that<br /> udc-&gt;dev.driver is always NULL.<br /> <br /> In fact, there is no reason for udc-&gt;dev.driver ever to be set to<br /> anything, let alone to the value it currently gets: the address of the<br /> gadget&amp;#39;s driver. After all, a gadget driver only knows how to manage<br /> a gadget, not how to manage a UDC.<br /> <br /> This patch simply removes the statements in the gadget core that touch<br /> udc-&gt;dev.driver.

Vulnerable products and versions

CPE From Up to
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 3.1 (including) 4.9.308 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.10 (including) 4.14.273 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.15 (including) 4.19.236 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (including) 5.4.187 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (including) 5.10.108 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (including) 5.15.31 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (including) 5.16.17 (excluding)