Skip to main content

Linux Kernel CVE-2026-64098

| EUVDEUVD-2026-45783 HIGH
Improper Locking (CWE-667)
2026-07-19 Linux GHSA-9phf-m556-w4xg
7.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
5.3 MEDIUM

Local DRM ioctl only (AV:L, PR:L); needs a race/fault-injection window so AC:H; demonstrated impact is a WARN and fence-list corruption (A:H, I:L), with no confidentiality effect.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE
HIGH
qualitative
Red Hat
7.0 MEDIUM
qualitative

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 17:25 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Jul 19, 2026 - 17:03 EUVD
CVE Published
Jul 19, 2026 - 15:40 cve.org
UNKNOWN (no severity yet)
CVE Published
Jul 19, 2026 - 15:40 cve.org
HIGH 7.8

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

drm/virtio: use uninterruptible resv lock for plane updates

virtio_gpu_cursor_plane_update() and virtio_gpu_resource_flush() lock the framebuffer BO's dma_resv via virtio_gpu_array_lock_resv() and ignore its return value. The function can fail with -EINTR from dma_resv_lock_interruptible() (signal during lock wait) or with -ENOMEM from dma_resv_reserve_fences() (fence slot allocation), leaving the resv lock not held. The queue path then walks the object array and calls dma_resv_add_fence(), which requires the lock held; with lockdep enabled this trips dma_resv_assert_held():

WARNING: drivers/dma-buf/dma-resv.c:296 at dma_resv_add_fence+0x71e/0x840 Call Trace: virtio_gpu_array_add_fence virtio_gpu_queue_ctrl_sgs virtio_gpu_queue_fenced_ctrl_buffer virtio_gpu_cursor_plane_update drm_atomic_helper_commit_planes drm_atomic_helper_commit_tail commit_tail drm_atomic_helper_commit drm_atomic_commit drm_atomic_helper_update_plane __setplane_atomic drm_mode_cursor_universal drm_mode_cursor_common drm_mode_cursor_ioctl drm_ioctl __x64_sys_ioctl

Beyond the WARN, mutating the dma_resv fence list without the lock races with concurrent readers/writers and can corrupt the list.

Both call sites run inside the .atomic_update plane callback, which DRM atomic helpers do not allow to fail (by the time it runs, the commit has been signed off to userspace and there is no clean rollback path). Moving the lock acquisition to .prepare_fb was rejected because the broader lock scope deadlocks against other BO locking paths in the same atomic commit.

Introduce virtio_gpu_lock_one_resv_uninterruptible() that uses dma_resv_lock() instead of dma_resv_lock_interruptible(). This eliminates the -EINTR failure mode -- the realistic syzbot trigger -- without extending the lock hold across the commit. The helper locks a single BO and rejects nents > 1 with -EINVAL; both fix sites lock exactly one BO.

Use it from virtio_gpu_cursor_plane_update() and virtio_gpu_resource_flush(); check the return value to handle the remaining -ENOMEM case from dma_resv_reserve_fences() by freeing the objs and skipping the plane update for that frame. The framebuffer BOs touched here are not shared with other contexts and lock contention is expected to be brief, so the loss of signal-interruptibility is acceptable.

Other callers of virtio_gpu_array_lock_resv() (the ioctl paths) continue to use the interruptible variant.

The bug was reported by syzbot, triggered via fault injection (fail_nth) on the DRM_IOCTL_MODE_CURSOR path, which forces the -ENOMEM branch in dma_resv_reserve_fences().

AnalysisAI

Denial of service and potential dma_resv fence-list corruption in the Linux kernel's virtio-gpu DRM driver (drm/virtio) affects Linux guests using virtio graphics, where virtio_gpu_cursor_plane_update() and virtio_gpu_resource_flush() ignore the return value of virtio_gpu_array_lock_resv(). When the lock acquisition fails with -EINTR (signal during wait) or -ENOMEM (fence-slot allocation), the code proceeds to call dma_resv_add_fence() on an unheld lock, tripping a lockdep WARNING and racing concurrent readers/writers of the fence list. There is no public exploit identified at time of analysis; EPSS is low (0.18%, 8th percentile) and the issue was found by syzbot via fault injection rather than in-the-wild abuse.

Technical ContextAI

The affected component is the virtio-gpu paravirtualized GPU driver in the DRM (Direct Rendering Manager) subsystem, which serves graphics for Linux guests running under QEMU/KVM and similar hypervisors. The bug lives in the dma_resv reservation-object locking discipline used to serialize access to a buffer object's (BO) fence list. virtio_gpu_array_lock_resv() wraps dma_resv_lock_interruptible() and dma_resv_reserve_fences(); the former returns -EINTR if a signal arrives during the lock wait, the latter returns -ENOMEM on allocation failure, and in both cases the resv lock ends up NOT held. Both call sites run inside the DRM atomic .atomic_update plane callback - a callback the DRM helpers do not permit to fail - so the code proceeded to queue commands that call dma_resv_add_fence(), which asserts the lock is held (dma_resv_assert_held() at drivers/dma-buf/dma-resv.c:296). This is fundamentally a missing-error-check / improper-locking defect (CWE-252 unchecked return value combined with CWE-667 improper locking / CWE-362 race condition); the input's 'Code Injection' tag and CWE 'N/A' are not well supported by the technical description.

RemediationAI

Vendor-released patch: update to a fixed stable kernel - 6.1.175, 6.6.142, 6.12.92, 6.18.34, 7.0.11, or 7.1, or later on your branch - as shipped by your distribution, and reboot into it. The fix introduces virtio_gpu_lock_one_resv_uninterruptible() (using dma_resv_lock() instead of the interruptible variant) to remove the -EINTR failure mode, and adds return-value checks so the remaining -ENOMEM case frees the object array and skips that frame's plane update rather than proceeding without the lock; apply it via the commits at https://git.kernel.org/stable/c/7930eee22cd3df61e85be8aa512032ab303b7167 (and the sibling stable commits). If immediate patching is not possible, compensating controls are limited because the trigger is a local ioctl: restrict access to the DRM device nodes (/dev/dri/card*, /dev/dri/renderD*) to trusted users/groups to reduce who can issue DRM_IOCTL_MODE_CURSOR, and disable kernel fault-injection interfaces (CONFIG_FAILSLAB / fail_nth via /sys/kernel/debug and failslab) or unmount debugfs so the -ENOMEM branch cannot be forced - trade-offs are that tightening DRI permissions can break unprivileged graphical or headless-render workloads, and disabling fault injection removes a developer/testing facility. For guests that do not need virtio graphics, not loading the virtio-gpu driver eliminates the exposed path at the cost of losing that display device.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

Share

CVE-2026-64098 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy