KVM: arm64: Properly return allocated EL2 VA from hyp_alloc_private_va_range()
authorMarc Zyngier <maz@kernel.org>
Mon, 28 Aug 2023 14:46:49 +0000 (15:46 +0100)
committerMarc Zyngier <maz@kernel.org>
Tue, 12 Sep 2023 11:58:25 +0000 (12:58 +0100)
Marek reports that his RPi4 spits out a warning at boot time,
right at the point where the GICv2 virtual CPU interface gets
mapped.

Upon investigation, it seems that we never return the allocated
VA and use whatever was on the stack at this point. Yes, this
is good stuff, and Marek was pretty lucky that he ended-up with
a VA that intersected with something that was already mapped.

On my setup, this random value is plausible enough for the mapping
to take place. Who knows what happens...

Fixes: f156a7d13fc3 ("KVM: arm64: Remove size-order align in the nVHE hyp private VA range")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/79b0ad6e-0c2a-f777-d504-e40e8123d81d@samsung.com
Link: https://lore.kernel.org/r/20230828153121.4179627-1-maz@kernel.org
arch/arm64/kvm/mmu.c

index 587a104..482280f 100644 (file)
@@ -652,6 +652,9 @@ int hyp_alloc_private_va_range(size_t size, unsigned long *haddr)
 
        mutex_unlock(&kvm_hyp_pgd_mutex);
 
+       if (!ret)
+               *haddr = base;
+
        return ret;
 }