CVE-2024-26802: stmmac: Clear variable when destroying workqueue
In the Linux kernel, the following vulnerability has been resolved:
stmmac: Clear variable when destroying workqueue
Currently when suspending driver and stopping workqueue it is checked whether
workqueue is not NULL and if so, it is destroyed.
Function destroy_workqueue() does drain queue and does clear variable, but
it does not set workqueue variable to NULL. This can cause kernel/module
panic if code attempts to clear workqueue that was not initialized.
This scenario is possible when resuming suspended driver in stmmac_resume(),
because there is no handling for failed stmmac_hw_setup(),
which can fail and return if DMA engine has failed to initialize,
and workqueue is initialized after DMA engine.
Should DMA engine fail to initialize, resume will proceed normally,
but interface won't work and TX queue will eventually timeout,
causing 'Reset adapter' error.
This then does destroy workqueue during reset process.
And since workqueue is initialized after DMA engine and can be skipped,
it will cause kernel/module panic.
To secure against this possible crash, set workqueue variable to NULL when
destroying workqueue.
Log/backtrace from crash goes as follows:
[88.031977]------------[ cut here ]------------
[88.031985]NETDEV WATCHDOG: eth0 (sxgmac): transmit queue 1 timed out
[88.032017]WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:477 dev_watchdog+0x390/0x398
<Skipping backtrace for watchdog timeout>
[88.032251]---[ end trace e70de432e4d5c2c0 ]---
[88.032282]sxgmac 16d88000.ethernet eth0: Reset adapter.
[88.036359]------------[ cut here ]------------
[88.036519]Call trace:
[88.036523] flush_workqueue+0x3e4/0x430
[88.036528] drain_workqueue+0xc4/0x160
[88.036533] destroy_workqueue+0x40/0x270
[88.036537] stmmac_fpe_stop_wq+0x4c/0x70
[88.036541] stmmac_release+0x278/0x280
[88.036546] __dev_close_many+0xcc/0x158
[88.036551] dev_close_many+0xbc/0x190
[88.036555] dev_close.part.0+0x70/0xc0
[88.036560] dev_close+0x24/0x30
[88.036564] stmmac_service_task+0x110/0x140
[88.036569] process_one_work+0x1d8/0x4a0
[88.036573] worker_thread+0x54/0x408
[88.036578] kthread+0x164/0x170
[88.036583] ret_from_fork+0x10/0x20
[88.036588]---[ end trace e70de432e4d5c2c1 ]---
[88.036597]Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
Security readout for executives and security teams
Plain-English summary
A flaw in the Linux stmmac Ethernet driver can crash the kernel during recovery after a failed resume. The driver may try to destroy a workqueue that was never initialized because an old pointer was not cleared. Affected systems could lose networking or restart, creating operational downtime.
Executive priority
Prioritize remediation on production devices using stmmac where a kernel panic or network outage affects safety, availability, or remote management. Treat other Linux systems as lower immediate priority after confirming the driver is absent. There is no supplied evidence of active exploitation.
Technical view
After stmmac destroys its FPE workqueue, the pointer remains non-NULL. If stmmac_hw_setup() later fails during resume before workqueue initialization, recovery from a transmit timeout can pass the stale pointer to destroy_workqueue(), causing a NULL-pointer dereference and kernel panic. The published correction clears the pointer when the workqueue is destroyed.
Likely exposure
Exposure is limited to Linux systems using the stmmac Ethernet driver, particularly devices that suspend and resume. Triggering requires a DMA initialization failure followed by transmit-timeout recovery. The bundle lists affected kernel points from 5.13 through 6.8 but does not provide complete distribution-specific package mappings.
Exploitation context
The CVSS 3.1 score is 7.8 with a local, low-privilege vector. The supplied record is not in KEV and provides no evidence of active exploitation. The documented outcome is a kernel panic; although the vector rates confidentiality and integrity impacts high, the description only demonstrates availability loss.
Researcher notes
The failure path combines stale workqueue state, failed DMA initialization during stmmac_resume(), and later reset handling after a transmit timeout. The corrective pattern is to set the workqueue pointer to NULL after destruction. Exact vulnerable and fixed package boundaries require confirmation from kernel or distribution advisories.
Mitigation direction
Install a vendor or distribution kernel containing the referenced stable fix.
Confirm the relevant fix was backported; kernel version numbers alone may not establish patch status.
Prioritize embedded, industrial, and other systems using stmmac that regularly suspend and resume.
Where updates are delayed, consult vendor guidance for supported operational mitigations.
Validation and detection
Inventory kernels, distribution package revisions, and systems loading the stmmac driver.
Compare kernel source or vendor changelogs against the referenced stable commits.
Review logs for stmmac resume failures, transmit timeouts, adapter resets, or workqueue-related panics.
Test suspend and resume stability in a controlled environment after updating.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2024-26802 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.