This is a kernel guestbook with no page limit, but only in a side room most enterprises never open
CVE-2026-43491 is an unbounded resource-allocation bug in Linux QRTR name service handling (net/qrtr/ns.c). A malicious client can keep sending NEW_SERVER registrations with new ports, and the kernel keeps allocating tracking objects until memory pressure or OOM becomes the real payload. Upstream metadata ties the bug to code introduced by commit 0c2204a4ad71 and semver exposure starting at Linux 5.7; upstream-fixed lines are listed as 6.6.140, 6.12.86, 6.18.27, 7.0.4, and 7.1-rc1.
There is no vendor CVSS baseline, so this is a first-principles assessment. In practice, this lands at = ASSESSED AT MEDIUM because it is local/post-initial-access, availability-only, and feature-gated by QRTR support, which is a much smaller population than generic Linux kernel networking flaws. The kernel impact is real on affected hosts, but the reachable population is too narrow for a HIGH.
4 steps from start to impact.
Land on a host that actually has QRTR enabled
CONFIG_QRTR=y|m or a loaded qrtr module. This is not a generic fleet-wide assumption; QRTR is mainly relevant on Qualcomm-oriented platforms and some custom kernels.- Target runs a vulnerable Linux kernel version
- QRTR support is built in or loadable
- Attacker has code execution on the host or in a container that can reach the host kernel socket API
- Most enterprise Linux servers do not rely on QRTR at all
- Many distributions backport fixes without changing the upstream-looking major/minor version
- Container runtimes or seccomp profiles may block unusual socket families
CONFIG_QRTR/qrtr presence.Open the QIPCRTR socket path
AF_QIPCRTR and send control messages to the kernel name service. The relevant weaponized primitive is just repeated NEW_SERVER registration traffic, not a complex exploit chain.- Ability to call
socket(AF_QIPCRTR, ...)and send QRTR control messages - No LSM/seccomp policy denying this socket family
- This is not reachable from the internet as a normal exposed service
- Attackers need platform knowledge or a small purpose-built harness
Flood NEW_SERVER with unique ports
qrtr_server object per fresh port. Before the fix, there is no per-node upper bound, so memory use rises linearly with the flood.- The target node continues accepting unique server registrations
- Attacker can sustain a message loop long enough to create pressure
- CPU or memory cgroup limits can throttle a noisy local process before full host impact
- On lightly privileged containers, surrounding controls may kill the abusive workload before the node crashes
Turn memory pressure into service impact
- Sufficient host memory consumption to affect workload stability
- No earlier containment from resource controls or process supervision
- Blast radius is usually one host, not a domain-wide compromise
- Modern fleet operations often notice OOM events quickly even if they do not recognize the exact CVE
qrtr_ns_worker() errors, and abnormal memory growth from a local process just before impact.The supporting signals.
| In-the-wild status | No current exploitation evidence surfaced in the reviewed sources. CISA KEV has no listing for this CVE, and no GreyNoise/Censys campaign data was found tied to it. |
|---|---|
| PoC availability | No public PoC repo was found in the reviewed primary references. The exploit path is still technically simple because the patch diff spells out the primitive: flood NEW_SERVER registrations with unique ports (*inference from upstream patch/advisory text*). |
| EPSS | 0.024% (7th percentile) in the GitHub Advisory Database, matching the user's 0.00024 decimal form. |
| KEV status | Not KEV-listed. No CISA due date applies. |
| Severity signal from downstream vendors | Ubuntu priority: Medium. SUSE severity: moderate, CVSS 6.2 with CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. |
| Affected versions | Upstream metadata marks the vulnerable code as introduced by commit 0c2204a4ad71 and semver exposure beginning at Linux 5.7, limited to kernels carrying the QRTR nameservice code. |
| Fixed versions | Upstream unaffected versions are listed as 6.6.140, 6.12.86, 6.18.27, 7.0.4, and 7.1-rc1. Distros may backport earlier, so package build provenance beats uname -r alone. |
| Exposure reality | This is not an internet-edge bug. QRTR is a local IPC subsystem; Shodan/Censys/FOFA-style exposure counting is largely irrelevant because there is no normal remote listening service to fingerprint. |
| Platform prevalence | CONFIG_QRTR is Qualcomm IPC Router support, depends on CONFIG_NET, is selected by CONFIG_QCOM_PD_MAPPER, and is depended on by drivers like ATH11K_PCI and ATH12K. That points to a specialized, not universal, enterprise footprint. |
| Disclosure / reporter | Published 2026-05-19. Reported by Yiming Qian; fix authored upstream by Manivannan Sadhasivam and backported into stable review trees. |
noisgate verdict.
The decisive downgrade pressure is attacker position: this requires local or already-compromised execution on a host that also has the niche QRTR subsystem enabled. The bug can absolutely crash an affected machine, but its real-world exposure population is narrow and the outcome is availability-only, which keeps it out of HIGH.
Why this verdict
- Requires local or already-compromised code execution: the attacker must run code on the box, or in a container with usable access to the host kernel socket API. That is post-initial-access, which is immediate downward pressure on severity.
- Feature-gated population: QRTR is a specialized Qualcomm IPC subsystem, not a default enterprise edge service. Requiring
CONFIG_QRTRor a loadedqrtrmodule sharply narrows the reachable population compared with generic kernel bugs. - Availability-only outcome: the patch addresses memory exhaustion and log noise, not privilege escalation or arbitrary code execution. Crashing a host matters, but it does not justify HIGH on its own when the attacker is already local.
- No exploitation signal: EPSS is very low, the CVE is not in KEV, and the reviewed sources do not show a public exploitation campaign. That removes the main amplifier that would otherwise push an awkward local-kernel bug upward.
Why not higher?
There is no credible remote unauthenticated path here based on the reviewed sources. To get impact, the attacker already needs a foothold on a QRTR-enabled system, and the blast radius is usually one host's availability rather than cross-tenant compromise or data exposure.
Why not lower?
This is still kernel-space DoS from an unprivileged position on affected systems, which matters in shared compute, developer workstations, CI runners, and embedded Linux fleets. If QRTR is enabled and untrusted code can run locally, the bug is practical enough that writing it off as LOW would understate operational risk.
What to do — in priority order.
- Unload or blacklist
qrtrwhere unused — If a host does not need Qualcomm IPC Router, remove the attack surface entirely by unloading the module and blacklisting it from reload. For a MEDIUM verdict there is no mitigation SLA, but this is the cleanest exposure reduction while you work toward patching within the 365-day remediation window. - Block untrusted workloads from QIPCRTR sockets — Use seccomp, SELinux/AppArmor, or container runtime policy to deny
AF_QIPCRTRfrom untrusted containers and local workloads. There is no mitigation SLA — go straight to the 365-day remediation window, but this is the best temporary control on shared hosts where QRTR must remain enabled. - Watch for QRTR abuse indicators — Add host detections for unusual QIPCRTR socket creation, rapid
NEW_SERVER-like registration behavior, OOM-killer events, andqrtr_ns_worker()errors. For a MEDIUM issue this is containment and hunting support rather than an SLA-driven emergency mitigation.
- Perimeter firewalls or WAFs do nothing useful here because this is not a standard remotely exposed service vulnerability.
- MFA does nothing because the exploit path is not an authentication workflow.
- Version-only network scanning gives false confidence because the key questions are local attacker position, QRTR enablement, and distro backports.
Crowdsourced verification payload.
Run this on the target Linux host as root or with read access to /proc/config.gz, /boot/config-*, and /lib/modules. Invoke it as sudo bash ./check-cve-2026-43491.sh; it outputs VULNERABLE, PATCHED, or UNKNOWN based on QRTR presence plus the upstream fixed-version floors.
#!/usr/bin/env bash
# check-cve-2026-43491.sh
# Determine practical exposure to CVE-2026-43491 on a Linux host.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
KREL="$(uname -r)"
BASE="$(printf '%s' "$KREL" | grep -Eo '^[0-9]+\.[0-9]+\.[0-9]+' || true)"
ver_ge() {
[ "$(printf '%s\n%s\n' "$2" "$1" | sort -V | head -n1)" = "$2" ]
}
ver_lt() {
[ "$1" != "$2" ] && ! ver_ge "$1" "$2"
}
get_config_line() {
local key="$1"
if [ -r /proc/config.gz ]; then
zgrep -E "^${key}=" /proc/config.gz 2>/dev/null && return 0
fi
if [ -r "/boot/config-$KREL" ]; then
grep -E "^${key}=" "/boot/config-$KREL" 2>/dev/null && return 0
fi
if [ -r "/lib/modules/$KREL/build/.config" ]; then
grep -E "^${key}=" "/lib/modules/$KREL/build/.config" 2>/dev/null && return 0
fi
return 1
}
QRTR_CFG="$(get_config_line CONFIG_QRTR || true)"
QRTR_PRESENT=no
QRTR_REASON=""
if printf '%s' "$QRTR_CFG" | grep -qE '^CONFIG_QRTR=(y|m)$'; then
QRTR_PRESENT=yes
QRTR_REASON="CONFIG_QRTR enabled"
elif lsmod 2>/dev/null | awk '{print $1}' | grep -qx 'qrtr'; then
QRTR_PRESENT=yes
QRTR_REASON="qrtr module loaded"
elif modinfo qrtr >/dev/null 2>&1; then
QRTR_PRESENT=yes
QRTR_REASON="qrtr module available"
fi
if [ "$QRTR_PRESENT" = no ]; then
echo "PATCHED - QRTR support not detected (CONFIG_QRTR absent and qrtr module not present/loaded)"
exit 0
fi
if [ -z "$BASE" ]; then
echo "UNKNOWN - unable to parse kernel version from uname -r: $KREL; $QRTR_REASON"
exit 2
fi
# Upstream unaffected floors from published CVE metadata:
# 6.6.140, 6.12.86, 6.18.27, 7.0.4, 7.1-rc1
# Distros may backport earlier, so unsupported/custom branches remain UNKNOWN.
if ver_lt "$BASE" "5.7.0"; then
echo "PATCHED - kernel base version $BASE predates the vulnerable semver range; $QRTR_REASON"
exit 0
fi
case "$BASE" in
6.6.*)
if ver_ge "$BASE" "6.6.140"; then
echo "PATCHED - upstream fixed floor met on 6.6.y ($BASE >= 6.6.140); $QRTR_REASON"
exit 0
else
echo "VULNERABLE - upstream 6.6.y kernel below fixed floor ($BASE < 6.6.140); $QRTR_REASON"
exit 1
fi
;;
6.12.*)
if ver_ge "$BASE" "6.12.86"; then
echo "PATCHED - upstream fixed floor met on 6.12.y ($BASE >= 6.12.86); $QRTR_REASON"
exit 0
else
echo "VULNERABLE - upstream 6.12.y kernel below fixed floor ($BASE < 6.12.86); $QRTR_REASON"
exit 1
fi
;;
6.18.*)
if ver_ge "$BASE" "6.18.27"; then
echo "PATCHED - upstream fixed floor met on 6.18.y ($BASE >= 6.18.27); $QRTR_REASON"
exit 0
else
echo "VULNERABLE - upstream 6.18.y kernel below fixed floor ($BASE < 6.18.27); $QRTR_REASON"
exit 1
fi
;;
7.0.*)
if ver_ge "$BASE" "7.0.4"; then
echo "PATCHED - upstream fixed floor met on 7.0.y ($BASE >= 7.0.4); $QRTR_REASON"
exit 0
else
echo "VULNERABLE - upstream 7.0.y kernel below fixed floor ($BASE < 7.0.4); $QRTR_REASON"
exit 1
fi
;;
7.1.*|7.2.*|7.3.*|8.*)
echo "PATCHED - mainline/newer than the original fix point (>= 7.1 line); $QRTR_REASON"
exit 0
;;
*)
echo "UNKNOWN - QRTR is present, but $BASE is a branch where backports/custom vendor patching must be checked against distro advisories; $QRTR_REASON"
exit 2
;;
esac
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.