Commit | Line | Data |
---|---|---|
7a338472 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
783e9e51 PB |
2 | /* |
3 | * KVM_SET_SREGS tests | |
4 | * | |
5 | * Copyright (C) 2018, Google LLC. | |
6 | * | |
783e9e51 PB |
7 | * This is a regression test for the bug fixed by the following commit: |
8 | * d3802286fa0f ("kvm: x86: Disallow illegal IA32_APIC_BASE MSR values") | |
9 | * | |
10 | * That bug allowed a user-mode program that called the KVM_SET_SREGS | |
11 | * ioctl to put a VCPU's local APIC into an invalid state. | |
783e9e51 PB |
12 | */ |
13 | #define _GNU_SOURCE /* for program_invocation_short_name */ | |
14 | #include <fcntl.h> | |
15 | #include <stdio.h> | |
16 | #include <stdlib.h> | |
17 | #include <string.h> | |
18 | #include <sys/ioctl.h> | |
19 | ||
20 | #include "test_util.h" | |
21 | ||
22 | #include "kvm_util.h" | |
cc68765d | 23 | #include "processor.h" |
783e9e51 PB |
24 | |
25 | #define VCPU_ID 5 | |
26 | ||
27 | int main(int argc, char *argv[]) | |
28 | { | |
29 | struct kvm_sregs sregs; | |
30 | struct kvm_vm *vm; | |
31 | int rc; | |
32 | ||
33 | /* Tell stdout not to buffer its content */ | |
34 | setbuf(stdout, NULL); | |
35 | ||
36 | /* Create VM */ | |
aee41be5 | 37 | vm = vm_create_default(VCPU_ID, 0, NULL); |
783e9e51 PB |
38 | |
39 | vcpu_sregs_get(vm, VCPU_ID, &sregs); | |
40 | sregs.apic_base = 1 << 10; | |
41 | rc = _vcpu_sregs_set(vm, VCPU_ID, &sregs); | |
42 | TEST_ASSERT(rc, "Set IA32_APIC_BASE to %llx (invalid)", | |
43 | sregs.apic_base); | |
44 | sregs.apic_base = 1 << 11; | |
45 | rc = _vcpu_sregs_set(vm, VCPU_ID, &sregs); | |
46 | TEST_ASSERT(!rc, "Couldn't set IA32_APIC_BASE to %llx (valid)", | |
47 | sregs.apic_base); | |
48 | ||
49 | kvm_vm_free(vm); | |
50 | ||
51 | return 0; | |
52 | } |