[GIT PULL] KVM changes for 7.3-rc5
From: Paolo Bonzini
Date: Sat Sep 26 2026 - 02:16:32 EST
Linus,
The following changes since commit fd73f4a6659897191fa0d40695fe370925dd3780:
Linux 7.3-rc3 (2026-09-13 14:38:02 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus
for you to fetch changes up to c2f24f140c2ee6c00775c2a93c6ac931acec2b60:
Merge tag 'kvm-x86-fixes-7.3-rc5' of https://github.com/kvm-x86/linux into HEAD (2026-09-26 00:40:07 -0400)
A very large number of fixes. In terms of lines of code what dominates is
a selftest and a couple pKVM files (arch/arm64/kvm/hyp/nvhe), but there's
a lot of stuff that accumulated since rc1. I'll send more next week.
Paolo
----------------------------------------------------------------
Arm:
- Invalidate the ITS translation cache when the guest changes the
base address of the ITS tables (Fuad Tabba)
- Skip saving ITS devices with device IDs that are out-of-bounds
rather than failing the entire ITS save ioctl (Fuad Tabba)
- Close race between VM teardown and invalidations of nested MMUs
when handling MMU operations that are allowed to block
(Lorenzo Stoakes)
- Various fixes for the handling of the host's untrusted SVE
configuration in pKVM (Fuad Tabba)
- Make sure that empty SMCCC ranges based at 0 are rejected by the
kvm_smccc_set_filter() (Karl Mehltretter)
- Revoke the host mapping for pKVM's private stack pages, along
with a new sanity check that all mappings in the hyp's private
VA range have been correctly marked as hyp-owned (Fuad Tabba)
- Lifetime fixes for the array of shadow stage-2 MMUs, ensuring that
concurrent vCPU initialization cannot relocate in-use MMUs. Defer
the freeing of shadow stage-2 MMUs to the point that no other users
(e.g. MMU notifier) could reference them (Marc Zyngier)
- Drop useless WARN when rejecting an unsupported ioctl for pKVM
(Fuad Tabba)
- Fix the steal_time selftest to install correctly-sized mappings for
non-4K hosts (Sebastian Ott)
- Correct mapping of fine-grained trap for GCSPOPX instruction
(Mark Brown)
- Fix KVM_BUG_ON() due to missing handling of DBGBXVR<n> from 32-bit
guests (Karl Mehltretter)
RISC-V:
- Synchronize hrtimer during VCPU teardown.
- Fix the conversion between vsip and hvip values.
- Serialize IMSIC attributes with vCPU migration.
- Release unused page after MMU invalidation.
- Propagate interrupted G-stage faults to KVM user-space as EINTR.
- Fix nested acceleration hfence entry update order.
- Fix sdata leak and stale snapshot_addr in snapshot_set_shmem.
- Preserve firmware counter value across PMU counter stop/start.
- Report PMU snapshot write failure to the guest.
- Fix perf-backed counter accounting across PMU stop and read.
- Correctly propagate error of a hart status SBI call.
s390:
- Ensure that accesses through kvm_arch_set_irq_inatomic mark as dirty
the pages that contain indicator and summary bits.
- Fix compile warning for kvm_s390_update_cmma_dirty().
- Fix incorrect propagation of ENOENT from _gaccess_shadow_fault() to
userspace.
- Move s390_kvm_mmu_commit_memory_region() into
s390_kvm_mmu_prepare_memory_region() so that it can fail instead of WARN.
- Add missing srcu in kvm_s390_set_irq_state().
- Fix potential races in storage functions.
- Fix race in _destroy_pages_crste().
- Fix issues in the handling of KVM interrupt and page resources, when a
queue that is assigned to a mediated device (mdev) is removed from the
host's AP configuration.
- Fix loop condition in uv_find_secrets.
- Prevent potential out-of-bounds read.
x86:
- Fix a brown paper bag bug where KVM would incorrectly treat Intel PMU MSRs
as valid on AMD.
- Fix a regression in the hardware disable selftest where it checked the wrong
macro when detecting glibc support (breaks at least musl).
- Never clear KVM_REQ_VM_DEAD so that dead VMs stay dead, which is especially
important for KVM_BUG_ON() flows, which often guard more dangerous bugs.
- Re-pend GET_NESTED_STATE_PAGES if getting the pages fails, to fix a bug
where KVM would let userspace run a broken setup with stale vmcs12 pages.
- Fix a class of bugs where KVM would fail to fill kvm_run exit fields if
getting nested pages failed.
- Treat reserved entries in the memory attributes xarray as "no attributes",
to fix false positives when checking for mixed attributes.
- Fix memcg accounting for the memory attributes xarray (the xarray library
subtly requires the xarray to be configured for accounting upfront; the gfp
flags taken at runtime are used only rarely).
- Don't pre-reserve xarray entries when storing empty attributes, as storing
NULL must not require memory allocation (KVM and other subsystems heavily
rely on this behavior).
- Fix a memory leak and a cache maintenance issue related to doing intra-host
migration on an SEV guest.
----------------------------------------------------------------
Anthony Krowiak (1):
s390/vfio-ap: fix KVM GISC and page leak when queue removed from host config
Claudio Imbrenda (8):
KVM: s390: Fix dirty marking in adapter_indicators_set*()
KVM: s390: Fix compile warning for kvm_s390_update_cmma_dirty()
KVM: s390: Fix _gaccess_shadow_fault()
KVM: s390: Refactor dat_set_slot()
KVM: s390: Move all code into s390_kvm_mmu_prepare_memory_region()
KVM: s390: Add missing srcu in kvm_s390_set_irq_state()
KVM: s390: Fix potential races in dat skey functions
KVM: s390: Fix race in _destroy_pages_crste()
David Ballesteros (1):
KVM: Ensure memory attributes xarray nodes are accounted to the caller's memcg
Fuad Tabba (13):
KVM: arm64: vgic-its: Free the caches when GITS_BASER changes
Revert "KVM: arm64: vgic-its: Don't save collections the table cannot hold"
KVM: arm64: vgic-its: Skip unreachable devices instead of failing the save
KVM: arm64: selftests: Add ITS table save tests
KVM: arm64: Validate the SVE vector length in pkvm_vcpu_init_sve()
KVM: arm64: Do not clear VM-wide SVE feature on vCPU init failure
KVM: arm64: Key unpin_host_sve_state() on the state it unpins
KVM: arm64: Derive GUEST_HAS_SVE from the SVE feature bit at EL2
KVM: arm64: Transfer the hyp stack pages out of the host stage-2
KVM: arm64: Match hyp text by physical address in fix_host_ownership()
KVM: arm64: Move the private VA allocation cursor to __io_map_next
KVM: arm64: Check every private mapping is hyp-owned at pKVM init
KVM: arm64: Don't WARN on an unknown VM ioctl in protected mode
Jim Mattson (1):
KVM: x86/pmu: Move Intel PMU global MSRs to intel_is_valid_msr()
Karl Mehltretter (3):
KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
KVM: arm64: selftests: Test empty SMCCC filter range at base 0
KVM: arm64: Fix AArch32 DBGBXVR<n> handling
Lorenzo Stoakes (ARM) (2):
KVM: arm64: Fix spurious warning for benign stage 2 teardown race
KVM: arm64: nv: Fix null ptr deref on nested wp/unmap, teardown race
Marc Zyngier (2):
KVM: arm64: nv: Fix life cycle of the nested_mmus array
KVM: arm64: nv: Delay freeing of shadow S2 structures until VM destruction
Mark Brown (1):
KVM: arm64: Fix FGT mapping for HFGITR_EL2.nGCSEPP
Myeonghun Pak (1):
RISC-V: KVM: Synchronize hrtimer callback during teardown
Paolo Bonzini (4):
Merge tag 'kvm-s390-master-7.3-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD
Merge tag 'kvmarm-fixes-7.3-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
Merge tag 'kvm-riscv-fixes-7.3-1' of https://github.com/kvm-riscv/linux into HEAD
Merge tag 'kvm-x86-fixes-7.3-rc5' of https://github.com/kvm-x86/linux into HEAD
Sean Christopherson (6):
KVM: selftests: Use __GLIBC__, not _GNU_SOURCE, to detect actual glibc
KVM: Never clear KVM_REQ_VM_DEAD from a vCPU's requests
KVM: x86: Re-pend GET_NESTED_STATE_PAGES if getting said pages fails
KVM: x86: Fill kvm_run exit fields in common get_nested_state_pages() error paths
KVM: SEV: Free have_run_cpus during VM destruction even if VM is no longer SEV
KVM: SEV: Do cache maintenance on the source VM during intra-host migration
Sebastian Ott (1):
KVM: selftests: fix steal_time for arm64 with host page size > 4K
SeungJu Cheon (3):
RISC-V: KVM: Preserve firmware counter value across stop/start
RISC-V: KVM: Report snapshot write failure to the guest
RISC-V: KVM: Fix perf-backed counter accounting across stop and read
Steffen Eiden (2):
s390/uv: Fix loop condition in uv_find_secrets
s390/uv: Prevent potential out-of-bounds read
Tan Chi (1):
RISC-V: KVM: Fix HSM hart status error propagation
Xie Bo (3):
RISC-V: KVM: Serialize IMSIC attributes with vCPU migration
RISC-V: KVM: Release unused page after MMU invalidation
RISC-V: KVM: Propagate interrupted G-stage faults
Yicong Yang (1):
RISC-V: KVM: Fix the conversion between vsip and hvip
Zeng Chi (2):
KVM: Don't treat reserved xarray entries as having memory attributes
KVM: Don't pre-reserve xarray entries when storing empty/NULL attributes
Zongmin Zhou (2):
KVM: riscv: Fix NACL hfence entry update order
RISC-V: KVM: Fix sdata leak and stale snapshot_addr in snapshot_set_shmem
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_nested.h | 3 +-
arch/arm64/include/asm/kvm_pkvm.h | 3 +-
arch/arm64/kvm/arm.c | 10 +-
arch/arm64/kvm/emulate-nested.c | 2 +-
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 2 +
arch/arm64/kvm/hyp/include/nvhe/mm.h | 1 +
arch/arm64/kvm/hyp/nvhe/mem_protect.c | 20 +
arch/arm64/kvm/hyp/nvhe/mm.c | 79 +++-
arch/arm64/kvm/hyp/nvhe/pkvm.c | 29 +-
arch/arm64/kvm/hyp/nvhe/setup.c | 16 +-
arch/arm64/kvm/hypercalls.c | 3 +-
arch/arm64/kvm/mmu.c | 15 +-
arch/arm64/kvm/nested.c | 115 +++---
arch/arm64/kvm/sys_regs.c | 1 +
arch/arm64/kvm/vgic/vgic-its.c | 46 ++-
arch/riscv/include/asm/csr.h | 20 +-
arch/riscv/kvm/aia_imsic.c | 11 +-
arch/riscv/kvm/mmu.c | 10 +-
arch/riscv/kvm/nacl.c | 20 +-
arch/riscv/kvm/vcpu.c | 3 +-
arch/riscv/kvm/vcpu_exit.c | 2 +-
arch/riscv/kvm/vcpu_onereg.c | 8 +-
arch/riscv/kvm/vcpu_pmu.c | 41 +-
arch/riscv/kvm/vcpu_sbi_hsm.c | 4 +-
arch/riscv/kvm/vcpu_timer.c | 5 +-
arch/s390/kernel/uv.c | 8 +-
arch/s390/kvm/gmap/dat.c | 65 +--
arch/s390/kvm/gmap/dat.h | 10 +-
arch/s390/kvm/gmap/gmap.c | 6 +-
arch/s390/kvm/gmap/kvm_mmu.c | 91 ++---
arch/s390/kvm/gmap/kvm_mmu.h | 4 -
arch/s390/kvm/s390/gaccess.c | 13 +
arch/s390/kvm/s390/interrupt.c | 81 ++--
arch/s390/kvm/s390/s390.c | 3 +-
arch/s390/kvm/s390/s390.h | 2 +-
arch/x86/kvm/mmu/mmu.c | 2 +-
arch/x86/kvm/pmu.c | 8 -
arch/x86/kvm/svm/nested.c | 7 +-
arch/x86/kvm/svm/sev.c | 18 +-
arch/x86/kvm/vmx/nested.c | 15 +-
arch/x86/kvm/vmx/pmu_intel.c | 3 +
arch/x86/kvm/vmx/tdx.c | 2 +-
arch/x86/kvm/x86.c | 6 +-
drivers/s390/crypto/vfio_ap_ops.c | 18 +-
include/linux/kvm_host.h | 9 +-
tools/arch/riscv/include/asm/csr.h | 20 +-
tools/testing/selftests/kvm/Makefile.kvm | 1 +
tools/testing/selftests/kvm/arm64/smccc_filter.c | 4 +
tools/testing/selftests/kvm/arm64/vgic_its_save.c | 441 +++++++++++++++++++++
.../testing/selftests/kvm/hardware_disable_test.c | 6 +-
tools/testing/selftests/kvm/steal_time.c | 30 +-
virt/kvm/kvm_main.c | 35 +-
53 files changed, 1032 insertions(+), 347 deletions(-)
create mode 100644 tools/testing/selftests/kvm/arm64/vgic_its_save.c