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