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.

