• Ard Biesheuvel's avatar
    arm64: mm: limit linear region to 51 bits for KVM in nVHE mode · 88053ec8
    Ard Biesheuvel authored
    KVM in nVHE mode divides up its VA space into two equal halves, and
    picks the half that does not conflict with the HYP ID map to map its
    linear region. This worked fine when the kernel's linear map itself was
    guaranteed to cover precisely as many bits of VA space, but this was
    changed by commit f4693c27 ("arm64: mm: extend linear region for
    52-bit VA configurations").
    
    The result is that, depending on the placement of the ID map, kernel-VA
    to hyp-VA translations may produce addresses that either conflict with
    other HYP mappings (including the ID map itself) or generate addresses
    outside of the 52-bit addressable range, neither of which is likely to
    lead to anything useful.
    
    Given that 52-bit capable cores are guaranteed to implement VHE, this
    only affects configurations such as pKVM where we opt into non-VHE mode
    even if the hardware is VHE capable. So just for these configurations,
    let's limit the kernel linear map to 51 bits and work around the
    problem.
    
    Fixes: f4693c27 ("arm64: mm: extend linear region for 52-bit VA configurations")
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20210826165613.60774-1-ardb@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    88053ec8
init.c 15.1 KB