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

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2026-23294— bpf: Fix race in devmap on PREEMPT_RT

CVSS 7.0 · High EPSS 0.01% · P3
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2026-23294

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
bpf: Fix race in devmap on PREEMPT_RT
Source: NVD (National Vulnerability Database)
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: bpf: Fix race in devmap on PREEMPT_RT On PREEMPT_RT kernels, the per-CPU xdp_dev_bulk_queue (bq) can be accessed concurrently by multiple preemptible tasks on the same CPU. The original code assumes bq_enqueue() and __dev_flush() run atomically with respect to each other on the same CPU, relying on local_bh_disable() to prevent preemption. However, on PREEMPT_RT, local_bh_disable() only calls migrate_disable() (when PREEMPT_RT_NEEDS_BH_LOCK is not set) and does not disable preemption, which allows CFS scheduling to preempt a task during bq_xmit_all(), enabling another task on the same CPU to enter bq_enqueue() and operate on the same per-CPU bq concurrently. This leads to several races: 1. Double-free / use-after-free on bq->q[]: bq_xmit_all() snapshots cnt = bq->count, then iterates bq->q[0..cnt-1] to transmit frames. If preempted after the snapshot, a second task can call bq_enqueue() -> bq_xmit_all() on the same bq, transmitting (and freeing) the same frames. When the first task resumes, it operates on stale pointers in bq->q[], causing use-after-free. 2. bq->count and bq->q[] corruption: concurrent bq_enqueue() modifying bq->count and bq->q[] while bq_xmit_all() is reading them. 3. dev_rx/xdp_prog teardown race: __dev_flush() clears bq->dev_rx and bq->xdp_prog after bq_xmit_all(). If preempted between bq_xmit_all() return and bq->dev_rx = NULL, a preempting bq_enqueue() sees dev_rx still set (non-NULL), skips adding bq to the flush_list, and enqueues a frame. When __dev_flush() resumes, it clears dev_rx and removes bq from the flush_list, orphaning the newly enqueued frame. 4. __list_del_clearprev() on flush_node: similar to the cpumap race, both tasks can call __list_del_clearprev() on the same flush_node, the second dereferences the prev pointer already set to NULL. The race between task A (__dev_flush -> bq_xmit_all) and task B (bq_enqueue -> bq_xmit_all) on the same CPU: Task A (xdp_do_flush) Task B (ndo_xdp_xmit redirect) ---------------------- -------------------------------- __dev_flush(flush_list) bq_xmit_all(bq) cnt = bq->count /* e.g. 16 */ /* start iterating bq->q[] */ <-- CFS preempts Task A --> bq_enqueue(dev, xdpf) bq->count == DEV_MAP_BULK_SIZE bq_xmit_all(bq, 0) cnt = bq->count /* same 16! */ ndo_xdp_xmit(bq->q[]) /* frames freed by driver */ bq->count = 0 <-- Task A resumes --> ndo_xdp_xmit(bq->q[]) /* use-after-free: frames already freed! */ Fix this by adding a local_lock_t to xdp_dev_bulk_queue and acquiring it in bq_enqueue() and __dev_flush(). These paths already run under local_bh_disable(), so use local_lock_nested_bh() which on non-RT is a pure annotation with no overhead, and on PREEMPT_RT provides a per-CPU sleeping lock that serializes access to the bq.
Source: NVD (National Vulnerability Database)
CVSS Information
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
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存在安全漏洞,该漏洞源于竞争条件,可能导致双重释放或释放后重用。
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 3253cb49cbad4772389d6ef55be75db1f97da910 ~ 6c10b019785dc282c5f45d21e4a3f468b8fd6476 -
LinuxLinux 6.18 -

II. Public POCs for CVE-2026-23294

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-23294

登录查看更多情报信息。

Same Patch Batch · Linux · 2026-03-25 · 116 CVEs total

CVE-2026-233958.8 HIGHBluetooth: L2CAP: Fix accepting multiple L2CAP_ECRED_CONN_REQ
CVE-2026-317888.2 HIGHxen/privcmd: restrict usage in unprivileged domU
CVE-2026-233407.8 HIGHnet: sched: avoid qdisc_reset_all_tx_gt() vs dequeue race for lockless qdiscs
CVE-2026-233367.8 HIGHwifi: cfg80211: cancel rfkill_block work in wiphy_unregister()
CVE-2026-233507.8 HIGHdrm/xe/queue: Call fini on exec queue creation fail
CVE-2026-233517.8 HIGHnetfilter: nft_set_pipapo: split gc into unlink and reclaim phase
CVE-2026-233177.8 HIGHdrm/vmwgfx: Return the correct value in vmw_translate_ptr functions
CVE-2026-233067.8 HIGHscsi: pm8001: Fix use-after-free in pm8001_queue_command()
CVE-2026-233727.8 HIGHnfc: rawsock: cancel tx_work before socket teardown
CVE-2026-233787.8 HIGHnet/sched: act_ife: Fix metalist update behavior
CVE-2026-233837.8 HIGHbpf, arm64: Force 8-byte alignment for JIT buffer to prevent atomic tearing
CVE-2026-233927.8 HIGHnetfilter: nf_tables: release flowtable after rcu grace period on error
CVE-2026-233917.8 HIGHnetfilter: xt_CT: drop pending enqueued packets on template removal
CVE-2026-233937.8 HIGHbridge: cfm: Fix race condition in peer_mep deletion
CVE-2026-232807.8 HIGHaccel/amdxdna: Prevent ubuf size overflow
CVE-2026-232887.8 HIGHaccel/amdxdna: Fix out-of-bounds memset in command slot handling
CVE-2026-233647.4 HIGHksmbd: Compare MACs in constant time
CVE-2026-23357can: mcp251x: fix deadlock in error path of mcp251x_open
CVE-2026-23358drm/amdgpu: Fix error handling in slot reset
CVE-2026-23355ata: libata: cancel pending work after clearing deferred_qc

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

IV. Related Vulnerabilities

V. Comments for CVE-2026-23294

No comments yet


Leave a comment