CVE-2026-64098

Source
https://cve.org/CVERecord?id=CVE-2026-64098
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-64098.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-64098
Downstream
Published
2026-07-19T15:40:04.264Z
Modified
2026-07-22T05:30:09.801231248Z
Severity
  • 7.8 (High) CVSS_V3 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
drm/virtio: use uninterruptible resv lock for plane updates
Details

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

drm/virtio: use uninterruptible resv lock for plane updates

virtiogpucursorplaneupdate() and virtiogpuresourceflush() lock the framebuffer BO's dmaresv via virtiogpuarraylockresv() and ignore its return value. The function can fail with -EINTR from dmaresvlockinterruptible() (signal during lock wait) or with -ENOMEM from dmaresvreservefences() (fence slot allocation), leaving the resv lock not held. The queue path then walks the object array and calls dmaresvaddfence(), which requires the lock held; with lockdep enabled this trips dmaresvassertheld():

WARNING: drivers/dma-buf/dma-resv.c:296 at dmaresvaddfence+0x71e/0x840 Call Trace: virtiogpuarrayaddfence virtiogpuqueuectrlsgs virtiogpuqueuefencedctrlbuffer virtiogpucursorplaneupdate drmatomichelpercommitplanes drmatomichelpercommittail committail drmatomichelpercommit drmatomiccommit drmatomichelperupdateplane __setplaneatomic drmmode_cursoruniversal drmmodecursorcommon drmmodecursorioctl drmioctl __x64sysioctl

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 .atomicupdate 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 .preparefb was rejected because the broader lock scope deadlocks against other BO locking paths in the same atomic commit.

Introduce virtiogpulockoneresvuninterruptible() that uses dmaresvlock() instead of dmaresvlockinterruptible(). 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 virtiogpucursorplaneupdate() and virtiogpuresourceflush(); check the return value to handle the remaining -ENOMEM case from dmaresvreservefences() 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 virtiogpuarraylockresv() (the ioctl paths) continue to use the interruptible variant.

The bug was reported by syzbot, triggered via fault injection (failnth) on the DRMIOCTLMODECURSOR path, which forces the -ENOMEM branch in dmaresvreserve_fences().

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/64xxx/CVE-2026-64098.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
5cfd31c5b3a321aed0c9621b7b45efa2942056f8
Fixed
c86077d512ee980cc91322211d35dbcd3175f64c
Fixed
21ab64c77a30d56efc506c8fa2ad8959f8ce3d36
Fixed
7930eee22cd3df61e85be8aa512032ab303b7167
Fixed
8fadd01cf461fee5bb11506621339c548447e5c7
Fixed
a2359a411b15f495d12cfda6a7db6855ebb7f90f
Fixed
9af1b6e175c82daf4b423da339a722d8e67a735a

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-64098.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.7.0
Fixed
6.1.175
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.142
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.92
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.34
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.0.11

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-64098.json"