• Jintack Lim's avatar
    KVM: arm64: Access CNTHCTL_EL2 bit fields correctly on VHE systems · 488f94d7
    Jintack Lim authored
    Current KVM world switch code is unintentionally setting wrong bits to
    CNTHCTL_EL2 when E2H == 1, which may allow guest OS to access physical
    timer.  Bit positions of CNTHCTL_EL2 are changing depending on
    HCR_EL2.E2H bit.  EL1PCEN and EL1PCTEN are 1st and 0th bits when E2H is
    not set, but they are 11th and 10th bits respectively when E2H is set.
    
    In fact, on VHE we only need to set those bits once, not for every world
    switch. This is because the host kernel runs in EL2 with HCR_EL2.TGE ==
    1, which makes those bits have no effect for the host kernel execution.
    So we just set those bits once for guests, and that's it.
    Signed-off-by: default avatarJintack Lim <jintack@cs.columbia.edu>
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    488f94d7
virt.h 2.71 KB