HIGH 7.8

CVE-2026-52947: Linux Kernel QRTR Race Condition and Use-After-Free Vulnerability

A critical race condition exists in the Linux kernel's QRTR (Qualcomm Technologies IPC Router) networking module. When a port is being removed, the code decrements a socket's reference counter prematurely—before the port data structure is fully cleaned up and before other parts of the kernel finish their work. This creates a narrow but exploitable window where another part of the kernel can try to use the socket while its reference count has already dropped to zero, leading to memory corruption and potential arbitrary code execution. The vulnerability was discovered during automated fuzzing and has been confirmed to cause refcount saturation warnings and use-after-free conditions.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.8 HIGH · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weaknesses (CWE)
CWE-416
Affected products
8 configuration(s)
Published / Modified
2026-06-24 / 2026-07-14

NVD description (verbatim)

In the Linux kernel, the following vulnerability has been resolved: net: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove In qrtr_port_remove(), the socket reference count is decremented via __sock_put() before the port is removed from the qrtr_ports XArray and before the RCU grace period elapses. This breaks the fundamental RCU update paradigm. It exposes a race window where a concurrent RCU reader (such as qrtr_reset_ports() or qrtr_port_lookup()) can obtain a pointer to the socket from the XArray, and attempt to call sock_hold() on a socket whose reference count has already dropped to zero. This exact race condition was hit during syzkaller fuzzing, leading to the following refcount saturation warning and a potential Use-After-Free: refcount_t: saturated; leaking memory. WARNING: CPU: 3 PID: 1273 at lib/refcount.c:22 refcount_warn_saturate+0xae/0x1d0 Modules linked in: qrtr(+) bochs drm_shmem_helper ... Call Trace: <TASK> qrtr_reset_ports net/qrtr/af_qrtr.c:768 [inline] [qrtr] __qrtr_bind.isra.0+0x48b/0x570 net/qrtr/af_qrtr.c:805 [qrtr] qrtr_bind+0x17d/0x210 net/qrtr/af_qrtr.c:901 [qrtr] kernel_bind+0xe4/0x120 net/socket.c:3592 qrtr_ns_init+0x1a6/0x380 net/qrtr/ns.c:715 [qrtr] qrtr_proto_init+0x3b/0xff0 net/qrtr/af_qrtr.c:169 [qrtr] do_one_initcall+0xf5/0x5e0 init/main.c:1283 ... </TASK> Fix this by deferring the reference count decrement until after the xa_erase() and the synchronize_rcu() complete. (Note: The v1 of this patch incorrectly replaced __sock_put() with sock_put(). As Simon Horman pointed out, the callers of qrtr_port_remove() still hold a reference to the socket, so freeing the socket memory here would lead to a subsequent UAF in the caller. Thus, the __sock_put() is kept, but only repositioned to close the RCU race.)

8 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability resides in qrtr_port_remove() in the QRTR subsystem. The function calls __sock_put() to decrement the socket reference count before invoking xa_erase() to remove the port from the qrtr_ports XArray and before synchronize_rcu() completes. This violates RCU (Read-Copy-Update) synchronization semantics. Concurrent RCU readers—such as qrtr_reset_ports() or qrtr_port_lookup()—can retrieve a pointer to the socket from the XArray and attempt sock_hold(), which triggers refcount_warn_saturate() when the reference count has already reached zero. The fix defers __sock_put() until after both xa_erase() and synchronize_rcu() complete, restoring proper RCU update ordering and preventing the race window.

Business impact

Exploitation could allow a local, unprivileged user to corrupt kernel memory, trigger denial of service, or potentially escalate privileges. QRTR is used in systems requiring inter-process communication over sockets—primarily mobile and edge devices, automotive platforms, and IoT systems running Linux. Attack success depends on precise timing but has been reproducibly demonstrated via syzkaller, indicating practical exploitability. Systems with QRTR enabled and accessible to local users face heightened risk.

Affected systems

