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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2024-56788— net: ethernet: oa_tc6: fix tx skb race condition between reference pointers

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于oa_tc6驱动的tx skb引用计数竞争条件,可能导致数据包丢失和内存泄漏。

CVSS 7.5 · High EPSS 0.24% · P15

Possible ATT&CK Techniques 1 AI

T1059 · Command and Scripting Interpreter

Affected Version Matrix 6

VendorProduct Version RangeStatus
Linux Linux 53fbde8ab21e8c2c6187159cc17fc10cbf20900a< 1f2eb6c32bae04b375bb7a0aedbeefb6dbbcb775 affected
53fbde8ab21e8c2c6187159cc17fc10cbf20900a< e592b5110b3e9393881b0a019d86832bbf71a47f affected
6.12 affected
< 6.12 unaffected
6.12.7≤ 6.12.* unaffected
6.13≤ * unaffected
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2024-56788

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: ethernet: oa_tc6: fix tx skb race condition between reference pointers
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: net: ethernet: oa_tc6: fix tx skb race condition between reference pointers There are two skb pointers to manage tx skb's enqueued from n/w stack. waiting_tx_skb pointer points to the tx skb which needs to be processed and ongoing_tx_skb pointer points to the tx skb which is being processed. SPI thread prepares the tx data chunks from the tx skb pointed by the ongoing_tx_skb pointer. When the tx skb pointed by the ongoing_tx_skb is processed, the tx skb pointed by the waiting_tx_skb is assigned to ongoing_tx_skb and the waiting_tx_skb pointer is assigned with NULL. Whenever there is a new tx skb from n/w stack, it will be assigned to waiting_tx_skb pointer if it is NULL. Enqueuing and processing of a tx skb handled in two different threads. Consider a scenario where the SPI thread processed an ongoing_tx_skb and it moves next tx skb from waiting_tx_skb pointer to ongoing_tx_skb pointer without doing any NULL check. At this time, if the waiting_tx_skb pointer is NULL then ongoing_tx_skb pointer is also assigned with NULL. After that, if a new tx skb is assigned to waiting_tx_skb pointer by the n/w stack and there is a chance to overwrite the tx skb pointer with NULL in the SPI thread. Finally one of the tx skb will be left as unhandled, resulting packet missing and memory leak. - Consider the below scenario where the TXC reported from the previous transfer is 10 and ongoing_tx_skb holds an tx ethernet frame which can be transported in 20 TXCs and waiting_tx_skb is still NULL. tx_credits = 10; /* 21 are filled in the previous transfer */ ongoing_tx_skb = 20; waiting_tx_skb = NULL; /* Still NULL */ - So, (tc6->ongoing_tx_skb || tc6->waiting_tx_skb) becomes true. - After oa_tc6_prepare_spi_tx_buf_for_tx_skbs() ongoing_tx_skb = 10; waiting_tx_skb = NULL; /* Still NULL */ - Perform SPI transfer. - Process SPI rx buffer to get the TXC from footers. - Now let's assume previously filled 21 TXCs are freed so we are good to transport the next remaining 10 tx chunks from ongoing_tx_skb. tx_credits = 21; ongoing_tx_skb = 10; waiting_tx_skb = NULL; - So, (tc6->ongoing_tx_skb || tc6->waiting_tx_skb) becomes true again. - In the oa_tc6_prepare_spi_tx_buf_for_tx_skbs() ongoing_tx_skb = NULL; waiting_tx_skb = NULL; - Now the below bad case might happen, Thread1 (oa_tc6_start_xmit) Thread2 (oa_tc6_spi_thread_handler) --------------------------- ----------------------------------- - if waiting_tx_skb is NULL - if ongoing_tx_skb is NULL - ongoing_tx_skb = waiting_tx_skb - waiting_tx_skb = skb - waiting_tx_skb = NULL ... - ongoing_tx_skb = NULL - if waiting_tx_skb is NULL - waiting_tx_skb = skb To overcome the above issue, protect the moving of tx skb reference from waiting_tx_skb pointer to ongoing_tx_skb pointer and assigning new tx skb to waiting_tx_skb pointer, so that the other thread can't access the waiting_tx_skb pointer until the current thread completes moving the tx skb reference safely.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于oa_tc6驱动的tx skb引用计数竞争条件,可能导致数据包丢失和内存泄漏。
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

Vendor Product Affected Versions CPE Subscribe
Linux Linux 53fbde8ab21e8c2c6187159cc17fc10cbf20900a ~ 1f2eb6c32bae04b375bb7a0aedbeefb6dbbcb775 -
Linux Linux 6.12 -

II. Public POCs for CVE-2024-56788

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-56788

请登录查看更多情报信息。

Patches & Fixes for CVE-2024-56788 (2)

Same Patch Batch · Linux · 2025-01-11 · 67 CVEs total

CVE-2024-47408 9.8 CRITICAL net/smc: check smcd_v2_ext_offset when receiving proposal msg
CVE-2024-49568 9.8 CRITICAL net/smc: check v2_ext_offset/eid_cnt/ism_gid_cnt when receiving proposal msg
CVE-2024-57843 9.8 CRITICAL virtio-net: fix overflow inside virtnet_rq_alloc
CVE-2024-57793 9.3 CRITICAL virt: tdx-guest: Just leak decrypted memory on unrecoverable errors
CVE-2024-49571 9.1 CRITICAL net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg
CVE-2024-55639 8.4 HIGH net: renesas: rswitch: avoid use-after-put for a device tree node
CVE-2024-41149 7.8 HIGH block: avoid to reuse `hctx` not removed from cpuhp callback list
CVE-2024-57849 7.8 HIGH s390/cpum_sf: Handle CPU hotplug remove during sampling
CVE-2024-57850 7.8 HIGH jffs2: Prevent rtime decompress memory corruption
CVE-2024-52319 7.8 HIGH mm: use aligned address in clear_gigantic_page()
CVE-2024-51729 7.8 HIGH mm: use aligned address in copy_user_gigantic_page()
CVE-2024-57875 7.8 HIGH block: RCU protect disk->conv_zones_bitmap
CVE-2024-47794 7.8 HIGH bpf: Prevent tailcall infinite loop caused by freplace
CVE-2024-49569 7.5 HIGH nvme-rdma: unquiesce admin_q before destroy it
CVE-2024-57791 7.5 HIGH net/smc: check return value of sock_recvmsg when draining clc data
CVE-2024-57804 7.3 HIGH scsi: mpi3mr: Fix corrupt config pages PHY state is switched in sysfs
CVE-2024-57792 7.3 HIGH power: supply: gpio-charger: Fix set charge current limits
CVE-2024-56368 7.1 HIGH ring-buffer: Fix overflow in __rb_map_vma
CVE-2024-49573 7.0 HIGH sched/fair: Fix NEXT_BUDDY
CVE-2024-56372 net: tun: fix tun_napi_alloc_frags()

Showing top 20 of 67 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2024-56788

No comments yet


Leave a comment