Message ID | 20210802123830.2195174-3-maz@kernel.org |
---|---|
State | Accepted |
Commit | 47e6223c841e029bfc23c3ce594dac5525cebaf8 |
Headers | show |
Series | None | expand |
On Mon, Aug 02, 2021 at 01:38:30PM +0100, Marc Zyngier wrote: > Booting a KVM host in protected mode with kmemleak quickly results > in a pretty bad crash, as kmemleak doesn't know that the HYP sections > have been taken away. This is specially true for the BSS section, > which is part of the kernel BSS section and registered at boot time > by kmemleak itself. > > Unregister the HYP part of the BSS before making that section > HYP-private. The rest of the HYP-specific data is obtained via > the page allocator or lives in other sections, none of which is > subjected to kmemleak. > > Fixes: 90134ac9cabb ("KVM: arm64: Protect the .hyp sections from the host") > Reviewed-by: Quentin Perret <qperret@google.com> > Signed-off-by: Marc Zyngier <maz@kernel.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: stable@vger.kernel.org # 5.13 Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index e9a2b8f27792..52242f32c4be 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -15,6 +15,7 @@ #include <linux/fs.h> #include <linux/mman.h> #include <linux/sched.h> +#include <linux/kmemleak.h> #include <linux/kvm.h> #include <linux/kvm_irqfd.h> #include <linux/irqbypass.h> @@ -1982,6 +1983,12 @@ static int finalize_hyp_mode(void) if (ret) return ret; + /* + * Exclude HYP BSS from kmemleak so that it doesn't get peeked + * at, which would end badly once the section is inaccessible. + * None of other sections should ever be introspected. + */ + kmemleak_free_part(__hyp_bss_start, __hyp_bss_end - __hyp_bss_start); ret = pkvm_mark_hyp_section(__hyp_bss); if (ret) return ret;