A subtle NULL‑check omission in the Linux kernel’s AMD GPU display code (drm/amd/display) — tracked as CVE‑2024‑26648 — has been fixed upstream after maintainers discovered that the function edp_setup_replay() dereferenced internal structures before verifying pointer validity, creating a reliable local denial‑of‑service (kernel crash) condition on affected kernels.
The vulnerability exists in the AMDGPU display driver code that manages eDP (embedded DisplayPort) panel control. Specifically, the function edp_setup_replay() in drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c was found to dereference
Because the flaw is an availability‑first bug (it does not affect confidentiality or integrity), the practical impact is that an attacker with local access — or with the ability to execute unprivileged code on the host — can trigger a kernel oops or panic, causing a sustained or persistent denial‑of‑service on the affected system. Public vulnerability trackers and distribution advisories place the severity in the medium range (CVSS 3.x ≈ 5.5) but consistently mark the availability impact as high.
Several Linux security databases and distribution advisories catalog the flaw (NVD, Ubuntu, Debian, Red Hat feeds, and OSV), and multiple stable kernel commits addressing the issue were published in the upstream trees. Those downstream advisories make clear the fix is defensive: check pointers before dereferencing or otherwise realign the control flow to avoid accessing invalid objects.
Note: while the underlying problem is simple, the context matters. GPU driver code interacts with hardware, firmware components, and asynchronous events; a NULL dereference in these paths can appear in obscure sequences (panel init, link negotiation, replay setup) and may be triggered only by specific hardware combinations or by rare timing. That is why the fix is to harden the checks rather than to redesign driver behavior.
Several distro advisories, and kernel stable patch references, identify commit hashes associated with the fix (these appear in changelogs and vendor advisories). Where vendors provide backported fixes, they typically either include the upstream commit or the equivalent logic in their kernel package update. Administrators should rely on vendor kernels (distribution updates) rather than trying to cherry‑pick individual commits in production unless they maintain their own kernel tree.
Caveat: while the upstream commit identifiers are publicly recorded in CVE databases and OSV, direct browsing of the kernel.org patch pages may be restricted in some environments; distribution advisories and OSV entries provide the confirmed mapping between CVE and the upstream change. Always validate the exact commit hash and patch content in your own secure environment prior to any manual backport.
Recommended sequence (numbered, stepwise):
Downstream vendor advisories differ in update cadence and in whether they backport the fix or require a larger kernel update. That’s why the practical emergency response is vendor kernel updates rather than trying to patch running kernels in situ unless you control the kernel tree and can safely test and backport.
CVE summary: CVE‑2024‑26648 — drm/amd/display: Fix variable dereferencing before NULL check in edp_setup_replay(); availability impact: high (local DoS); recommended action: apply vendor kernel update or backported upstream patch as soon as practical.
Source: MSRC Security Update Guide - Microsoft Security Response Center
Background / Overview
The vulnerability exists in the AMDGPU display driver code that manages eDP (embedded DisplayPort) panel control. Specifically, the function edp_setup_replay() in drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c was found to dereference struct dc [I]dc and struct dmub_replay [/I]replay before checking whether the link and replay pointers were NULL, a textbook null pointer dereference that can convert otherwise benign error paths into a kernel crash. This defect was captured and assigned CVE‑2024‑26648.Because the flaw is an availability‑first bug (it does not affect confidentiality or integrity), the practical impact is that an attacker with local access — or with the ability to execute unprivileged code on the host — can trigger a kernel oops or panic, causing a sustained or persistent denial‑of‑service on the affected system. Public vulnerability trackers and distribution advisories place the severity in the medium range (CVSS 3.x ≈ 5.5) but consistently mark the availability impact as high.
Several Linux security databases and distribution advisories catalog the flaw (NVD, Ubuntu, Debian, Red Hat feeds, and OSV), and multiple stable kernel commits addressing the issue were published in the upstream trees. Those downstream advisories make clear the fix is defensive: check pointers before dereferencing or otherwise realign the control flow to avoid accessing invalid objects.
Why this matters: availability, attack surface, and real‑world risk
Availability over secrecy
This is not a remote code‑execution or privilege‑escalation vulnerability — it’s a local null pointer dereference that primarily affects availability. An attacker who already has the ability to run code (even unprivileged) on the host can trigger a kernel panic by exercising the right eDP/AMDGPU path, which in turn can crash the entire system or hang the display stack. For shared hosts, multi‑tenant environments, or systems where restart is costly, the operational consequences can be significant.Where the attack path typically sits
- Attack Vector: Local (not network‑vectorized). The vulnerable code is inside the kernel’s GPU display driver and is not exposed directly to network inputs. Attackers need the ability to execute code on the host or to induce the kernel to process the affected path via device interaction.
- Privileges: Low — exploitability requires local privileges (unprivileged process execution or a user logged in locally). Some advisories treat the privilege requirement as low but emphasize that local code execution is necessary.
- Impact: Availability (kernel oops/panic). Repeated or crafted triggers can leave a system unusable until reboot or until the faulty code path is prevented from running.
Real‑world risk model
- Desktop or workstation: moderate operational risk. A local user could cause a crash, but a system administrator can usually reboot and restore service quickly.
- Cloud/virtualized hosts and multi‑tenant servers: higher priority. A faulty or malicious VM or container able to access the host GPU or trigger the driver path may affect co‑tenants or host stability.
- Embedded and kiosk systems (where AMD GPUs and eDP panels are used): high operational risk if a crash means lost availability for critical functionality.
Technical deep‑dive: what went wrong inside edp_setup_replay()
At the code level, the bug is straightforward: code paths in edp_setup_replay() assumed non‑NULL pointers for internal structures and called member accesses on them before performing the necessary NULL checks. The problem typically appears in drivers when:- A pointer is supplied or computed from another object that can legitimately be NULL in some error/unsupported cases.
- Subsequent code accesses fields or calls functions on that pointer without re‑checking its validity.
- When the pointer is NULL, dereferencing it causes a kernel null pointer dereference (OOM/BUG) and typically a kernel oops/panic.
- File: drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
- Function: edp_setup_replay() — around source line ~933–947 in the pre‑patched sources, where static analysis tools (smatch, Coverity, etc.) flagged dereferencing before the NULL check.
link and replay, return early on error, or rearrange code so that pointer use is guarded by confirmed non‑NULLness. Multiple stable kernel commits were recorded that apply this defensive change to the AMD display tree. Some vendor advisories show the exact commit references that landed the fix in stable kernel branches.Note: while the underlying problem is simple, the context matters. GPU driver code interacts with hardware, firmware components, and asynchronous events; a NULL dereference in these paths can appear in obscure sequences (panel init, link negotiation, replay setup) and may be triggered only by specific hardware combinations or by rare timing. That is why the fix is to harden the checks rather than to redesign driver behavior.
Affected kernels and where the fix landed
Distribution notices and vulnerability trackers aggregate the upstream data and report vulnerable versions. Publicly available trackers list the affected kernels and the remediation status:- Many trackers list vulnerable versions as kernels earlier than 6.6.15 and in the 6.7.x stream prior to specific stable backports (for example, 6.7 ≤ x < 6.7.3 in some feeds). Specific package and distribution backport status vary by distro and release.
- The CVE was published/recorded March 26, 2024, and multiple downstream stable commits were referenced in the OSV and other advisories as the fixes for that CVE. Those commits were merged into the stable kernel trees and then propagated into distro kernels over the following months.
Patch and upstream response (what changed)
Upstream maintainers applied defensive checks in the AMD display code to make sure pointers are verified before use, aligning the code with expected null‑tolerant error paths. Multiple stable kernel commits that reference the issue are recorded in OSV and several vulnerability trackers; those commits add explicit NULL checks or rework conditional blocks to avoid dereferencinglink and replay when they might be NULL.Several distro advisories, and kernel stable patch references, identify commit hashes associated with the fix (these appear in changelogs and vendor advisories). Where vendors provide backported fixes, they typically either include the upstream commit or the equivalent logic in their kernel package update. Administrators should rely on vendor kernels (distribution updates) rather than trying to cherry‑pick individual commits in production unless they maintain their own kernel tree.
Caveat: while the upstream commit identifiers are publicly recorded in CVE databases and OSV, direct browsing of the kernel.org patch pages may be restricted in some environments; distribution advisories and OSV entries provide the confirmed mapping between CVE and the upstream change. Always validate the exact commit hash and patch content in your own secure environment prior to any manual backport.
How to detect if you are vulnerable
Quick, practical checks for administrators and security teams:- Find the running kernel:
- Run uname -r to get the kernel version.
- Cross‑reference that version against distro advisories (your distribution’s security tracker) and the published affected ranges for CVE‑2024‑26648. Many trackers list vulnerable ranges (for example, kernels older than 6.6.15 or certain 6.7.x builds).
- Inspect the package changelog:
- On Debian/Ubuntu: apt changelog linux-image-$(uname -r) or check the distro security advisory page for CVE‑2024‑26648 status.
- On RPM systems: check rpm -q --changelog kernel‑package and consult Red Hat/CentOS advisories.
- Look for kernel oopses/log entries:
- Grep kernel logs (journalctl -k or /var/log/kern.log) for messages mentioning amdgpu, edp, link_edp_panel_control, or oops/panic entries around GPU display initialization.
- If systems experience unexplained sudden crashes tied to display initialization or hardware attach events, and they run affected kernels, prioritize patching.
Immediate mitigation and remediation guidance
Prioritize remediation based on threat model. For most environments, the recommended approach is to apply vendor kernel updates as soon as they are available and tested. If immediate updates are not possible, several compensating controls can reduce risk.Recommended sequence (numbered, stepwise):
- Inventory: Identify hosts with AMDGPU drivers present and note kernel versions (uname -r). Prioritize shared hosts and multi‑tenant systems.
- Patch: Apply vendor‑supplied kernel updates that include the upstream fix (install the distro kernel update / vendor package). This is the preferred, supported remediation path.
- Backport: If you maintain your own kernels, backport the upstream commit(s) that fix the nullptr checks into your stable branch and rebuild, following standard kernel maintenance practices. Validate carefully on test hardware.
- Restrict local execution: Reduce the set of accounts that can run arbitrary code on systems with exposed GPUs. Enforce least privilege, and harden user session isolation to limit untrusted local execution vectors. This is a temporary mitigation only.
- Disable GPU if acceptable: On hosts where GPU functionality is not required, consider blacklisting the amdgpu module until you can patch. This reduces the attack surface but also disables GPU functionality. (Add “blacklist amdgpu” to modprobe.d if appropriate and reboot.)
- Monitor logs: Increase alerting for kernel oopses, amdgpu errors, and repeated reboots; collect forensic artifacts for any suspicious crashes. Use centralized logging and watch for repeatable crash patterns originating from display driver paths.
- Cloud/Hypervisor priority: For cloud hosts that present GPU passthrough or share GPUs between guests, prioritize host kernel patching to avoid noisy neighbor or cross‑VM availability incidents.
Detection, logging and forensic recommendations
- Preserve logs and coredumps: If you encounter a sudden kernel oops that looks like a display‑driver NULL‑deref, preserve system logs and any kdump/coredump output. These help kernel developers verify whether the crash is the CVE in question.
- Correlate: Map crashes to user sessions and local access logs. Because the exploit is local, correlate with the last local logins, cron jobs, or local commands that invoked GPU usage (X/org, Wayland sessions, GPU-accelerated processes).
- Test case: If you are testing in a controlled lab, reproduce with hardware that matches production (same GPU + eDP panel), boot an unpatched kernel, and attempt the sequence of actions that exercise eDP panel control paths. Do not test exploit code on production systems.
Vendor statements and distribution handling
Multiple distributions and vulnerability trackers catalogued CVE‑2024‑26648 and published their own advisories or status mappings. For example, Ubuntu published an advisory entry and a priority classification; Debian’s security tracker also references the CVE and lists fixed package releases where applicable. OSV, NVD, Snyk, and other vulnerability databases cross‑reference the upstream commits tied to the fix. Administrators should follow their distribution’s security advisories for the authoritative package and backport timing.Downstream vendor advisories differ in update cadence and in whether they backport the fix or require a larger kernel update. That’s why the practical emergency response is vendor kernel updates rather than trying to patch running kernels in situ unless you control the kernel tree and can safely test and backport.
Timeline and context
- The CVE was publicly recorded on March 26, 2024, after maintainers and static analysis tools flagged a dereference‑before‑check condition in edp_setup_replay(). Several vendors and vulnerability trackers published entries around that timeframe.
- Upstream commits resolving the issue were merged into stable kernel trees and then included in distribution kernel packages across the following months; advisories and package changelogs document the backports for specific releases. Administrators should refer to their distribution’s package history to find the exact patch or kernel version that contains the fix.
Practical recommendations for administrators and developers
- Prioritize patching of hosts with AMD GPUs or with eDP panels, especially shared servers, VDI hosts, and hosts that allow untrusted local code execution.
- Test vendor kernel updates in a staging environment that reproduces the GPU hardware and display configuration used in production. GPUs and display stacks can be sensitive to kernel changes and vendor microcode/firmware interactions.
- Where patching is slow or impossible, consider temporary hardening: restrict local execution, disable GPU modules if not needed, or isolate the workload to hardware that is patched.
- For kernel developers and maintainers: keep defensive checks in hardware‑interaction code and treat static analysis warnings (smatch, Coverity) for pointer use as high‑priority, especially in driver init/teardown and hardware negotiation code paths. Several prior AMD DRM fixes followed the same pattern of adding missing NULL checks to prevent deterministic DoS.
Strengths and limits of the fix — critical assessment
Strengths:- The upstream fix is targeted and low‑risk: adding or reorganizing NULL checks is straightforward and unlikely to introduce regressions compared with more invasive refactors.
- Because the vulnerability is local and not remotely exploitable, systems with minimal local access exposure are less likely to be targeted — giving defenders a window to patch without mass panic.
- The fix addresses the symptom (dereference before check), not any deeper design issues in how optional or nullable pointers are propagated in the codebase. If similar code patterns exist elsewhere in the AMD display tree, more bugs may be present.
- Distributions that delay kernel updates or choose not to backport the patch leave their users exposed; several scanners and vulnerability feeds flagged some vendor packages as “unpatched” for a period. Operators relying on vendor kernels must track their distro’s patch schedule closely.
- The bug exposes how easily hardware interaction code can be brittle — a single missing check in initialization or replay logic can crash an entire host. This argues for broader investment in static analysis and fuzzing for driver stacks.
Final analysis and action checklist
This is a medium‑severity kernel vulnerability whose practical impact is an easy‑to‑trigger denial‑of‑service on affected kernels because of a missing pointer check in the AMDGPU display code. The steps you should take now:- Inventory hosts for AMD GPUs and eDP usage; prioritize multi‑tenant and cloud hosts.
- Patch vendor kernels as soon as possible and test updates before rolling them to production. Use your distro security advisories to find the exact package release that contains the fix.
- If immediate patching isn’t feasible, apply temporary mitigations: restrict local execution, blacklist the amdgpu module where acceptable, and increase monitoring for kernel oopses.
- Keep forensic artifacts if you witness crashes that may be related to the driver; share them with your vendor or the kernel community if requested for debugging.
CVE summary: CVE‑2024‑26648 — drm/amd/display: Fix variable dereferencing before NULL check in edp_setup_replay(); availability impact: high (local DoS); recommended action: apply vendor kernel update or backported upstream patch as soon as practical.
Source: MSRC Security Update Guide - Microsoft Security Response Center