File Index
Files and directories
Sign in
FILE

kvm-uuid.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/kvm/arm64/kvm-uuid.c C
 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}
~/ Read-only file preview.