CVE-2026-98767: usb: dwc3: gadget: fix IRQ storm on invalid event buffer count
In the Linux kernel, the following vulnerability has been resolved:
usb: dwc3: gadget: fix IRQ storm on invalid event buffer count
When dwc3checkeventbuf() reads a GEVNTCOUNT value exceeding the event buffer length, commit 63ccd26cd1f6 ("usb: dwc3: gadget: check that event count does not exceed event buffer length") returns IRQNONE without writing back GEVNTCOUNT. Since the DWC3 interrupt is level-triggered, the uncleared IRQ source keeps the line asserted, causing a tight IRQ storm that accumulates 99,900 unhandled interrupts and triggers spurious.c:184 BUG -> kernel panic.
The resulting call stack: reportbadirq+0xac/0xc8 noteinterrupt+0x340/0x468 handleirqevent+0xac/0xc0 handlefasteoiirq+0x120/0x228 gichandleirq+0x68/0x108 ... kernel BUG at kernel/irq/spurious.c:184
To reproduce, write a bogus value exceeding the event buffer length directly to the GEVNTCOUNT register:
devmem <DWC3BASE + 0xc40c> 4 0x1004
Write the bogus count back to GEVNTCOUNT to clear the IRQ source, consistent with the stale event clearing pattern in dwc3eventbufferssetup(), and schedule error recovery to reinitialize the controller.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
azurelinux/kernelto a version that resolves this vulnerability.Fixed in 6.6.159.1-1 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.12.113-1 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 7.2.10-1 - Upgrade
Upgrade
debian/linux-6.12to a version that resolves this vulnerability.Fixed in 6.12.113-1~deb12u1 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 5.15.224 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.1.191 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.6.160 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.12.113 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.18.56 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 7.2.10 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.12.115-2Fixed in 7.2.12-1Fixed in 7.2.15-1 - Operational
When GEVNTCOUNT exceeds the event buffer length, write the bogus count back to the GEVNTCOUNT register to clear the IRQ source, then schedule error recovery to reinitialize the DWC3 controller.
Event History
Frequently Asked Questions
What systems are exposed to this failure?
Systems using the Linux kernel's DWC3 USB gadget driver are exposed when the controller reports a GEVNTCOUNT value larger than its event buffer length. The issue is tied to the DWC3 controller interrupt path, not to all USB devices or drivers.
What is required to trigger the problem?
The failure requires an invalid, oversized value in the DWC3 GEVNTCOUNT register. The provided reproduction writes such a value directly to the register, so triggering it requires the ability to cause or write that invalid hardware register state.
What happens if the issue is triggered?
The interrupt source remains asserted because GEVNTCOUNT is not cleared, producing a level-triggered IRQ storm. After accumulating 99,900 unhandled interrupts, the kernel hits a BUG in spurious.c and panics.
What can be done if the updated fix cannot be deployed immediately?
Clear the IRQ source by writing the bogus count back to GEVNTCOUNT, then schedule error recovery to reinitialize the DWC3 controller. This follows the stale-event clearing pattern used during DWC3 event-buffer setup.