• Christoffer Dall's avatar
    KVM: arm/arm64: Fix unintended stage 2 PMD mappings · 6794ad54
    Christoffer Dall authored
    There are two things we need to take care of when we create block
    mappings in the stage 2 page tables:
    
      (1) The alignment within a PMD between the host address range and the
      guest IPA range must be the same, since otherwise we end up mapping
      pages with the wrong offset.
    
      (2) The head and tail of a memory slot may not cover a full block
      size, and we have to take care to not map those with block
      descriptors, since we could expose memory to the guest that the host
      did not intend to expose.
    
    So far, we have been taking care of (1), but not (2), and our commentary
    describing (1) was somewhat confusing.
    
    This commit attempts to factor out the checks of both into a common
    function, and if we don't pass the check, we won't attempt any PMD
    mappings for neither hugetlbfs nor THP.
    
    Note that we used to only check the alignment for THP, not for
    hugetlbfs, but as far as I can tell the check needs to be applied to
    both scenarios.
    
    Cc: Ralph Palutke <ralph.palutke@fau.de>
    Cc: Lukas Braun <koomi@moshbit.net>
    Reported-by: default avatarLukas Braun <koomi@moshbit.net>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    6794ad54
mmu.c 62.4 KB