Skip to main content
Vulnerability Database/CVE-2026-80870

CVE-2026-80870: Linux Kernel Privilege Escalation Vulnerability

CVE-2026-80870 is a privilege escalation flaw in the Linux kernel drm/amdkfd module that allows invalid userspace IDs to trigger kernel warnings. This post explains its impact, affected versions, and mitigation steps.

Published:

CVE-2026-80870 Overview

CVE-2026-80870 affects the Linux kernel's AMD Kernel Fusion Driver (amdkfd) component. The vulnerability exists in the Checkpoint/Restore in Userspace (CRIU) restore flow for KFD objects. The kernel fails to validate object IDs supplied from userspace before passing them to idr_alloc(). When a restored ID exceeds INT_MAX, the IDR layer triggers a WARN, which prints a warning trace and can cause a panic or reboot on systems configured with panic_on_warn.

Critical Impact

A local user supplying crafted CRIU restore data can trigger a kernel WARN in idr_alloc(), leading to denial of service on systems with panic_on_warn enabled.

Affected Products

  • Linux kernel with AMD KFD (drm/amdkfd) driver enabled
  • Systems using CRIU checkpoint/restore for GPU workloads
  • Distributions shipping vulnerable stable kernel branches referenced in the upstream fix commits

Discovery Timeline

  • 2026-09-04 - CVE-2026-80870 published to NVD
  • 2026-09-04 - Last updated in NVD database

Technical Details for CVE-2026-80870

Vulnerability Analysis

The KFD CRIU restore flow reconstructs kernel objects from state previously saved by userspace. Two restore paths pass userspace-controlled IDs directly to idr_alloc(). In kfd_criu_restore_event(), the code calls create_signal_event() or create_other_event(), which invoke allocate_event_notification_slot() with idr_alloc(..., *restore_id, *restore_id + 1, ...). In criu_restore_memory_of_gpu(), the code passes bo_priv->idr_handle from CRIU data straight into idr_alloc().

The idr_alloc() API requires that ID range values fit within signed integer limits. When a caller supplies a value greater than INT_MAX, the IDR layer emits a WARN. Static analysis with Smatch flagged these paths as reaching idr_alloc() with unchecked userspace values. This maps to improper input validation in a kernel driver [CWE-20].

Root Cause

The root cause is missing bounds validation on IDs deserialized from CRIU restore data. Neither restore path checks whether *restore_id or bo_priv->idr_handle exceeds INT_MAX before invoking idr_alloc(). The IDR layer's internal WARN becomes reachable from an unprivileged user-supplied value.

Attack Vector

A local user with permission to invoke KFD CRIU restore ioctls can craft a restore image containing an event or buffer object ID greater than INT_MAX. When the kernel processes that image, idr_alloc() triggers a WARN. On hardened systems with panic_on_warn=1, this results in a kernel panic and reboot, producing a denial-of-service condition.

No verified exploit code is public. The vulnerability is described in prose in the upstream commit messages; see the referenced kernel git commits for the fix diff.

Detection Methods for CVE-2026-80870

Indicators of Compromise

  • Kernel log entries containing WARN traces originating from idr_alloc() with call stacks referencing kfd_criu_restore_event or criu_restore_memory_of_gpu
  • Unexpected reboots on hosts running AMD GPU workloads with panic_on_warn enabled
  • CRIU restore operations against KFD failing with -EINVAL after patching, which may indicate malformed or tampered checkpoint images

Detection Strategies

  • Monitor dmesg and journal output for kernel WARN messages referencing amdkfd restore paths
  • Baseline expected CRIU workflows and alert on failed KFD restore ioctls from unexpected user contexts
  • Correlate GPU workload restore attempts with kernel taint state changes

Monitoring Recommendations

  • Ingest kernel logs from AMD GPU hosts into a centralized log platform for WARN and panic pattern matching
  • Track kernel version inventory across Linux fleets to identify hosts still running pre-patch builds
  • Alert on repeated CRIU restore failures against the same host, which may indicate probing

How to Mitigate CVE-2026-80870

Immediate Actions Required

  • Apply the upstream stable kernel patches referenced in the CVE record to all AMD GPU hosts using KFD CRIU restore
  • Restrict access to KFD device nodes and CRIU restore capabilities to trusted service accounts only
  • Review whether panic_on_warn is enabled and evaluate the operational risk of unprivileged reboots until patched

Patch Information

The fix adds INT_MAX validation before restored IDs are passed to idr_alloc() in both kfd_criu_restore_event() and criu_restore_memory_of_gpu(). Invalid IDs cause the restore to return -EINVAL, preventing the IDR layer from receiving out-of-range values. The patch is available in the following upstream commits: 085ea93bda71, 543ed0f61d56, 85043dd49c2f, 89a75e3349c4, cb6311f25a09, and f8687018f240.

Workarounds

  • Disable CRIU checkpoint/restore for KFD workloads where the feature is not required
  • Restrict access to /dev/kfd to trusted users via device permissions or Linux capabilities
  • Consider disabling panic_on_warn on non-hardened hosts to prevent reboots from a triggered WARN, accepting the tradeoff of reduced fail-safe behavior

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.