Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

DEBIAN-CVE-2026-23294

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 m...
Back to all
CVE

DEBIAN-CVE-2026-23294

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 m...

In the Linux kernel, the following vulnerability has been resolved:  bpf: Fix race in devmap on PREEMPTRT  On PREEMPTRT kernels, the per-CPU xdpdevbulkqueue (bq) can be accessed concurrently by multiple preemptible tasks on the same CPU.  The original code assumes bqenqueue() and devflush() run atomically with respect to each other on the same CPU, relying on localbhdisable() to prevent preemption. However, on PREEMPTRT, localbhdisable() only calls migratedisable() (when PREEMPTRTNEEDSBHLOCK is not set) and does not disable preemption, which allows CFS scheduling to preempt a task during bqxmitall(), enabling another task on the same CPU to enter bqenqueue() and operate on the same per-CPU bq concurrently.  This leads to several races:  1. Double-free / use-after-free on bq->q[]: bqxmitall() snapshots    cnt = bq->count, then iterates bq->q[0..cnt-1] to transmit frames.    If preempted after the snapshot, a second task can call bqenqueue()    -> bqxmitall() 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 bqenqueue() modifying    bq->count and bq->q[] while bqxmitall() is reading them.  3. devrx/xdpprog teardown race: devflush() clears bq->devrx and    bq->xdpprog after bqxmitall(). If preempted between    bqxmitall() return and bq->devrx = NULL, a preempting    bqenqueue() sees devrx still set (non-NULL), skips adding bq to    the flushlist, and enqueues a frame. When devflush() resumes,    it clears devrx and removes bq from the flushlist, orphaning the    newly enqueued frame.  4. listdelclearprev() on flushnode: similar to the cpumap race,    both tasks can call listdelclearprev() on the same flushnode,    the second dereferences the prev pointer already set to NULL.  The race between task A (devflush -> bqxmitall) and task B (bqenqueue -> bqxmitall) on the same CPU:    Task A (xdpdoflush)          Task B (ndoxdpxmit redirect)   ----------------------         --------------------------------   devflush(flushlist)     bqxmitall(bq)       cnt = bq->count  / e.g. 16 /       / start iterating bq->q[] /     <-- CFS preempts Task A -->                                    bqenqueue(dev, xdpf)                                      bq->count == DEVMAPBULKSIZE                                      bqxmitall(bq, 0)                                        cnt = bq->count  / same 16! /                                        ndoxdpxmit(bq->q[])                                        / frames freed by driver /                                        bq->count = 0     <-- Task A resumes -->       ndoxdpxmit(bq->q[])       / use-after-free: frames already freed! /  Fix this by adding a locallockt to xdpdevbulkqueue and acquiring it in bqenqueue() and devflush(). These paths already run under localbhdisable(), so use locallocknestedbh() 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.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
-
C
H
U
0
-
3.1
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://security-tracker.debian.org/tracker/CVE-2026-23294

Severity

7

CVSS Score
0
10

Basic Information

Ecosystem
Base CVSS
7
EPSS Probability
0%
EPSS Percentile
0%
Introduced Version
0
Fix Available
6.19.8-1

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading