diff options
author | Ard Biesheuvel <ardb@kernel.org> | 2021-01-06 10:34:53 +0000 |
---|---|---|
committer | Marc Zyngier <maz@kernel.org> | 2021-01-25 22:19:31 +0000 |
commit | a8e190cdae1bf8e9e490776b8179babc1962bb25 (patch) | |
tree | e98b87e0f127a6ab0e1f2c2230aae17a8bef7cfc /arch/arm64/kvm/hypercalls.c | |
parent | 67c6bb56b649590a3f59c2a92331aa4e83d4534c (diff) | |
download | linux-a8e190cdae1bf8e9e490776b8179babc1962bb25.tar.gz linux-a8e190cdae1bf8e9e490776b8179babc1962bb25.tar.bz2 linux-a8e190cdae1bf8e9e490776b8179babc1962bb25.zip |
KVM: arm64: Implement the TRNG hypervisor call
Provide a hypervisor implementation of the ARM architected TRNG firmware
interface described in ARM spec DEN0098. All function IDs are implemented,
including both 32-bit and 64-bit versions of the TRNG_RND service, which
is the centerpiece of the API.
The API is backed by the kernel's entropy pool only, to avoid guests
draining more precious direct entropy sources.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
[Andre: minor fixes, drop arch_get_random() usage]
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210106103453.152275-6-andre.przywara@arm.com
Diffstat (limited to 'arch/arm64/kvm/hypercalls.c')
-rw-r--r-- | arch/arm64/kvm/hypercalls.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c index 25ea4ecb6449..ead21b98b620 100644 --- a/arch/arm64/kvm/hypercalls.c +++ b/arch/arm64/kvm/hypercalls.c @@ -71,6 +71,12 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu) if (gpa != GPA_INVALID) val = gpa; break; + case ARM_SMCCC_TRNG_VERSION: + case ARM_SMCCC_TRNG_FEATURES: + case ARM_SMCCC_TRNG_GET_UUID: + case ARM_SMCCC_TRNG_RND32: + case ARM_SMCCC_TRNG_RND64: + return kvm_trng_call(vcpu); default: return kvm_psci_call(vcpu); } |