aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmit Daniel Kachhap <amit.kachhap@arm.com>2019-06-07 12:26:26 +0100
committerWill Deacon <will@kernel.org>2019-11-22 17:48:01 +0000
commit254cb189b31e326bbd6f0cf30e9a95c24231c15b (patch)
treee56a5f8025cff158aa6c9c24912322200381fbd8
parent66b24a334dacdeb431cc36ddd23811252623a5a2 (diff)
downloadkvmtool-254cb189b31e326bbd6f0cf30e9a95c24231c15b.tar.gz
KVM: arm/arm64: Add a vcpu feature for pointer authentication
This patch adds a runtime capabality for KVM tool to enable Arm64 8.3 Pointer Authentication in guest kernel. Two vcpu features KVM_ARM_VCPU_PTRAUTH_[ADDRESS/GENERIC] are supplied together to enable Pointer Authentication in KVM guest after checking the capability. Reviewed-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Amit Daniel Kachhap <amit.kachhap@arm.com> Signed-off-by: Dave Martin <Dave.Martin@arm.com> [merge new kernel heaers] Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r--arm/aarch32/include/kvm/kvm-cpu-arch.h2
-rw-r--r--arm/aarch64/include/kvm/kvm-cpu-arch.h3
-rw-r--r--arm/kvm-cpu.c5
3 files changed, 10 insertions, 0 deletions
diff --git a/arm/aarch32/include/kvm/kvm-cpu-arch.h b/arm/aarch32/include/kvm/kvm-cpu-arch.h
index d28ea676..3ec6f03a 100644
--- a/arm/aarch32/include/kvm/kvm-cpu-arch.h
+++ b/arm/aarch32/include/kvm/kvm-cpu-arch.h
@@ -13,4 +13,6 @@
#define ARM_CPU_ID 0, 0, 0
#define ARM_CPU_ID_MPIDR 5
+#define ARM_VCPU_PTRAUTH_FEATURE 0
+
#endif /* KVM__KVM_CPU_ARCH_H */
diff --git a/arm/aarch64/include/kvm/kvm-cpu-arch.h b/arm/aarch64/include/kvm/kvm-cpu-arch.h
index a9d85633..9fa99fbc 100644
--- a/arm/aarch64/include/kvm/kvm-cpu-arch.h
+++ b/arm/aarch64/include/kvm/kvm-cpu-arch.h
@@ -17,4 +17,7 @@
#define ARM_CPU_CTRL 3, 0, 1, 0
#define ARM_CPU_CTRL_SCTLR_EL1 0
+#define ARM_VCPU_PTRAUTH_FEATURE ((1UL << KVM_ARM_VCPU_PTRAUTH_ADDRESS) \
+ | (1UL << KVM_ARM_VCPU_PTRAUTH_GENERIC))
+
#endif /* KVM__KVM_CPU_ARCH_H */
diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
index 77802512..fff8494e 100644
--- a/arm/kvm-cpu.c
+++ b/arm/kvm-cpu.c
@@ -68,6 +68,11 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);
}
+ /* Enable pointer authentication if available */
+ if (kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
+ kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC))
+ vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
+
/*
* If the preferred target ioctl is successful then
* use preferred target else try each and every target type