Linux: usb: dwc3: gadget: fix IRQ storm on invalid event buffer count
What fixes it
- 6cd82563bb270e03fe2f91324660ea14e3ce5d1aLinuxCVE List
- 96918ca25ff467c25675478fc79393df4ae9d74cLinuxCVE List
- 1ff77cbefe5a653ea12874c213ea4bd0d72c1067LinuxCVE List
- 6.6.160LinuxCVE List
- 6.12.113LinuxCVE List
- 5.5LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
usb: dwc3: gadget: fix IRQ storm on invalid event buffer count
When dwc3_check_event_buf() 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 IRQ_NONE 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: __report_bad_irq+0xac/0xc8 note_interrupt+0x340/0x468 handle_irq_event+0xac/0xc0 handle_fasteoi_irq+0x120/0x228 gic_handle_irq+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 <DWC3_BASE + 0xc40c> 4 0x1004
Write the bogus count back to GEVNTCOUNT to clear the IRQ source, consistent with the stale event clearing pattern in dwc3_event_buffers_setup(), and schedule error recovery to reinitialize the controller.
Text from CVE List
Affected versions 24
- Linuxaffected: c4d80e41cb42008dceb35e5dbf52574d93beac0d before 6cd82563bb270e03fe2f91324660ea14e3ce5d1aCVE List
- Linuxaffected: 52a7c9d930b95aa8b1620edaba4818040c32631f before 96918ca25ff467c25675478fc79393df4ae9d74cCVE List
- Linuxaffected: 63ccd26cd1f6600421795f6ca3e625076be06c9f before ba927133b301894e7d24099afbb701887c8cd2f1CVE List
- Linuxaffected: 63ccd26cd1f6600421795f6ca3e625076be06c9f before f51cadb02b439850ab411df0a2cf4288a66d42e2CVE List
- Linuxaffected: 63ccd26cd1f6600421795f6ca3e625076be06c9f before 1ff77cbefe5a653ea12874c213ea4bd0d72c1067CVE List
- Linuxaffected: 015c39f38e69a491d2abd5e98869a500a9459b3bCVE List
- Linuxaffected: b43225948b231b3f331194010f84512bee4d9f59CVE List
- Linuxaffected: c0079630f268843a25ed75226169cba40e0d8880CVE List
- Linuxaffected: a44547015287a19001384fe94dbff84c92ce4ee1CVE List
- Linuxaffected: 99d655119b870ee60e4dbf310aa9a1ed8d9ede3dCVE List
- Linuxaffected: 6.6.89 before 6.6.160CVE List
- Linuxaffected: 6.12.26 before 6.12.113CVE List
- Linuxaffected: 5.4.293 before 5.5CVE List
- Linuxaffected: 5.10.237 before 5.11CVE List
- Linuxaffected: 5.15.181 before 5.16CVE List
- Linuxaffected: 6.1.136 before 6.2CVE List
- Linuxaffected: 6.14.5 before 6.15CVE List
- Linuxaffected: 6.15CVE List
- Linuxunaffected: all versions before 6.15CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.113 through 6.12.*CVE List
- Linuxunaffected: 6.18.56 through 6.18.*CVE List
- Linuxunaffected: 7.2.10 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/6cd82563bb270e03fe2f91324660ea14e3ce5d1aReferencevia CVE List
- git.kernel.org/stable/c/96918ca25ff467c25675478fc79393df4ae9d74cReferencevia CVE List
- git.kernel.org/stable/c/ba927133b301894e7d24099afbb701887c8cd2f1Referencevia CVE List
- git.kernel.org/stable/c/f51cadb02b439850ab411df0a2cf4288a66d42e2Referencevia CVE List
- git.kernel.org/stable/c/1ff77cbefe5a653ea12874c213ea4bd0d72c1067Referencevia CVE List