---
id: "CVE-2026-99188"
kind: "vulnerability"
aliases: ["CVE-2026-99188"]
title: "Linux kernel: stmmac RGMII status interrupt storm can lock up resume"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["arm-boards", "dwmac1000", "linux-kernel", "package", "rgmii", "stmmac", "wake-on-lan"]
not_affected_if: ["no-dwmac1000-mac", "no-rgmii"]
published_at: "2026-10-28T11:17:39+00:00"
first_seen_at: "2026-10-28T11:32:37+00:00"
updated_at: "2026-10-28T11:34:18+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99188", "first_seen_at": "2026-10-28T11:32:37+00:00"}]
---

# Linux kernel: stmmac RGMII status interrupt storm can lock up resume

In the Linux kernel's stmmac Ethernet driver for dwmac1000, a pending RGMII status bit is never cleared after a link change, so the MAC interrupt fires repeatedly. On resume from suspend this can starve the CPU and cause a soft lockup, watchdog reset or hang.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Look for the kernel log message `dwmac_dma_interrupt: unexpected status 04000000` after resume.
- Check whether the machine uses an stmmac dwmac1000 MAC, such as dwmac-rk or dwmac-meson8b, with RGMII.
- Check the kernel version against the fixed release; sources do not name affected version ranges.

## Fix

- Update the Linux kernel to a release that includes the commit clearing GMAC_RGSMIIIS in dwmac1000_irq_status(); the sources do not name the exact version.
- Until patched, unknown mitigation from the sources.

## Timeline

- 2026-10-28T11:32:37+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99188

## From the sources

In the Linux kernel, the following vulnerability has been resolved:

net: stmmac: dwmac1000: clear the RGMII status interrupt

Since commit 2e2c878a3141 ("net: stmmac: remove SGMII/RGMII/SMII
interrupt handling") nothing on the RGMII path reads GMAC_RGSMIIIS, so
RGSMIIIS stays pending behind GMAC_INT_MASK from the first link change
on. stmmac_resume() resets the MAC in stmmac_hw_setup(); the reset sets
GMAC_INT_MASK to 0 until dwmac1000_core_init() writes the mask again,
and the pending status storms the line:

  dwmac_dma_interrupt: unexpected status 04000000

A register dump at the first message on ODROID-HC4 showed it:

  core int_status 00000001 int_mask 00000000 pmt 00000000 rgsmiiis 0000000d

When the resume thread runs on the CPU that takes the MAC interrupt,
the storm starves it: a soft lockup, then a watchdog reset or a hang.

Read GMAC_RGSMIIIS in dwmac1000_irq_status() when the status is not
masked, as the driver did before 2e2c878a3141; the read clears it.

Wake-on-LAN resume from s2idle with the resume thread and the MAC
interrupt on one CPU: Helios64 (dwmac-rk), 7.3-rc6, soft-locked in 3 of
3 resumes without a fix and in 0 of 10 with this patch; it ran with an
out-of-tree dwmac-rk change that keeps the GMAC powered across suspend.
ODROID-HC4 (dwmac-meson8b): 0 of 10 with this patch, 2 of 2 without a
fix on a 7.3-rc5 build. irq_rgmii_n went up by one per resume.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
