Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2024-53058— net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data

EPSS 0.01% · P1
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2024-53058

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data
Source: NVD (National Vulnerability Database)
Vulnerability Description
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
Source: NVD (National Vulnerability Database)
CVSS Information
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Type
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于存在非页SKB数据的不平衡DMA映射或取消映射问题。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

VendorProductAffected VersionsCPESubscribe
LinuxLinux f748be531d7012c456b97f66091d86b3675c5fef ~ ece593fc9c00741b682869d3f3dc584d37b7c9df -
LinuxLinux 4.7 -

II. Public POCs for CVE-2024-53058

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-53058

登录查看更多情报信息。

Same Patch Batch · Linux · 2024-11-19 · 88 CVEs total

CVE-2024-53056drm/mediatek: Fix potential NULL dereference in mtk_crtc_destroy()
CVE-2024-53052io_uring/rw: fix missing NOWAIT check for O_DIRECT start write
CVE-2024-53053scsi: ufs: core: Fix another deadlock during RTC update
CVE-2024-53050drm/i915/hdcp: Add encoder check in hdcp2_get_capability
CVE-2024-53049slub/kunit: fix a WARNING due to unwrapped __kmalloc_cache_noprof
CVE-2024-53047mptcp: init: protect sched with rcu_read_lock
CVE-2024-53045ASoC: dapm: fix bounds checker error in dapm_widget_list_create
CVE-2024-53046arm64: dts: imx8ulp: correct the flexspi compatible string
CVE-2024-53044net/sched: sch_api: fix xa_insert() error path in tcf_block_get_ext()
CVE-2024-53048ice: fix crash on probe for DPLL enabled E810 LOM
CVE-2024-53055wifi: iwlwifi: mvm: fix 6 GHz scan construction
CVE-2024-53057net/sched: stop qdisc_tree_reduce_backlog on TC_H_ROOT
CVE-2024-53059wifi: iwlwifi: mvm: Fix response handling in iwl_mvm_send_recovery_cmd()
CVE-2024-53060drm/amdgpu: prevent NULL pointer dereference if ATIF is not supported
CVE-2024-53061media: s5p-jpeg: prevent buffer overflows
CVE-2024-53062media: mgb4: protect driver against spectre
CVE-2024-53064idpf: fix idpf_vc_core_init error path
CVE-2024-53063media: dvbdev: prevent the risk of out of memory access
CVE-2024-53066nfs: Fix KMSAN warning in decode_getfattr_attrs()
CVE-2024-53065mm/slab: fix warning caused by duplicate kmem_cache creation in kmem_buckets_create

Showing top 20 of 88 CVEs. View all on vendor page → →

IV. Related Vulnerabilities

V. Comments for CVE-2024-53058

No comments yet


Leave a comment