Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 70 lines 1.7 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2 3// Check that nobody has tampered with KVM's UID 4 5#include <errno.h> 6#include <linux/arm-smccc.h> 7#include <asm/kvm.h> 8#include <kvm_util.h> 9 10#include "processor.h" 11 12/* 13 * Do NOT redefine these constants, or try to replace them with some 14 * "common" version. They are hardcoded here to detect any potential 15 * breakage happening in the rest of the kernel. 16 * 17 * KVM UID value: 28b46fb6-2ec5-11e9-a9ca-4b564d003a74 18 */ 19#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_0 0xb66fb428U 20#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1 0xe911c52eU 21#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 0x564bcaa9U 22#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_3 0x743a004dU 23 24static void guest_code(void) 25{ 26 struct arm_smccc_res res = {}; 27 28 do_smccc(ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID, 0, 0, 0, 0, 0, 0, 0, &res); 29 30 __GUEST_ASSERT(res.a0 == ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_0 && 31 res.a1 == ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1 && 32 res.a2 == ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 && 33 res.a3 == ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_3, 34 "Unexpected KVM-specific UID %lx %lx %lx %lx\n", res.a0, res.a1, res.a2, res.a3); 35 GUEST_DONE(); 36} 37 38int main (int argc, char *argv[]) 39{ 40 struct kvm_vcpu *vcpu; 41 struct kvm_vm *vm; 42 struct ucall uc; 43 bool guest_done = false; 44 45 vm = vm_create_with_one_vcpu(&vcpu, guest_code); 46 47 while (!guest_done) { 48 vcpu_run(vcpu); 49 50 switch (get_ucall(vcpu, &uc)) { 51 case UCALL_SYNC: 52 break; 53 case UCALL_DONE: 54 guest_done = true; 55 break; 56 case UCALL_ABORT: 57 REPORT_GUEST_ASSERT(uc); 58 break; 59 case UCALL_PRINTF: 60 printf("%s", uc.buffer); 61 break; 62 default: 63 TEST_FAIL("Unexpected guest exit"); 64 } 65 } 66 67 kvm_vm_free(vm); 68 69 return 0; 70}