KernelScan.io

HIGH Introduced in 3.16

kvm WatchpointImport UAF

CVE-2026-89922

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI6.9MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: KVM: s390: Take srcu when importing watchpoint data __import_wp_info() backs up the original guest memory contents of a watchpoint with read_guest_abs(), which is kvm_read_guest() and therefore resolves the memslot via __kvm_memslots(). That requires kvm->srcu (or kvm->slots_lock) to be held, otherwise a concurrent memslot update can free the memslots array under us once its SRCU grace period has elapsed. As this is not fast path, following lock ordering (mutex first, then srcu) take the big hammer and hold the srcu for the full import.

02

Engine v0.6.0

Risk summary

A race condition in KVM s390 watchpoint import allows a concurrent memslot update to free the memslots array while it is still being accessed, leading to a use-after-free. A local user with access to a KVM s390 guest can trigger this by setting guest debug watchpoints while concurrently updating memory slots, potentially resulting in kernel memory corruption. This affects systems running KVM on s390 architecture with guest debugging enabled.

Affectedarch/s390/kvm/kvm-s390.c (KVM s390)

Vulnerability analysis

When setting up hardware watchpoints for guest debugging, the host kernel reads guest memory to preserve the original data at the watchpoint location. This operation looks up the memory slot in a protected table, but the watchpoint setup path failed to acquire the necessary read lock. A concurrent update to the guest's memory mappings could then free that table while the watchpoint setup was still using it, causing a use-after-free. The fix holds the proper read lock for the entire watchpoint import so the table cannot be freed mid-operation. The flaw is reachable from userspace through the guest-debugging interface on an s390 KVM virtual CPU, requiring only access to the virtual-machine file descriptor.

03

BranchIntroducedFixed inPatch commit
7.23.167.2.54c05bf21d180
6.13.166.1.1886830fbc3724b
6.123.166.12.11076f5b4ea9ed0
mainline3.167.3-rc1a4e482def853
6.63.166.6.157f8e3a9997d5e
6.183.166.18.51cc710ee45395
cip/6.123.166.12.111-cip3276f5b4ea9ed0