summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorMike Larkin <mlarkin@cvs.openbsd.org>2017-03-21 02:30:34 +0000
committerMike Larkin <mlarkin@cvs.openbsd.org>2017-03-21 02:30:34 +0000
commitbe94ab985865e37709fe85f94638284de15d2cf4 (patch)
tree3e806f20d235424d1a04e84bd1f99efdc0458689 /sys/arch
parenta2c2500c2f25594898f767edbeed4086262d1a4e (diff)
CPUID feature 0x80000000 emulation fell through to 0x80000001, which
resulted in wrong cpu information being passed to the guest. Specifically this breaks Linux guests as with the fallthrough, CPUID_LONG was cleared, and Linux thought it was runinng on a machine incapable of 64-bit mode. OpenBSD/NetBSD guests don't check this flag and thus weren't affected.
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/amd64/amd64/vmm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/arch/amd64/amd64/vmm.c b/sys/arch/amd64/amd64/vmm.c
index 7c70c940401..2ae26dbc915 100644
--- a/sys/arch/amd64/amd64/vmm.c
+++ b/sys/arch/amd64/amd64/vmm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vmm.c,v 1.120 2017/03/19 03:42:38 mlarkin Exp $ */
+/* $OpenBSD: vmm.c,v 1.121 2017/03/21 02:30:33 mlarkin Exp $ */
/*
* Copyright (c) 2014 Mike Larkin <mlarkin@openbsd.org>
*
@@ -4449,6 +4449,7 @@ vmm_handle_cpuid(struct vcpu *vcpu)
*rbx = 0;
*rcx = 0;
*rdx = 0;
+ break;
case 0x80000001: /* Extended function info */
*rax = curcpu()->ci_efeature_eax;
*rbx = 0; /* Reserved */