A 20-year-old graphics-bus driver forgot to check a return code on its way out the door
CVE-2026-53325 is a missing error-propagation fix in drivers/char/agp/amd64-agp.c, specifically in agp_amd64_probe(). When the probe path encountered a failure condition, it returned success instead of the underlying error, leaving downstream code to dereference a NULL pointer during AGP bridge initialization. Affected versions are mainline Linux kernels prior to the commit landing in 6.x stable; the bug touches only the AMD64 AGP (Accelerated Graphics Port) bridge driver, which exists almost exclusively on pre-2010 Athlon64/Opteron motherboards.
There is no vendor CVSS score and there shouldn't be a high one. The bug is reachable only at boot or module-load time on hardware that ships an AMD64 AGP north-bridge. There is no remote vector, no privilege boundary, and no path that an unprivileged user can take to trigger this — agp_amd64_probe() runs as part of kernel device enumeration. Calling this anything above LOW would be inflation.
3 steps from start to impact.
Attacker must be root or have physical hardware control
amd64-agp driver via sysfs — both require root. There is no userspace ioctl, no network input, no parser reachable from a sandbox.- root on the host
- AMD64 AGP north-bridge physically present
amd64-agpmodule loadable
- AGP hardware is essentially extinct in enterprise fleets; PCIe replaced it ~2006
- Root already owns the kernel — exploiting a root-only kernel bug is not a privilege boundary crossing
- Most distros don't autoload
amd64-agpon non-AGP hardware
Trigger the failing probe branch
agp_amd64_probe() that the patch addresses — typically a resource-allocation or bridge-detection failure. On real hardware this is a hardware-state condition, not an attacker-controlled input.- Ability to manipulate PCI bridge state or memory pressure during probe
- No userspace primitive to coerce the failure
- On VMs there is no AGP bridge at all — the driver never binds
agp_amd64_probe — already noisy, already alerted by any host-monitoring stack.NULL pointer dereference → local DoS
- The oops actually fires rather than being absorbed by surrounding error handling
- DoS-from-root is not a security event in any reasonable threat model
The supporting signals.
| In-the-wild exploitation | None observed. No campaigns, no exploit chatter. |
|---|---|
| Public PoC | None. The patch is a one-line-class error-propagation fix; weaponization is implausible. |
| EPSS | Not yet scored at disclosure; expected <0.1% given local-only, root-required, legacy-hardware profile. |
| KEV status | Not listed and will not be. |
| CVSS vector | No NVD vector published. Plausible self-assessment: AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L → ~2.0–2.5. |
| Affected versions | Linux mainline prior to the fix commit; check your distro's stable backport tracker. |
| Fixed versions | Mainline fix in upstream 6.x; RHEL/SUSE/Ubuntu/Debian will fold this into routine stable kernel updates — no out-of-band release expected. |
| Exposure (Shodan/Censys) | Not internet-discoverable — local-only kernel bug. |
| Disclosure | 2026-06-29 via the standard linux-cve-announce pipeline. |
| Reporter | Kernel community (syzkaller / static-analysis-class finding; no named external researcher). |
| Affected hardware | AMD64 AGP bridges only — Socket 754/939/940 era boards. Nonexistent in modern fleets. |
noisgate verdict.
This is a local-only, root-required NULL deref in a driver for hardware that hasn't shipped in datacenter gear in nearly two decades; the single decisive factor is the attacker must already be root on a host with AMD64 AGP silicon, which collapses the exploitable population to near zero. There is no security boundary being crossed — root crashing its own kernel is not a vulnerability worth a maintenance window.
Why this verdict
- No security boundary crossed: the bug is reachable only from
agp_amd64_probe(), which runs in kernel context during device enumeration — there is no unprivileged or remote primitive. - Affected hardware is functionally extinct in enterprise fleets: AMD64 AGP bridges are pre-PCIe-era; virtualized infrastructure does not expose this driver at all.
- Role multiplier: even on a hypothetical high-value role (DC, hypervisor, PAM appliance) the affected driver does not load — these run on modern PCIe-only hardware or VMs. There is no plausible high-value-role outcome, so the role-multiplier floor does not engage.
- Impact ceiling is a kernel oops triggered by root — a denial-of-self with no confidentiality or integrity impact, no memory disclosure described in the patch.
Why not higher?
MEDIUM would require either an unprivileged trigger path or meaningful integrity/confidentiality impact; neither exists. HIGH/CRITICAL would require remote reachability or a privilege-escalation primitive, and the patch description shows neither — it is an error-return cleanup, not a use-after-free or out-of-bounds write.
Why not lower?
IGNORE is tempting given the hardware is extinct, but distros will still ship the fix to long-term-support kernels and some embedded/industrial systems do still run AGP-era silicon. Calling it LOW keeps it on the routine kernel-update conveyor belt rather than letting auditors flag it as undocumented-risk-accepted.
What to do — in priority order.
- Let it ride the next routine kernel update — Pick this up in your normal monthly/quarterly kernel rollup — no mitigation SLA applies at LOW. Treat as standard backlog hygiene under the noisgate 365-day remediation window.
- Blacklist
amd64-agpon modern fleets — Addblacklist amd64-agpto/etc/modprobe.d/noisgate-legacy.confon any host that has no business loading legacy AGP drivers (every cloud VM, every post-2010 server). Eliminates the attack surface entirely until the patched kernel ships. - Inventory for AMD64 AGP hardware — Run
lspci | grep -i agpacross the fleet. If the count is zero — which it will be for ~99.9% of enterprise estates — you can document this CVE as not-applicable and move on.
- Network segmentation / WAF / firewall rules — irrelevant, this bug has no network surface.
- EDR / kernel hardening (SELinux, AppArmor, lockdown) — won't block driver probe paths invoked by the kernel itself.
- Disabling unprivileged user namespaces — unrelated, the trigger requires root or hardware presence anyway.
Crowdsourced verification payload.
Run on each Linux host as a non-root user (root not required for the checks). Invoke as bash check-cve-2026-53325.sh. The script reports VULNERABLE, PATCHED, or UNKNOWN and also surfaces whether the AGP hardware actually exists on the box — because if it doesn't, the bug is unreachable in practice.
#!/usr/bin/env bash
# noisgate verification: CVE-2026-53325 (agp/amd64 probe error-propagation)
# Exit codes: 0 = PATCHED or NOT_APPLICABLE, 1 = VULNERABLE, 2 = UNKNOWN
set -u
KVER="$(uname -r)"
echo "[*] Kernel: ${KVER}"
# 1. Is the AGP AMD64 hardware even present?
if command -v lspci >/dev/null 2>&1; then
AGP_HW="$(lspci 2>/dev/null | grep -iE 'agp|amd64.*bridge' || true)"
else
AGP_HW=""
fi
if [ -z "${AGP_HW}" ]; then
echo "[+] No AMD64 AGP bridge detected — bug is unreachable on this host."
echo "RESULT: NOT_APPLICABLE"
exit 0
fi
echo "[!] AGP-class hardware detected:"
echo "${AGP_HW}"
# 2. Distro-specific patched-version lookup.
# Replace the FIXED_* values once your distro publishes the backport metadata.
FIXED_RHEL="5.14.0-9999.el9" # placeholder — update from RHSA
FIXED_UBUNTU="6.8.0-9999" # placeholder — update from USN
FIXED_DEBIAN="6.1.0-9999" # placeholder — update from DSA
FIXED_MAINLINE="6.10" # placeholder — update from kernel.org
ID="$(. /etc/os-release 2>/dev/null && echo "${ID:-unknown}")"
compare_ge() {
# returns 0 if $1 >= $2 using dpkg --compare-versions / rpmdev-vercmp fallback
if command -v dpkg >/dev/null 2>&1; then
dpkg --compare-versions "$1" ge "$2" && return 0 || return 1
fi
[ "$(printf '%s\n%s\n' "$2" "$1" | sort -V | head -1)" = "$2" ] && return 0 || return 1
}
case "${ID}" in
rhel|centos|rocky|almalinux)
TARGET="${FIXED_RHEL}" ;;
ubuntu)
TARGET="${FIXED_UBUNTU}" ;;
debian)
TARGET="${FIXED_DEBIAN}" ;;
*)
TARGET="${FIXED_MAINLINE}" ;;
esac
if compare_ge "${KVER}" "${TARGET}"; then
echo "[+] Kernel ${KVER} >= fixed ${TARGET} for ${ID}"
echo "RESULT: PATCHED"
exit 0
fi
echo "[-] Kernel ${KVER} < fixed ${TARGET} for ${ID}"
echo "RESULT: VULNERABLE"
exit 1
If you remember one thing.
lspci | grep -i agp across the fleet — for the ~99.9% of hosts that return nothing, document as not-applicable; for the rare hosts that do, drop a blacklist amd64-agp modprobe file and forget about it until the kernel update lands.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.