[PATCH 0/4] KVM: x86: Document and enforce APIC base memory hole

From: Tim Wiederhake

Date: Mon Jul 06 2026 - 06:06:53 EST


When an in-kernel irqchip is enabled on x86, KVM installs a private
memory slot at the default APIC base address (0xfee00000) during vcpu
creation. If user space has already mapped a memory region covering
that address, vcpu creation fails with -EEXIST. The same happens in
reverse: mapping memory over the APIC base after vcpu creation also
fails with -EEXIST.

None of this is documented, and the error is reported far from where
the actual conflict is introduced. A VMM developer hitting this has
to trace through KVM internals to understand what went wrong.

This series documents the two undocumented constraints (irqchip before
vcpu, APIC base memory hole) and adds early checks so the error is
reported at the ioctl that actually violates the constraint.

Patches 1-2 are documentation only. Patches 3-4 add early validation
that turns a confusing -EEXIST at vcpu creation into an explicit error
at the point where the conflict is introduced.

Tested with a reproducer that exercises all six orderings of
{irqchip, memory, vcpu} creation against both overlapping and
non-overlapping memory regions.

Tim Wiederhake (4):
KVM: x86: Document that KVM_CREATE_IRQCHIP must precede vcpu creation
KVM: x86: Document APIC base address constraint for in-kernel irqchip
KVM: x86: Reject KVM_CREATE_IRQCHIP if APIC base is already mapped
KVM: x86: Reject user memory regions covering the APIC base

Documentation/virt/kvm/api.rst | 8 +++++++-
arch/x86/kvm/x86.c | 11 +++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)

--
2.52.0