← All Advisories
Reported from OT-Advisories.com as of

Linux Linux Kernel Null Pointer Dereference Exposed to Unauthenticated Network Attackers

Last refreshed2026-10-15

Status: UPDATED  |  Advisory ID: CVE-2026-46110

Key Details

CVECVE-2026-46110
CVSS Score / Version
7.5 (High) / CVSS v3.1
Updated2026-10-15
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS Prose
attack vector is network; attack complexity is low; privileges required is none; user interaction is none; scope is unchanged; confidentiality impact is none; integrity impact is none; availability impact is high.
Affected products
Linux Kernel and Siemens SIMATIC S7-1500 TM MFP - GNU/Linux subsystem
Classified as
CWE-476 (NULL Pointer Dereference)
Exploitation prediction (EPSS)
0.70% probability of exploitation in the next 30 days (52% percentile) -- FIRST.org's EPSS model.

Affected Products, Subsystems & Sectors

VendorProductAffected VersionsPatch Status
LinuxLinux Kernel
SiemensSIMATIC S7-1500 TM MFP - GNU/Linux subsystem
SubsystemsControllers & Field I/O, OT Supporting Infrastructure
SectorsAll Sectors

What to Know

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

net: stmmac: Prevent NULL deref when RX memory exhausted

The CPU receives frames from the MAC through conventional DMA: the CPU

allocates buffers for the MAC, then the MAC fills them and returns

ownership to the CPU. For each hardware RX queue, the CPU and MAC

coordinate through a shared ring array of DMA descriptors: one

descriptor per DMA buffer. Each descriptor includes the buffer's

physical address and a status flag ("OWN") indicating which side owns

the buffer: OWN=0 for CPU, OWN=1 for MAC. The CPU is only allowed to set

the flag and the MAC is only allowed to clear it, and both must move

through the ring in sequence: thus the ring is used for both

"submissions" and "completions."

In the stmmac driver, stmmac_rx() bookmarks its position in the ring

with the `cur_rx` index. The main receive loop in that function checks

for rx_descs[cur_rx].own=0, gives the corresponding buffer to the

network stack (NULLing the pointer), and increments `cur_rx` modulo the

ring size. After the loop exits, stmmac_rx_refill(), which bookmarks its

position with `dirty_rx`, allocates fresh buffers and rearms the

descriptors (setting OWN=1). If it fails any allocation, it simply stops

early (leaving OWN=0) and will retry where it left off when next called.

This means descriptors have a three-stage lifecycle (terms my own):

- `empty` (OWN=1, buffer valid)

- `full` (OWN=0, buffer valid and populated)

- `dirty` (OWN=0, buffer NULL)

But because stmmac_rx() only checks OWN, it confuses `full`/`dirty`. In

the past (see 'Fixes:'), there was a bug where the loop could cycle

`cur_rx` all the way back to the first descriptor it dirtied, resulting

in a NULL dereference when mistaken for `full`. The aforementioned

commit resolved that *specific* failure by capping the loop's iteration

limit at `dma_rx_size - 1`, but this is only a partial fix: if the

previous stmmac_rx_refill() didn't complete, then there are leftover

`dirty` descriptors that the loop might encounter without needing to

cycle fully around. The current code therefore panics (see 'Closes:')

when stmmac_rx_refill() is memory-starved long enough for `cur_rx` to

catch up to `dirty_rx`.

Fix this by explicitly checking, before advancing `cur_rx`, if the next

entry is dirty; exit the loop if so. This prevents processing of the

final, used descriptor until stmmac_rx_refill() succeeds, but

fully prevents the `cur_rx == dirty_rx` ambiguity as the previous bugfix

intended: so remove the clamp as well. Since stmmac_rx_zc() is a

copy-paste-and-tweak of stmmac_rx() and the code structure is identical,

any fix to stmmac_rx() will also need a corresponding fix for

stmmac_rx_zc(). Therefore, apply the same check there.

In stmmac_rx() (not stmmac_rx_zc()), a related bug remains: after the

MAC sets OWN=0 on the final descriptor, it will be unable to send any

further DMA-complete IRQs until it's given more `empty` descriptors.

Currently, the driver simply *hopes* that the next stmmac_rx_refill()

succeeds, risking an indefinite stall of the receive process if not. But

this is not a regression, so it can be addressed in a future change. (NVD)

What to Do

Monitor Linux's and Siemens's web pages for any future patch releases.

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-46110
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-46110
Report compilation © 2026 OT-Advisories.com  ·  CC BY 4.0  ·  Source materials remain the property of their respective publishers as cited.