]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: Fix Trace Buffer trap polarity for protected VMs
authorFuad Tabba <tabba@google.com>
Thu, 11 Dec 2025 10:47:02 +0000 (10:47 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 15 Jan 2026 15:42:18 +0000 (15:42 +0000)
The E2TB bits in MDCR_EL2 control trapping of Trace Buffer system
register accesses. These accesses are trapped to EL2 when the bits are
clear.

The trap initialization logic for protected VMs in pvm_init_traps_mdcr()
had the polarity inverted. When a guest did not support the Trace Buffer
feature, the code was setting E2TB. This incorrectly disabled the trap,
potentially allowing a protected guest to access registers for a feature
it was not given.

Fix this by inverting the operation.

Fixes: f50758260bff ("KVM: arm64: Group setting traps for protected VMs by control register")
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Fuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20251211104710.151771-3-tabba@google.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/nvhe/pkvm.c

index f0bfab99c334151b9ba3c71962d1243cfe3d9e40..6bd53964620419bb11ed02d3fcca995fb40ba8d8 100644 (file)
@@ -118,7 +118,7 @@ static void pvm_init_traps_mdcr(struct kvm_vcpu *vcpu)
                val |= MDCR_EL2_TTRF;
 
        if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, TraceBuffer, IMP))
-               val |= MDCR_EL2_E2TB_MASK;
+               val &= ~MDCR_EL2_E2TB_MASK;
 
        /* Trap Debug Communications Channel registers */
        if (!kvm_has_feat(kvm, ID_AA64MMFR0_EL1, FGT, IMP))