{"id":17328,"date":"2026-09-05T02:31:00","date_gmt":"2026-09-04T18:31:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80824"},"modified":"2026-09-05T02:31:00","modified_gmt":"2026-09-04T18:31:00","slug":"cve-2026-80824","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80824","title":{"rendered":"CVE-2026-80824 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nusb: usbfs: fix use-a"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>usb: usbfs: fix use-after-free of usb_device in usbdev_release()<\/p>\n<p>usbdev_release() drops its reference to the struct usb_device before<br \/>\ndraining the list of completed async URBs, but that drain path reads back<br \/>\nthrough the same object: free_async() calls dec_usb_memory_use_count()<br \/>\nfor any URB whose buffer came from the usbfs mmap() region, and its first<br \/>\nstatement is bus_to_hcd(ps-&gt;dev-&gt;bus).<\/p>\n<p>After a disconnect the usbfs reference can be the last one, in which case<br \/>\nusb_put_dev() frees the device and the subsequent loop reads offset 80 of<br \/>\nfreed memory and uses the result as a struct usb_hcd *, which<br \/>\nhcd_buffer_free_pages() then dereferences.<\/p>\n<p>This is reachable by an unprivileged process that has read\/write access to<br \/>\na \/dev\/bus\/usb node: mmap() the fd, submit one URB with a buffer inside the<br \/>\nmapping, wait for the device to be unplugged, then munmap() and close().<br \/>\nIt reproduces on every attempt rather than being a race, because a live<br \/>\nMAP_SHARED vma holds a reference on the struct file, so usbdev_release()<br \/>\ncannot run until the last vma is gone and the freeing branch of<br \/>\ndec_usb_memory_use_count() is always taken.<\/p>\n<p>  BUG: KASAN: slab-use-after-free in dec_usb_memory_use_count+0x3ae\/0x410<br \/>\n  Read of size 8 at addr ffff8880122ee050 by task poc\/769<br \/>\n  CPU: 1 UID: 1000 PID: 769 Comm: poc Tainted: G    B    6.12.94 #3<\/p>\n<p>  Call Trace:<br \/>\n   dec_usb_memory_use_count+0x3ae\/0x410<br \/>\n   free_async+0x2aa\/0x4f0<br \/>\n   usbdev_release+0x375\/0x460<br \/>\n   __fput+0x3ea\/0xb50<br \/>\n   __x64_sys_close+0x86\/0x100<\/p>\n<p>  Allocated by task 11:<br \/>\n   usb_alloc_dev+0x55\/0xd90<br \/>\n   hub_event+0x2524\/0x43d0<\/p>\n<p>  Freed by task 769:<br \/>\n   kfree+0x121\/0x360<br \/>\n   device_release+0xd2\/0x280<br \/>\n   usb_put_dev+0x23\/0x30<br \/>\n   usbdev_release+0x2d8\/0x460<\/p>\n<p>Release the device reference after the drain loop instead. Nothing between<br \/>\nthe two points requires it to have been dropped.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>usb: usbfs: fix use-after-free of usb_device in usbdev_release()<\/p>\n<p>usbdev_release() drops its reference to the struct usb_device bef<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17328","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}