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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2025-38472— netfilter: nf_conntrack: fix crash due to removal of uninitialised entry

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存在安全漏洞,该漏洞源于删除未初始化的连接跟踪条目,可能导致崩溃。

CVSS 9.8 · Critical EPSS 0.43% · P37

Possible ATT&CK Techniques 1 AI

T1499 · Endpoint Denial of Service

Affected Version Matrix 14

VendorProduct Version RangeStatus
Linux Linux 1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912< a47ef874189d47f934d0809ae738886307c0ea22 affected
1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912< 76179961c423cd698080b5e4d5583cf7f4fcdde9 affected
1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912< fc38c249c622ff5e3011b8845fd49dbfd9289afc affected
1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912< 938ce0e8422d3793fe30df2ed0e37f6bc0598379 affected
1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912< 2d72afb340657f03f7261e9243b44457a9228ac7 affected
594cea2c09f7cd440d1ee1c4547d5bc6a646b0e4 affected
5.18.13< 5.19 affected
5.19 affected
… +6 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2025-38472

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
netfilter: nf_conntrack: fix crash due to removal of uninitialised entry
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_conntrack: fix crash due to removal of uninitialised entry A crash in conntrack was reported while trying to unlink the conntrack entry from the hash bucket list: [exception RIP: __nf_ct_delete_from_lists+172] [..] #7 [ff539b5a2b043aa0] nf_ct_delete at ffffffffc124d421 [nf_conntrack] #8 [ff539b5a2b043ad0] nf_ct_gc_expired at ffffffffc124d999 [nf_conntrack] #9 [ff539b5a2b043ae0] __nf_conntrack_find_get at ffffffffc124efbc [nf_conntrack] [..] The nf_conn struct is marked as allocated from slab but appears to be in a partially initialised state: ct hlist pointer is garbage; looks like the ct hash value (hence crash). ct->status is equal to IPS_CONFIRMED|IPS_DYING, which is expected ct->timeout is 30000 (=30s), which is unexpected. Everything else looks like normal udp conntrack entry. If we ignore ct->status and pretend its 0, the entry matches those that are newly allocated but not yet inserted into the hash: - ct hlist pointers are overloaded and store/cache the raw tuple hash - ct->timeout matches the relative time expected for a new udp flow rather than the absolute 'jiffies' value. If it were not for the presence of IPS_CONFIRMED, __nf_conntrack_find_get() would have skipped the entry. Theory is that we did hit following race: cpu x cpu y cpu z found entry E found entry E E is expired <preemption> nf_ct_delete() return E to rcu slab init_conntrack E is re-inited, ct->status set to 0 reply tuplehash hnnode.pprev stores hash value. cpu y found E right before it was deleted on cpu x. E is now re-inited on cpu z. cpu y was preempted before checking for expiry and/or confirm bit. ->refcnt set to 1 E now owned by skb ->timeout set to 30000 If cpu y were to resume now, it would observe E as expired but would skip E due to missing CONFIRMED bit. nf_conntrack_confirm gets called sets: ct->status |= CONFIRMED This is wrong: E is not yet added to hashtable. cpu y resumes, it observes E as expired but CONFIRMED: <resumes> nf_ct_expired() -> yes (ct->timeout is 30s) confirmed bit set. cpu y will try to delete E from the hashtable: nf_ct_delete() -> set DYING bit __nf_ct_delete_from_lists Even this scenario doesn't guarantee a crash: cpu z still holds the table bucket lock(s) so y blocks: wait for spinlock held by z CONFIRMED is set but there is no guarantee ct will be added to hash: "chaintoolong" or "clash resolution" logic both skip the insert step. reply hnnode.pprev still stores the hash value. unlocks spinlock return NF_DROP <unblocks, then crashes on hlist_nulls_del_rcu pprev> In case CPU z does insert the entry into the hashtable, cpu y will unlink E again right away but no crash occurs. Without 'cpu y' race, 'garbage' hlist is of no consequence: ct refcnt remains at 1, eventually skb will be free'd and E gets destroyed via: nf_conntrack_put -> nf_conntrack_destroy -> nf_ct_destroy. To resolve this, move the IPS_CONFIRMED assignment after the table insertion but before the unlock. Pablo points out that the confirm-bit-store could be reordered to happen before hlist add resp. the timeout fixup, so switch to set_bit and before_atomic memory barrier to prevent this. It doesn't matter if other CPUs can observe a newly inserted entry right before the CONFIRMED bit was set: Such event cannot be distinguished from above "E is the old incarnation" case: the entry will be skipped. Also change nf_ct_should_gc() to first check the confirmed bit. The gc sequence is: 1. Check if entry has expired, if not skip to next entry 2. Obtain a reference to the expired entry. 3. Call nf_ct_should_gc() to double-check step 1. nf_ct_should_gc() is thus called only for entries that already failed an expiry check. After this patch, once the confirmed bit check pas ---truncated---
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/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存在安全漏洞,该漏洞源于删除未初始化的连接跟踪条目,可能导致崩溃。
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 1397af5bfd7d32b0cf2adb70a78c9a9e8f11d912 ~ a47ef874189d47f934d0809ae738886307c0ea22 -
Linux Linux 5.19 -

II. Public POCs for CVE-2025-38472

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

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2025-38472

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

Same Patch Batch · Linux · 2025-07-28 · 29 CVEs total

CVE-2025-38488 9.8 CRITICAL smb: client: fix use-after-free in crypt_message when using async crypto
CVE-2025-38490 9.8 CRITICAL net: libwx: remove duplicate page_pool_put_full_page()
CVE-2025-38471 9.8 CRITICAL tls: always refresh the queue when reading sock
CVE-2025-38476 9.8 CRITICAL rpl: Fix use-after-free in rpl_do_srh_inline().
CVE-2025-38495 8.8 HIGH HID: core: ensure the allocated report buffer can contain the reserved report ID
CVE-2025-38491 8.2 HIGH mptcp: make fallback action and fallback decision atomic
CVE-2025-38478 7.8 HIGH comedi: Fix initialization of data for instructions that write to subdevice
CVE-2025-38485 7.8 HIGH iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush
CVE-2025-38486 7.8 HIGH soundwire: Revert "soundwire: qcom: Add set_channel_map api support"
CVE-2025-38484 7.8 HIGH iio: backend: fix out-of-bound write
CVE-2025-38494 7.8 HIGH HID: core: do not bypass hid_hw_raw_request
CVE-2025-38477 7.8 HIGH net/sched: sch_qfq: Fix race condition on qfq_aggregate
CVE-2025-38475 7.8 HIGH smc: Fix various oops due to inet_sock type confusion.
CVE-2025-38470 7.8 HIGH net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime
CVE-2025-38493 tracing/osnoise: Fix crash in timerlat_dump_stack()
CVE-2025-38492 netfs: Fix race between cache write completion and ALL_QUEUED being set
CVE-2025-38497 usb: gadget: configfs: Fix OOB read on empty string write
CVE-2025-38496 dm-bufio: fix sched in atomic context
CVE-2025-38468 net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree
CVE-2025-38489 s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL again

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

IV. Related Vulnerabilities

V. Comments for CVE-2025-38472

No comments yet


Leave a comment