CVE-2024-53058 in the critical feed json
net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data
published last yr. modified 3mo ago also EUVD-2024-50474
- cvss
- 9.4
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.6%
- EPSS 0.6% chance of exploitation in 30 days, percentile 49%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data
In case the non-paged data of a SKB carries protocol header and protocol payload to be transmitted on a certain platform that the DMA AXI address width is configured to 40-bit/48-bit, or the size of the non-paged data is bigger than TSO_MAX_BUFF_SIZE on a certain platform that the DMA AXI address width is configured to 32-bit, then this SKB requires at least two DMA transmit descriptors to serve it.
For example, three descriptors are allocated to split one DMA buffer mapped from one piece of non-paged data: dma_desc[N + 0], dma_desc[N + 1], dma_desc[N + 2]. Then three elements of tx_q->tx_skbuff_dma[] will be allocated to hold extra information to be reused in stmmac_tx_clean(): tx_q->tx_skbuff_dma[N + 0], tx_q->tx_skbuff_dma[N + 1], tx_q->tx_skbuff_dma[N + 2]. Now we focus on tx_q->tx_skbuff_dma[entry].buf, which is the DMA buffer address returned by DMA mapping call. stmmac_tx_clean() will try to unmap the DMA buffer _ONLY_IF_ tx_q->tx_skbuff_dma[entry].buf is a valid buffer address.
The expected behavior that saves DMA buffer address of this non-paged data to tx_q->tx_skbuff_dma[entry].buf is: tx_q->tx_skbuff_dma[N + 0].buf = NULL; tx_q->tx_skbuff_dma[N + 1].buf = NULL; tx_q->tx_skbuff_dma[N + 2].buf = dma_map_single(); Unfortunately, the current code misbehaves like this: tx_q->tx_skbuff_dma[N + 0].buf = dma_map_single(); tx_q->tx_skbuff_dma[N + 1].buf = NULL; tx_q->tx_skbuff_dma[N + 2].buf = NULL;
On the stmmac_tx_clean() side, when dma_desc[N + 0] is closed by the DMA engine, tx_q->tx_skbuff_dma[N + 0].buf is a valid buffer address obviously, then the DMA buffer will be unmapped immediately. There may be a rare case that the DMA engine does not finish the pending dma_desc[N + 1], dma_desc[N + 2] yet. Now things will go horribly wrong, DMA is going to access a unmapped/unreferenced memory region, corrupted data will be transmited or iommu fault will be triggered :(
In contrast, the for-loop that maps SKB fragments behaves perfectly as expected, and that is how the driver should do for both non-paged data and paged frags actually.
This patch corrects DMA map/unmap sequences by fixing the array index for tx_q->tx_skbuff_dma[entry].buf when assigning DMA buffer address.
Tested and verified on DWXGMAC CORE 3.20a
Patch / fix
- Linux Linux 5.15.171, 6.1.116, 6.6.60, 6.11.7, 6.12
- linux Debian 12 6.1.119-1
- linux Debian 14, Debian 13 6.11.7-1
debian advisories DEBIAN-CVE-2024-53058
- linux Ubuntu 22.04 LTS 5.15.0-133.144
- linux Ubuntu 24.04 LTS 6.8.0-58.60
- linux-aws Ubuntu 22.04 LTS 5.15.0-1078.85
- linux-aws Ubuntu 24.04 LTS 6.8.0-1027.29
- linux-gcp Ubuntu 22.04 LTS 5.15.0-1077.86
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1028.30
- linux-gke Ubuntu 22.04 LTS 5.15.0-1075.81
- linux-gke Ubuntu 24.04 LTS 6.8.0-1023.27
ubuntu advisories UBUNTU-CVE-2024-53058
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-source Linux Micro 6.1, Linux Micro 6.0 6.4.0-24.1
- kernel-default Linux Micro 6.1, Linux Micro 6.0 6.4.0-24.1
- kernel-kvmsmall Linux Micro 6.1, Linux Micro 6.0 6.4.0-24.1
- kernel-default-base Linux Micro 6.1, Linux Micro 6.0 6.4.0-24.1.21.4
- kernel-livepatch-MICRO-6-0_Update_4 Linux Micro 6.1, Linux Micro 6.0 1-1.2
- kernel-rt Linux Micro 6.1, Linux Micro 6.0 6.4.0-22.1
- kernel-source-rt Linux Micro 6.1, Linux Micro 6.0 6.4.0-22.1
- kernel-livepatch-MICRO-6-0-RT_Update_4 Linux Micro 6.1, Linux Micro 6.0 1-1.1
suse advisories SUSE-SU-2025:20164-1SUSE-SU-2025:20247-1SUSE-SU-2025:20163-1SUSE-SU-2025:20246-1SUSE-SU-2025:0035-1SUSE-SU-2024:4387-1
- kernel Azure Linux 3.0 6.6.64.2-1
- kernel CBL-Mariner 2.0 5.15.173.1-1
azure linux advisories AZL-53834AZL-53942
Azure Linux vulnerability data, Copyright (c) Microsoft Corporation, from https://github.com/microsoft/AzureLinuxVulnerabilityData via OSV, under the MIT licence; changed: normalised to fixed package versions per release. MIT
- git.kernel.org/stable/c/ece593fc9c00741b682869d3f3dc584d37b7c9df commit
- git.kernel.org/stable/c/a3ff23f7c3f0e13f718900803e090fd3997d6bc9 commit
- git.kernel.org/stable/c/07c9c26e37542486e34d767505e842f48f29c3f6 commit
- git.kernel.org/stable/c/58d23d835eb498336716cca55b5714191a309286 commit
- git.kernel.org/stable/c/66600fac7a984dea4ae095411f644770b2561ede commit
Is CVE-2024-53058 in your stack? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerVendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2024-53058 updated cvss 5.5
kernel: net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- last yr.
Exploit prediction
0.61% chance of exploitation in the next 30 days, higher than 49% of all scored CVEs (FIRST EPSS, 2026-11-11).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 9.4 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:H |
| CISA ADP | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| CNA | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Technology feeds
References
-
git.kernel.org
/stable/c/ece593fc9c00741b682869d3f3dc584d37b7c9df
patch
-
git.kernel.org
/stable/c/a3ff23f7c3f0e13f718900803e090fd3997d6bc9
patch
-
git.kernel.org
/stable/c/07c9c26e37542486e34d767505e842f48f29c3f6
patch
-
git.kernel.org
/stable/c/58d23d835eb498336716cca55b5714191a309286
patch
-
git.kernel.org
/stable/c/66600fac7a984dea4ae095411f644770b2561ede
patch
- lists.debian.org /debian-lts-announce/2025/01/msg00001.html
Sources
- CVE List CVE-2024-53058
- NVD CVE-2024-53058
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.