• James Morse's avatar
    KVM: arm64: Set HCR_EL2.PTW to prevent AT taking synchronous exception · 71a7f8cb
    James Morse authored
    AT instructions do a translation table walk and return the result, or
    the fault in PAR_EL1. KVM uses these to find the IPA when the value is
    not provided by the CPU in HPFAR_EL1.
    
    If a translation table walk causes an external abort it is taken as an
    exception, even if it was due to an AT instruction. (DDI0487F.a's D5.2.11
    "Synchronous faults generated by address translation instructions")
    
    While we previously made KVM resilient to exceptions taken due to AT
    instructions, the device access causes mismatched attributes, and may
    occur speculatively. Prevent this, by forbidding a walk through memory
    described as device at stage2. Now such AT instructions will report a
    stage2 fault.
    
    Such a fault will cause KVM to restart the guest. If the AT instructions
    always walk the page tables, but guest execution uses the translation cached
    in the TLB, the guest can't make forward progress until the TLB entry is
    evicted. This isn't a problem, as since commit 5dcd0fdb ("KVM: arm64:
    Defer guest entry when an asynchronous exception is pending"), KVM will
    return to the host to process IRQs allowing the rest of the system to keep
    running.
    
    Cc: stable@vger.kernel.org # <v5.3: 5dcd0fdb ("KVM: arm64: Defer guest entry when an asynchronous exception is pending")
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    71a7f8cb
kvm_arm.h 11.3 KB