CVE-2026-68262 Overview
CVE-2026-68262 is a Linux kernel vulnerability in the drm/imagination (PowerVR) GPU driver. The flaw resides in pvr_set_uobj_array(), which copies kernel objects into a userspace array whose element size is described by out->stride. When the userspace stride differs from the kernel object size, the slow path advances the userspace and kernel pointers using the wrong values, reversing the intended layout.
For larger userspace strides, later iterations read from incorrect kernel addresses. For smaller userspace strides, later iterations write at incorrect userspace offsets. Per-element padding also fails to clear, leaving stale data exposed.
Critical Impact
A local, low-privileged user interacting with the PowerVR DRM driver can trigger out-of-bounds kernel reads and misaligned userspace writes, resulting in memory corruption, information exposure of adjacent kernel data, and potential denial of service.
Affected Products
- Linux kernel versions containing the drm/imagination (PowerVR) DRM driver prior to the fix
- Distributions shipping kernels before the referenced stable commits
- Systems using Imagination Technologies PowerVR GPUs with the affected DRM driver
Discovery Timeline
- 2026-08-10 - CVE-2026-68262 published to the National Vulnerability Database (NVD)
- 2026-08-13 - Last updated in NVD database
Technical Details for CVE-2026-68262
Vulnerability Analysis
The pvr_set_uobj_array() helper in the Imagination PowerVR DRM driver marshals an array of kernel objects into a user-supplied array. The user array element size is provided via out->stride, and this stride can differ from the internal kernel object size (obj_size).
In the fast path where sizes match, iteration is straightforward. In the slow path where they diverge, the implementation swapped the increments: the userspace pointer was advanced by obj_size while the kernel pointer was advanced by out->stride. This inverts the intended layout traversal.
When out->stride > obj_size, subsequent iterations dereference kernel memory beyond the source array, disclosing adjacent kernel data. When out->stride < obj_size, subsequent iterations write to userspace offsets that overlap previously written elements, corrupting the output. Additionally, the padding-clear step ran only for the first element, leaving stale kernel bytes in per-element padding regions for later entries.
Root Cause
The root cause is a stride-versus-size mismatch bug: the pointer arithmetic in the slow path of pvr_set_uobj_array() used the wrong increment for each side of the copy. This is a classic Boundary Condition Error combined with an Out-of-Bounds Read and Information Exposure primitive.
Attack Vector
Exploitation requires local access with the ability to issue ioctl calls to the PowerVR DRM device (typically /dev/dri/cardN). A low-privileged user supplies a crafted out->stride value that differs from the kernel-side object size. When the driver walks the slow path, it reads out-of-bounds kernel memory and writes user data at incorrect offsets, while padding bytes leak uninitialized kernel content.
Refer to the upstream fixes for implementation details: Kernel Git Commit 09beaf4, Kernel Git Commit 8dc8f3f, Kernel Git Commit b983a35, and Kernel Git Commit bbebc39.
Detection Methods for CVE-2026-68262
Indicators of Compromise
- Unexpected process crashes or GPU driver faults associated with /dev/dri/card* access by non-root users
- Kernel log entries referencing pvr_set_uobj_array or the drm/imagination subsystem under user workloads
- Anomalous ioctl activity from unprivileged processes targeting the PowerVR DRM device
Detection Strategies
- Audit ioctl syscalls against PowerVR DRM device nodes and flag calls with non-standard stride parameters
- Correlate kernel oops or WARN traces citing the imagination DRM driver with the calling process identity
- Monitor for local processes reading kernel memory patterns after PowerVR ioctl activity, indicative of information disclosure
Monitoring Recommendations
- Enable auditd rules for access to /dev/dri/card* and /dev/dri/renderD* nodes
- Ingest kernel ring buffer (dmesg) into a central log platform and alert on drm/imagination warnings
- Track process behavior on ARM/embedded systems using PowerVR GPUs, since these are the most exposed platforms
How to Mitigate CVE-2026-68262
Immediate Actions Required
- Update to a Linux kernel version that includes the upstream fix for pvr_set_uobj_array()
- Restrict access to the PowerVR DRM device nodes to trusted users and required system services only
- Review multi-tenant systems and containers that expose /dev/dri/* for potential local privilege exposure
Patch Information
The fix advances the userspace pointer by out->stride and the kernel pointer by obj_size, and clears per-element padding while the current userspace pointer is still valid. Apply the stable kernel updates referenced in Kernel Git Commit 09beaf4, Kernel Git Commit 8dc8f3f, Kernel Git Commit b983a35, and Kernel Git Commit bbebc39.
Workarounds
- Disable or unload the powervr DRM kernel module on systems that do not require GPU acceleration
- Tighten permissions on /dev/dri/card* using udev rules to limit access to the video or render group
- Where feasible, block unprivileged user containers from mounting or accessing DRM device nodes
# Example: restrict PowerVR DRM device access via udev
# /etc/udev/rules.d/99-powervr-restrict.rules
KERNEL=="card[0-9]*", SUBSYSTEM=="drm", DRIVERS=="powervr", MODE="0660", GROUP="video"
KERNEL=="renderD[0-9]*", SUBSYSTEM=="drm", DRIVERS=="powervr", MODE="0660", GROUP="render"
# Reload udev rules
sudo udevadm control --reload-rules && sudo udevadm trigger
# Optional: blacklist the module if PowerVR GPU is not required
echo "blacklist powervr" | sudo tee /etc/modprobe.d/blacklist-powervr.conf
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

