All vulnerabilities
CVE-2026-97953

Linux: net: stmmac: fix TX descriptor availability check for TSO traffic

Linux LinuxOperating systems
CVSS
7.0High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.41%Chance of exploitation activity in the next 30 days, higher than 34% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in09c30547da2c45bb79f7d3adffc860af332c2d42Also 65820fc743eae322f7f94f6a64d07861211d4b21, 5e38d732ec67a5b1f9a56e6c73add480c4b6030aCVE List
Published25 Sep 2026Updated 21 Oct 2026CVE List

What fixes it

  • 09c30547da2c45bb79f7d3adffc860af332c2d42LinuxCVE List
  • 65820fc743eae322f7f94f6a64d07861211d4b21LinuxCVE List
  • 5e38d732ec67a5b1f9a56e6c73add480c4b6030aLinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

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

net: stmmac: fix TX descriptor availability check for TSO traffic

stmmac_tso_xmit() estimates the number of free TX descriptors required by a TSO skb as:

(skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1

which assumes the payload is split into TSO_MAX_BUFF_SIZE chunks. This underestimates the descriptors actually consumed by stmmac_tso_allocator(), since each fragment is mapped individually and so it needs at least one descriptor regardless of its size. Moreover, one descriptor is used for the L2/L3/L4 headers and, when the MSS changes, one more is consumed for the MSS context descriptor. For a highly fragmented TSO skb the check can therefore pass even when the ring has too few free slots. stmmac_tso_allocator() then writes past the available descriptors, overwriting descriptors still owned by the DMA engine, corrupting the TX ring. Add stmmac_tso_get_num_desc() to compute the exact number of descriptors needed for the header, the linear payload and each fragment, plus the MSS context descriptor when required, and use it in the availability check.

Text from CVE List

Affected versions 12

  • Linuxaffected: f748be531d7012c456b97f66091d86b3675c5fef before 09c30547da2c45bb79f7d3adffc860af332c2d42CVE List
  • Linuxaffected: f748be531d7012c456b97f66091d86b3675c5fef before ffa6d2481bc1c87f822ecd626561484e4ee24cefCVE List
  • Linuxaffected: f748be531d7012c456b97f66091d86b3675c5fef before c28175220f808c867d5618de8ecc6dbcc815c773CVE List
  • Linuxaffected: f748be531d7012c456b97f66091d86b3675c5fef before 65820fc743eae322f7f94f6a64d07861211d4b21CVE List
  • Linuxaffected: f748be531d7012c456b97f66091d86b3675c5fef before 5e38d732ec67a5b1f9a56e6c73add480c4b6030aCVE List
  • Linuxaffected: 4.7CVE List
  • Linuxunaffected: all versions before 4.7CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.111 through 6.12.*CVE List
  • Linuxunaffected: 6.18.53 through 6.18.*CVE List
  • Linuxunaffected: 7.2.7 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 5