All Linux kernel versions with the QRTR module compiled in. The vulnerability affects the net/qrtr/af_qrtr.c subsystem. Affected users include those running kernels with CONFIG_QRTR=y or CONFIG_QRTR=m. Distributions shipping QRTR support in default or commonly-used kernel configurations are at risk.

Exploitability

Exploitability is rated HIGH (CVSS 7.8). The vulnerability requires local access and a low privilege level (unprivileged user), but no special interaction is needed. The race condition was reliably triggered during fuzzing, demonstrating that exploitation is feasible without requiring specialized timing techniques or kernel internals knowledge. The attack surface is broad: any local user capable of triggering QRTR port operations can attempt to race the vulnerable code path.

Remediation

Apply the kernel patch that defers __sock_put() until after xa_erase() and synchronize_rcu() complete. This repositioning closes the RCU race window while preserving the refcount semantics required by the socket's calling context. Verify against the upstream kernel commit or your distribution's security advisory for the exact patch version. No userspace workarounds are available; kernel update is required.

Patch guidance

Consult your Linux distribution's security advisory for the patched kernel version. Upstream, the fix has been merged into the kernel mainline. Test the patched kernel in a staging environment to confirm QRTR functionality and stability before deploying to production. If you have custom kernel builds, ensure CONFIG_QRTR is patched or disabled if not required.

Detection guidance

Monitor kernel logs for 'refcount_t: saturated; leaking memory' warnings in conjunction with QRTR stack traces (qrtr_reset_ports, qrtr_port_lookup, qrtr_port_remove). Use kernel address sanitizers (KASAN) or memory tagging if available to detect use-after-free conditions. System calls related to socket binding on QRTR interfaces (e.g., qrtr_bind) combined with concurrent port removal may indicate exploitation attempts. Audit systems with QRTR enabled to prioritize patching.

Why prioritize this

This vulnerability should be prioritized HIGH because it affects local privilege escalation and kernel stability, carries a CVSS 7.8 score, has been confirmed reproducible via fuzzing, and affects all systems with QRTR enabled. Although it requires local access, the low barrier to user-level exploitation and the potential for memory corruption make it a critical patching target.

Risk score, explained

CVSS 3.1 score of 7.8 (HIGH severity) reflects Attack Vector: Local, Attack Complexity: Low, Privileges Required: Low, User Interaction: None, and impacts on Confidentiality, Integrity, and Availability (all High). The score appropriately captures the kernel-level nature of the flaw and the ease of triggering the race condition without special privileges or user interaction.

Frequently asked questions

Which kernel versions are vulnerable?

The vulnerability affects all Linux kernel versions with the QRTR module (net/qrtr subsystem) compiled in. Verify the exact affected range and patched versions in your distribution's advisory, as different vendors backport fixes at different times.

Do I need QRTR enabled? Can I disable it?

QRTR is primarily used for IPC on mobile, embedded, and automotive Linux systems. If your system does not require inter-process communication via QRTR, you can safely disable it by setting CONFIG_QRTR=n during kernel configuration. Check your distribution's kernel configuration to see if it is enabled.

What happens if the race condition is triggered?

Triggering the race causes the kernel to attempt to increment a reference count on a socket that has already been freed. This saturates the refcount, leaks memory, and can escalate to a use-after-free condition, leading to kernel crashes, data corruption, or code execution.

Is this vulnerability in the CVSS Known Exploited Vulnerabilities (KEV) catalog?

No. As of the latest update, this vulnerability is not in the CISA KEV catalog, but the syzkaller-confirmed reproducibility suggests active exploitation is possible and patching should not be delayed.

This analysis is based on the published CVE record and vendor advisories as of the date provided. Specific patched kernel versions, affected distributions, and mitigation timelines should be verified directly with your vendor or the Linux kernel security team. No exploit code is provided. Organizations should conduct their own risk assessment based on their environment and deployment of QRTR-enabled systems. This document is for informational purposes and does not constitute legal or professional security advice. Source: NVD (public-domain), retrieved 2026-07-30. Analysis generated by SEC.co (claude-haiku-4-5).