CVE-2026-23294
HighSummary
W jądrze Linuxa zidentyfikowano podatność związana z wyścigiem w devmap na rdzeniach PREEMPT_RT. Problem polega na tym, że wiele zadań preempcji może jednocześnie uzyskiwać dostęp do per-CPU xdp_dev_bulk_queue, co prowadzi do błędów takich jak podwójne zwolnienie pamięci i usunięcie po zwolnieniu.
Risk Assessment
Podatność ta może prowadzić do poważnych problemów z integralnością pamięci, co z kolei może skutkować awarią systemu lub nieprzewidywalnym zachowaniem aplikacji. Organizacje powinny być świadome ryzyka związanego z używaniem podatnych wersji jądra.
Recommendation
Zaleca się aktualizację jądra Linux do wersji, w której wprowadzono poprawkę, aby zlikwidować ryzyko związane z równoczesnym dostępem do xdp_dev_bulk_queue. Należy również rozważyć zastosowanie lokalnych blokad w kodzie, aby zminimalizować ryzyko wyścigów.
Related vulnerabilities
- CVE-2026-60043Critical
An unauthenticated remote attacker can perform an XSS attack on a logged-in backend user, allowing execution of multiple critical system actions such as shutting down the server or restoring an uploaded backup.
- CVE-2026-13312Critical
The described vulnerability could allow an attacker to compromise a system. Technical details are not provided in the description.
- CVE-2026-115646Critical
A partial string comparison vulnerability in HiRDB. The issue affects HiRDB Server Version 10 (from 10-00 before 10-12-01) and Version 9 (from 09-50-06 through 09-66-22), including versions with additional functions.
- CVE-2026-89126Critical
SAP Web Dispatcher does not sufficiently validate certain network input processed by an internal component. An unauthenticated attacker could send specially crafted network traffic to trigger memory corruption, potentially leading to arbitrary code execution and full system compromise.
- CVE-2026-89119Critical
SAP Web Dispatcher and SAP NetWeaver Application Server ABAP (Internet Communication Manager) do not perform sufficient request validation in certain administrative functionality. An unauthenticated attacker could trick a logged-on administrator into visiting a malicious link, causing unintended actions in the administrator's session and potentially leading to full compromise of the underlying operating system.
- CVE-2026-89103Critical
SAP Gateway activates the default Access Control List with high privileges, allowing categorization of an external attacker as an internal application server. An unauthenticated attacker with network access to SAP Gateway could exploit this weakness to perform unauthorized actions within the application environment.
- CVE-2026-76965Critical
SAP NetWeaver Application Server ABAP and ABAP Platform do not perform necessary authorization checks for certain internal functionality. An attacker with low privileges could invoke the affected functionality to execute arbitrary operating system commands on the underlying host.
- CVE-2026-76964Critical
SAP NetWeaver Application Server ABAP does not sufficiently validate certain network input processed by an internal component. An unauthenticated attacker could send specially crafted network traffic to trigger memory corruption, potentially leading to arbitrary code execution and full system compromise.
- CVE-2026-125086Critical
D-Link M60 1.12.B01 contains hard-coded credentials in the /etc/emDaemon/mosquitto.conf file of the emDaemon MQTT Broker component. The vulnerability can be exploited remotely, and a public exploit may already be in use.
- CVE-2026-124600Critical
GV-Face transmits sensitive user credentials and related authentication data over unencrypted HTTP connections. The HTTP traffic is not encrypted, allowing an attacker to intercept it.
Original NVD description (English source)
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.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

