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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2025-37786— net: dsa: free routing table on probe failure

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存在安全漏洞,该漏洞源于dsa_tree_setup中未释放路由表内存。

AI Predicted 7.8 Difficulty: Hard EPSS 0.19% · P9

Possible ATT&CK Techniques 1 AI

T1499 · Endpoint Denial of Service

Affected Version Matrix 14

VendorProduct Version RangeStatus
Linux Linux c5f51765a1f60b701840544faf3ca63204b8dc3c< 51df5513cca6349d0bea01bab95cd96cf869976e affected
c5f51765a1f60b701840544faf3ca63204b8dc3c< 6c20894d21600ca1e8549086dfbb986e277bf8a6 affected
c5f51765a1f60b701840544faf3ca63204b8dc3c< fb12b460ec46c9efad98de6d9ba349691db51dc7 affected
c5f51765a1f60b701840544faf3ca63204b8dc3c< 5c8066fbdb9653c6e9a224bdcd8f9c91a484f0de affected
c5f51765a1f60b701840544faf3ca63204b8dc3c< a038f5f15af455dfe35bc68549e02b950978700a affected
c5f51765a1f60b701840544faf3ca63204b8dc3c< 8bf108d7161ffc6880ad13a0cc109de3cf631727 affected
5.5 affected
< 5.5 unaffected
… +6 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2025-37786

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: dsa: free routing table on probe failure
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: net: dsa: free routing table on probe failure If complete = true in dsa_tree_setup(), it means that we are the last switch of the tree which is successfully probing, and we should be setting up all switches from our probe path. After "complete" becomes true, dsa_tree_setup_cpu_ports() or any subsequent function may fail. If that happens, the entire tree setup is in limbo: the first N-1 switches have successfully finished probing (doing nothing but having allocated persistent memory in the tree's dst->ports, and maybe dst->rtable), and switch N failed to probe, ending the tree setup process before anything is tangible from the user's PoV. If switch N fails to probe, its memory (ports) will be freed and removed from dst->ports. However, the dst->rtable elements pointing to its ports, as created by dsa_link_touch(), will remain there, and will lead to use-after-free if dereferenced. If dsa_tree_setup_switches() returns -EPROBE_DEFER, which is entirely possible because that is where ds->ops->setup() is, we get a kasan report like this: ================================================================== BUG: KASAN: slab-use-after-free in mv88e6xxx_setup_upstream_port+0x240/0x568 Read of size 8 at addr ffff000004f56020 by task kworker/u8:3/42 Call trace: __asan_report_load8_noabort+0x20/0x30 mv88e6xxx_setup_upstream_port+0x240/0x568 mv88e6xxx_setup+0xebc/0x1eb0 dsa_register_switch+0x1af4/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 Allocated by task 42: __kasan_kmalloc+0x84/0xa0 __kmalloc_cache_noprof+0x298/0x490 dsa_switch_touch_ports+0x174/0x3d8 dsa_register_switch+0x800/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 Freed by task 42: __kasan_slab_free+0x48/0x68 kfree+0x138/0x418 dsa_register_switch+0x2694/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 The simplest way to fix the bug is to delete the routing table in its entirety. dsa_tree_setup_routing_table() has no problem in regenerating it even if we deleted links between ports other than those of switch N, because dsa_link_touch() first checks whether the port pair already exists in dst->rtable, allocating if not. The deletion of the routing table in its entirety already exists in dsa_tree_teardown(), so refactor that into a function that can also be called from the tree setup error path. In my analysis of the commit to blame, it is the one which added dsa_link elements to dst->rtable. Prior to that, each switch had its own ds->rtable which is freed when the switch fails to probe. But the tree is potentially persistent memory.
Source: CVE Program / CVE List V5
CVSS Information
N/A
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存在安全漏洞,该漏洞源于dsa_tree_setup中未释放路由表内存。
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 c5f51765a1f60b701840544faf3ca63204b8dc3c ~ 51df5513cca6349d0bea01bab95cd96cf869976e -
Linux Linux 5.5 -

II. Public POCs for CVE-2025-37786

# 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-37786

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

Patches & Fixes for CVE-2025-37786 (4)

Same Patch Batch · Linux · 2025-05-01 · 245 CVEs total

CVE-2025-37750 9.8 CRITICAL smb: client: fix UAF in decryption with multichannel
CVE-2025-37778 9.8 CRITICAL ksmbd: Fix dangling pointer in krb_authenticate
CVE-2022-49770 9.8 CRITICAL ceph: avoid putting the realm twice when decoding snaps fails
CVE-2022-49931 8.8 HIGH IB/hfi1: Correctly move list in sc_disable()
CVE-2025-37776 8.8 HIGH ksmbd: fix use-after-free in smb_break_all_levII_oplock()
CVE-2025-37777 8.8 HIGH ksmbd: fix use-after-free in __smb2_lease_break_noti()
CVE-2025-37790 8.8 HIGH net: mctp: Set SOCK_RCU_FREE
CVE-2022-49910 8.8 HIGH Bluetooth: L2CAP: Fix use-after-free caused by l2cap_reassemble_sdu
CVE-2022-49886 8.4 HIGH x86/tdx: Panic on bad configs that #VE on "private" memory access
CVE-2025-23159 8.4 HIGH media: venus: hfi: add a check to handle OOB in sfr region
CVE-2025-37749 8.2 HIGH net: ppp: Add bound checking for skb data on ppp_sync_txmung
CVE-2025-37765 7.8 HIGH drm/nouveau: prime: fix ttm_bo_delayed_delete oops
CVE-2025-37779 7.8 HIGH lib/iov_iter: fix to increase non slab folio refcount
CVE-2022-49920 7.8 HIGH netfilter: nf_tables: netlink notifier might race to release objects
CVE-2022-49919 7.8 HIGH netfilter: nf_tables: release flow rule object from commit path
CVE-2022-49921 7.8 HIGH net: sched: Fix use after free in red_enqueue()
CVE-2025-37752 7.8 HIGH net_sched: sch_sfq: move the limit validation
CVE-2025-37756 7.8 HIGH net: tls: explicitly disallow disconnect
CVE-2025-37761 7.8 HIGH drm/xe: Fix an out-of-bounds shift when invalidating TLB
CVE-2022-49804 7.8 HIGH s390: avoid using global register for current_stack_pointer

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

IV. Related Vulnerabilities

V. Comments for CVE-2025-37786

No comments yet


Leave a comment