summaryrefslogtreecommitdiffstats
path: root/arch/arm/kvm/arm.c
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2016-10-20 11:17:21 +0200
committerMarc Zyngier <marc.zyngier@arm.com>2016-10-21 18:26:24 +0200
commitc8ea0395ff3bd5f0fd3c3aa69b383b2d1231e9fd (patch)
treef64affb3f4bdcf8740d4bc65c7c1ea1239002a35 /arch/arm/kvm/arm.c
parentarm64: KVM: Take S1 walks into account when determining S2 write faults (diff)
downloadlinux-c8ea0395ff3bd5f0fd3c3aa69b383b2d1231e9fd.tar.xz
linux-c8ea0395ff3bd5f0fd3c3aa69b383b2d1231e9fd.zip
arm/arm64: KVM: Map the BSS at HYP
When used with a compiler that doesn't implement "asm goto" (such as the AArch64 port of GCC 4.8), jump labels generate a memory access to find out about the value of the key (instead of just patching the code). The key itself is likely to be stored in the BSS. This is perfectly fine, except that we don't map the BSS at HYP, leading to an exploding kernel at the first access. The obvious fix is simply to map the BSS there (which should have been done a long while ago, but hey...). Reported-by: Eric Auger <eric.auger@redhat.com> Tested-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm/kvm/arm.c')
-rw-r--r--arch/arm/kvm/arm.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 03e9273f1876..08bb84f2ad58 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -1312,6 +1312,13 @@ static int init_hyp_mode(void)
goto out_err;
}
+ err = create_hyp_mappings(kvm_ksym_ref(__bss_start),
+ kvm_ksym_ref(__bss_stop), PAGE_HYP_RO);
+ if (err) {
+ kvm_err("Cannot map bss section\n");
+ goto out_err;
+ }
+
/*
* Map the Hyp stack pages
*/