linux/drivers/usb/dwc3
Jiazi Liu 1ff77cbefe 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 63ccd26cd1 ("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.

Fixes: 63ccd26cd1 ("usb: dwc3: gadget: check that event count does not exceed event buffer length")
Cc: stable <stable@kernel.org>
Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Signed-off-by: Jiazi Liu <jiazi.liu1984@gmail.com>
Link: https://patch.msgid.link/20260915110637.17658-1-jiazi.liu1984@gmail.com
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-10-01 10:22:53 +02:00
..
core.c Merge 7.2-rc3 into usb-next 2026-07-13 07:09:28 +02:00
core.h usb: dwc3: gadget: fix IRQ storm on invalid event buffer count 2026-10-01 10:22:53 +02:00
debug.h usb: dwc3: Add trace event for dwc3_set_prtcap 2025-09-06 15:21:59 +02:00
debugfs.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drd.c usb: dwc3: Add dwc pointer to dwc3_readl/writel 2026-01-16 13:47:07 +01:00
dwc3-am62.c usb: dwc3: am62: Fix runtime PM usage count leak on probe error path 2026-09-10 17:08:07 +02:00
dwc3-apple.c usb: dwc3: apple: Ignore USB role switches to the active role 2026-01-14 16:02:54 +01:00
dwc3-exynos.c usb: dwc3-exynos: add support for ExynosAutov920 2025-05-21 13:12:43 +02:00
dwc3-generic-plat.c usb: dwc3: starfive: Add JHB100 USB 2.0 DRD controller 2026-04-11 12:02:43 +02:00
dwc3-google.c usb: dwc3: google: Initialise probe properties with DWC3_DEFAULT_PROPERTIES 2026-09-01 16:31:55 +02:00
dwc3-haps.c usb: dwc3: haps: Constify the software node 2021-02-04 15:42:06 +01:00
dwc3-imx.c usb: dwc3: imx: avoid calling imx suspend/resume callbacks twice 2026-03-18 16:22:18 +01:00
dwc3-imx8mp.c usb: dwc3: imx8mp: fix memory leak on probe failure path 2026-04-02 09:37:45 +02:00
dwc3-keystone.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
dwc3-meson-g12a.c usb: dwc3: meson-g12a: fix refcount leak in dwc3_meson_g12a_resume() 2026-06-25 16:04:11 +01:00
dwc3-octeon.c usb: dwc3: dwc3-octeon: Use FIELD_MODIFY() 2026-05-21 16:43:04 +02:00
dwc3-of-simple.c usb: dwc3: of-simple: fix clock resource leak in dwc3_of_simple_probe 2025-12-17 14:54:38 +01:00
dwc3-omap.c usb: dwc3: omap: Fix devm_regulator_get_optional() error handling 2025-01-11 17:02:30 +01:00
dwc3-pci.c usb: dwc3: pci: add support for the Intel Nova Lake -H 2026-03-11 16:19:41 +01:00
dwc3-qcom-legacy.c usb: dwc3: qcom: Snapshot driver for backwards compatibilty 2025-04-15 14:29:19 +02:00
dwc3-qcom.c usb: dwc3: qcom: make dwc3_qcom_glue_ops static 2026-07-10 08:50:36 +02:00
dwc3-rtk.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
dwc3-st.c usb: dwc3: Don't use %pK through printk 2025-03-14 09:17:30 +01:00
dwc3-xilinx.c usb: dwc3: xilinx: use reset_control_reset() in versal init 2026-07-08 17:06:43 +02:00
ep0.c usb: dwc3: gadget: fix IRQ storm on invalid event buffer count 2026-10-01 10:22:53 +02:00
gadget.c usb: dwc3: gadget: fix IRQ storm on invalid event buffer count 2026-10-01 10:22:53 +02:00
gadget.h usb: dwc3: Add dwc pointer to dwc3_readl/writel 2026-01-16 13:47:07 +01:00
glue.h usb: dwc3: add needs_full_reinit flag 2026-02-25 10:35:58 -08:00
host.c usb: xhci: standardize multi bit-field macros 2026-08-14 10:26:41 +09:00
io.h usb: dwc3: Log dwc3 address in traces 2026-01-27 15:52:45 +01:00
Kconfig usb: dwc3: introduce flatten model driver of i.MX Soc 2026-02-25 10:35:58 -08:00
Makefile usb: dwc3: introduce flatten model driver of i.MX Soc 2026-02-25 10:35:58 -08:00
trace.c usb: dwc3: fix incorrect kernel-doc comment syntax in files 2021-04-02 15:20:51 +02:00
trace.h usb: dwc3: Log dwc3 address in traces 2026-01-27 15:52:45 +01:00
ulpi.c usb: dwc3: Support USB3340x ULPI PHY high-speed negotiation. 2026-03-11 15:00:28 +01:00