Re: [PATCH v2] kvm: arm: Fix handling of stage2 huge mappings

From: Marc Zyngier
Date: Wed Mar 20 2019 - 13:32:05 EST


On Wed, 20 Mar 2019 14:57:19 +0000
Suzuki K Poulose <suzuki.poulose@xxxxxxx> wrote:

> We rely on the mmu_notifier call backs to handle the split/merge
> of huge pages and thus we are guaranteed that, while creating a
> block mapping, either the entire block is unmapped at stage2 or it
> is missing permission.
>
> However, we miss a case where the block mapping is split for dirty
> logging case and then could later be made block mapping, if we cancel the
> dirty logging. This not only creates inconsistent TLB entries for
> the pages in the the block, but also leakes the table pages for
> PMD level.
>
> Handle this corner case for the huge mappings at stage2 by
> unmapping the non-huge mapping for the block. This could potentially
> release the upper level table. So we need to restart the table walk
> once we unmap the range.
>
> Fixes : ad361f093c1e31d ("KVM: ARM: Support hugetlbfs backed huge pages")
> Reported-by: Zheng Xiang <zhengxiang9@xxxxxxxxxx>
> Cc: Zheng Xiang <zhengxiang9@xxxxxxxxxx>
> Cc: Zhenghui Yu <yuzenghui@xxxxxxxxxx>
^
> Cc: Marc Zyngier <marc.zyngier@xxxxxxx>
> Cc: Christoffer Dall <christoffer.dall@xxxxxxx>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx>

Applied, with Zenghui's name fixed.

Thanks,

M.
--
Without deviation from the norm, progress is not possible.