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

CVE-2026-46156: Linux Kernel Use-After-Free Vulnerability

CVE-2026-46156 is a use-after-free vulnerability in the Linux kernel affecting LoongArch GPU DMA hang fixup code. This flaw can cause kernel panics through invalid memory access. This article covers technical details, affected versions, impact, and mitigation steps.

Published:

CVE-2026-46156 Overview

CVE-2026-46156 is a Linux kernel vulnerability in the LoongArch architecture's loongson_gpu_fixup_dma_hang() function. The function contains a switch statement that fails to handle cases other than DC2 or DC3 device identifiers. When a discrete GPU is inserted into the system, the function computes a device reference from pdev->devfn+1 and performs a readl(crtc_reg) operation against an unmapped address. This triggers a kernel Address Error Exception (ADE) and panics the boot process.

Critical Impact

Systems with discrete GPUs on LoongArch platforms panic during PCI scan, preventing boot and causing local denial of service.

Affected Products

  • Linux kernel on the LoongArch (loong64) architecture
  • Systems using the loongson_gpu_fixup_dma_hang() PCI device fixup path
  • Loongson platforms (observed on Loongson-3A6000-HV) with discrete GPUs such as the LG100

Discovery Timeline

  • 2026-05-28 - CVE-2026-46156 published to NVD
  • 2026-05-28 - Last updated in NVD database

Technical Details for CVE-2026-46156

Vulnerability Analysis

The defect resides in the LoongArch PCI quirk loongson_gpu_fixup_dma_hang(). The function iterates over neighboring PCI functions by computing base + PCI_DEVICE_ID, where base is derived from pdev->devfn+1. The switch statement matching the discovered device handles only DC2 and DC3 controllers, with no default branch.

When the platform exposes a discrete GPU such as the Loongson LG100 alongside companion functions, the computed crtc_reg pointer does not map to a valid MMIO region. The subsequent readl(crtc_reg) dereferences an invalid kernel virtual address (BADV: 7fffffffffffff00 in the reported trace). This produces an ADE with ECode=8 EsubCode=1, killing swapper/0 (PID 1) during early acpi_pci_root_create execution.

Root Cause

The root cause is missing input validation in a PCI fixup routine. The switch statement enumerating device identifiers lacks a default arm, so unexpected sibling devices fall through to MMIO access with an unmapped register pointer. The fix adds a default case that returns early, preventing the unsafe readl() call.

Attack Vector

Exploitation is limited to local conditions on LoongArch hardware. An operator inserting a discrete PCIe GPU into a Loongson platform triggers the panic during PCI enumeration on boot. There is no indication of remote exploitation, code execution, or privilege escalation. The realized impact is a denial-of-service boot failure on affected hardware configurations.

The vulnerability is described in prose because no public proof-of-concept exists. The kernel panic trace published with the patch series provides the technical detail required to reproduce the condition on LoongArch hardware with a discrete GPU installed.

Detection Methods for CVE-2026-46156

Indicators of Compromise

  • Kernel boot logs containing Kernel ade access followed by loongson_gpu_fixup_dma_hang+0x in the call trace.
  • ESTAT register reporting [ADEM] (IS= ECode=8 EsubCode=1) during PCI device scan on LoongArch systems.
  • Boot failures on Loongson-3A6000 or similar loong64 hardware after installing a discrete GPU.

Detection Strategies

  • Inventory LoongArch systems and identify hosts running unpatched kernels with discrete GPUs attached.
  • Monitor serial console and dmesg output for PCI fixup panics during early initialization.
  • Correlate hardware change tickets with boot failures to confirm the trigger is GPU insertion rather than another regression.

Monitoring Recommendations

  • Forward kernel logs from LoongArch fleet endpoints to a centralized logging platform and alert on ade access strings.
  • Track kernel package versions across the LoongArch fleet to confirm patch deployment status.
  • Validate PCI topology snapshots against expected device lists to catch unexpected discrete GPU configurations.

How to Mitigate CVE-2026-46156

Immediate Actions Required

  • Apply the upstream LoongArch kernel patches that add a default switch case to loongson_gpu_fixup_dma_hang().
  • Rebuild and deploy kernels for LoongArch hosts that ship discrete GPUs or are field-upgradeable with one.
  • If patching is not yet possible, defer adding discrete GPUs to affected Loongson systems.

Patch Information

The fix is available in the upstream Linux stable tree across multiple branches. Reference commits include Kernel Patch 07d190e4e, Kernel Patch 2cb19b06c, Kernel Patch 81fef1c27, Kernel Patch 8dfa2f878, and Kernel Patch 9e1aed63a. Rebase distribution kernels onto a stable branch containing one of these commits.

Workarounds

  • Remove discrete GPUs from Loongson platforms until a patched kernel is installed.
  • Boot with an earlier known-good kernel build that predates the introduction of the buggy fixup path, where feasible.
  • Restrict physical access and change-management approvals so GPU hardware is not added to unpatched LoongArch systems.

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

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

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.