• Oliver Upton's avatar
    KVM: arm64: Destroy mpidr_data for 'late' vCPU creation · ce5d2448
    Oliver Upton authored
    A particularly annoying userspace could create a vCPU after KVM has
    computed mpidr_data for the VM, either by racing against VGIC
    initialization or having a userspace irqchip.
    
    In any case, this means mpidr_data no longer fully describes the VM, and
    attempts to find the new vCPU with kvm_mpidr_to_vcpu() will fail. The
    fix is to discard mpidr_data altogether, as it is only a performance
    optimization and not required for correctness. In all likelihood KVM
    will recompute the mappings when KVM_RUN is called on the new vCPU.
    
    Note that reads of mpidr_data are not guarded by a lock; promote to RCU
    to cope with the possibility of mpidr_data being invalidated at runtime.
    
    Fixes: 54a8006d ("KVM: arm64: Fast-track kvm_mpidr_to_vcpu() when mpidr_data is available")
    Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240508071952.2035422-1-oliver.upton@linux.devSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
    ce5d2448
arm.c 64.1 KB