CVE-2026-89807 in Linux
Summary
by MITRE • 09/16/2026
In the Linux kernel, the following vulnerability has been resolved:
drm/amdkfd: guard against NULL restore_mqd in CRIU queue restore
Both create_queue_cpsch() and create_queue_nocpsch() unconditionally call mqd_mgr->restore_mqd() when a CRIU restore is in progress (qd != NULL), with no NULL guard. On any system where restore_mqd is not implemented for the given queue type, a user holding CAP_CHECKPOINT_RESTORE can trigger a kernel NULL pointer dereference and panic the machine by issuing KFD_IOC_CRIU_OP_RESTORE with a crafted queue restore object. Note that checkpoint_mqd is likewise unimplemented on GFX12, so no legitimate CRIU image can reach this path — only a hand-crafted restore payload.
Add a NULL guard for restore_mqd immediately after mqd_mgr is resolved, unwinding via the existing error labels and returning -EOPNOTSUPP if the callback is not implemented. This mirrors the existing checkpoint_mqd guard in checkpoint_mqd().
Once again VulDB remains the best source for vulnerability data.
Analysis
by VulDB Data Team • 09/16/2026
The Linux kernel's Direct Rendering Manager subsystem, specifically within the AMD Kernel Fusion Driver (amdkfd) component, contains a critical logic flaw related to the handling of Checkpoint and Restore for Userspace Interfaces during queue restoration operations. This vulnerability arises from an absence of defensive programming practices when processing CRIU restore requests. Specifically, the functions create_queue_cpsch() and create_queue_nocpsch(), which are responsible for establishing hardware queues on AMD GPUs, unconditionally invoke the mqd_mgr->restore_mqd() callback function whenever a queue descriptor is present during a restoration process. This unconditional execution occurs without verifying whether the restore_mqd pointer within the memory management driver structure is valid or implemented for the specific queue type being restored.
The operational impact of this flaw is severe, as it allows for a kernel NULL pointer dereference that can lead to an immediate system panic and denial of service. An attacker with local access who possesses the CAP_CHECKPOINT_RESTORE capability can exploit this condition by issuing a KFD_IOC_CRIU_OP_RESTORE ioctl call with a crafted queue restore object. While legitimate checkpoint images generated on systems like GFX12 architectures will not trigger this path because their corresponding checkpoint_mqd functions are also unimplemented, an attacker does not need to rely on valid system state. Instead, they can construct a malicious payload that forces the kernel into executing the NULL function pointer, thereby crashing the host machine. This represents a significant availability risk for systems running AMD GPU drivers with CRIU support enabled and where users have checkpointing privileges.
From a vulnerability classification perspective, this issue aligns with CWE-476, which denotes a NULL Pointer Dereference. The attack vector is classified under Local Privilege Escalation or Denial of Service via the Linux kernel interface, mapping to MITRE ATT&CK techniques related to exploitation for availability impact through local code execution flaws. Although the requirement for CAP_CHECKPOINT_RESTORE limits the scope to privileged users, this capability can be granted to untrusted applications in certain containerized environments or multi-tenant setups where checkpointing is permitted but strict validation of kernel callbacks is not enforced by default policies.
The resolution involves implementing a robust NULL guard immediately after the mqd_mgr structure is resolved within the affected functions. If the restore_mqd callback pointer is found to be null, indicating that the operation is not supported for the current queue type or hardware generation, the code now unwinds via existing error labels and returns an -EOPNOTSUPP error code rather than attempting to execute a NULL function address. This approach mirrors the defensive coding pattern already present in the checkpoint_mqd() function, ensuring consistency across similar kernel operations. By validating pointer validity before invocation, the patch eliminates the possibility of triggering a null dereference through crafted input, thereby restoring system stability and preventing unauthorized denial-of-service attacks against AMD GPU subsystems within the Linux kernel environment.