Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

redhat логотип

CVE-2026-31649

Опубликовано: 24 апр. 2026
Источник: redhat
CVSS3: 6
EPSS Низкий

Описание

In the Linux kernel, the following vulnerability has been resolved: net: stmmac: fix integer underflow in chain mode The jumbo_frm() chain-mode implementation unconditionally computes len = nopaged_len - bmax; where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is BUF_SIZE_8KiB or BUF_SIZE_2KiB. However, the caller stmmac_xmit() decides to invoke jumbo_frm() based on skb->len (total length including page fragments): is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); When a packet has a small linear portion (nopaged_len <= bmax) but a large total length due to page fragments (skb->len > bmax), the subtraction wraps as an unsigned integer, producing a huge len value (~0xFFFFxxxx). This causes the while (len != 0) loop to execute hundreds of thousands of iterations, passing skb->data + bmax * i pointers far beyond the skb buffer to dma_map_single(). On IOMMU-less SoCs (the typical deployment for stmmac), this maps arbitrary kernel memory to the DMA engine, constituting a kernel memory disclosure and potential memory corruption from hardware. Fix this by introducing a buf_len local variable clamped to min(nopaged_len, bmax). Computing len = nopaged_len - buf_len is then always safe: it is zero when the linear portion fits within a single descriptor, causing the while (len != 0) loop to be skipped naturally, and the fragment loop in stmmac_xmit() handles page fragments afterward.

A flaw was found in the Linux kernel's stmmac network driver. An integer underflow vulnerability in the jumbo_frm() function, when processing specially crafted fragmented network packets, can lead to a memory disclosure and potential memory corruption. This issue allows an attacker to read arbitrary kernel memory and potentially corrupt it, impacting the system's integrity and confidentiality.

Отчет

A flaw was found in the Linux kernel's stmmac network driver. In chain mode, the jumbo_frm() function computes the descriptor length as nopaged_len - bmax using only the skb's linear data length, while stmmac_xmit() selects the jumbo path based on the total packet length including page fragments. When a packet with a small linear portion but a large total length is transmitted, the unsigned subtraction underflows, producing a huge length value that makes the transmit loop map kernel memory far beyond the skb buffer to the DMA engine. On IOMMU-less systems (the typical deployment for stmmac), this can result in kernel memory disclosure and potential memory corruption by the DMA hardware. Red Hat rates this flaw as having Moderate security impact because triggering it requires the ability to transmit specially crafted fragmented packets through a local stmmac interface, implying privileged local access (CVSS 6.0, AV:L/AC:L/PR:H); this differs substantially from the upstream CVEORG score of 9.8, which assumes a remote, unauthenticated network attack. Red Hat Enterprise Linux 6 and 7 are not affected because the vulnerable code is not present in those kernels. On the affected RHEL 8, 9, and 10 kernel and kernel-rt update streams the fix is currently deferred: given the Moderate rating and the privileged local access required to trigger the underflow, a fix is not planned for those streams at this time. The residual risk is that a privileged local user able to send crafted fragmented packets through an stmmac-based interface could cause kernel memory disclosure or corruption. Some affected streams are out of active support scope. For Red Hat In-Vehicle OS 2.0, where affectedness is delegated, the same impact applies and remediation is being pursued through the delegated process.

Меры по смягчению последствий

Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.

Затронутые пакеты

ПлатформаПакетСостояниеРекомендацияРелиз
Red Hat Enterprise Linux 10kernelFix deferred
Red Hat Enterprise Linux 6kernelNot affected
Red Hat Enterprise Linux 7kernelNot affected
Red Hat Enterprise Linux 7kernel-rtNot affected
Red Hat Enterprise Linux 8kernelFix deferred
Red Hat Enterprise Linux 8kernel-rtFix deferred
Red Hat Enterprise Linux 9kernelFix deferred
Red Hat Enterprise Linux 9kernel-rtFix deferred

Показывать по

Дополнительная информация

Статус:

Moderate
Дефект:
CWE-191
https://bugzilla.redhat.com/show_bug.cgi?id=2461551kernel: net: stmmac: fix integer underflow in chain mode

EPSS

Процентиль: 39%
0.00459
Низкий

6 Medium

CVSS3

Связанные уязвимости

CVSS3: 9.8
ubuntu
6 месяцев назад

In the Linux kernel, the following vulnerability has been resolved: net: stmmac: fix integer underflow in chain mode The jumbo_frm() chain-mode implementation unconditionally computes len = nopaged_len - bmax; where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is BUF_SIZE_8KiB or BUF_SIZE_2KiB. However, the caller stmmac_xmit() decides to invoke jumbo_frm() based on skb->len (total length including page fragments): is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); When a packet has a small linear portion (nopaged_len <= bmax) but a large total length due to page fragments (skb->len > bmax), the subtraction wraps as an unsigned integer, producing a huge len value (~0xFFFFxxxx). This causes the while (len != 0) loop to execute hundreds of thousands of iterations, passing skb->data + bmax * i pointers far beyond the skb buffer to dma_map_single(). On IOMMU-less SoCs (the typical deployment for stmmac), this maps arbitrary kernel memory to the DMA engine, const...

CVSS3: 9.8
nvd
6 месяцев назад

In the Linux kernel, the following vulnerability has been resolved: net: stmmac: fix integer underflow in chain mode The jumbo_frm() chain-mode implementation unconditionally computes len = nopaged_len - bmax; where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is BUF_SIZE_8KiB or BUF_SIZE_2KiB. However, the caller stmmac_xmit() decides to invoke jumbo_frm() based on skb->len (total length including page fragments): is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); When a packet has a small linear portion (nopaged_len <= bmax) but a large total length due to page fragments (skb->len > bmax), the subtraction wraps as an unsigned integer, producing a huge len value (~0xFFFFxxxx). This causes the while (len != 0) loop to execute hundreds of thousands of iterations, passing skb->data + bmax * i pointers far beyond the skb buffer to dma_map_single(). On IOMMU-less SoCs (the typical deployment for stmmac), this maps arbitrary kernel memory to the DMA en

CVSS3: 7.1
msrc
6 месяцев назад

net: stmmac: fix integer underflow in chain mode

CVSS3: 9.8
debian
6 месяцев назад

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

CVSS3: 9.8
github
6 месяцев назад

In the Linux kernel, the following vulnerability has been resolved: net: stmmac: fix integer underflow in chain mode The jumbo_frm() chain-mode implementation unconditionally computes len = nopaged_len - bmax; where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is BUF_SIZE_8KiB or BUF_SIZE_2KiB. However, the caller stmmac_xmit() decides to invoke jumbo_frm() based on skb->len (total length including page fragments): is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); When a packet has a small linear portion (nopaged_len <= bmax) but a large total length due to page fragments (skb->len > bmax), the subtraction wraps as an unsigned integer, producing a huge len value (~0xFFFFxxxx). This causes the while (len != 0) loop to execute hundreds of thousands of iterations, passing skb->data + bmax * i pointers far beyond the skb buffer to dma_map_single(). On IOMMU-less SoCs (the typical deployment for stmmac), this maps arbitrary kernel memory to the DMA...

EPSS

Процентиль: 39%
0.00459
Низкий

6 Medium

CVSS3