From 7b0acd5d3752492b8fb182c59976fd1a0ee61031 Mon Sep 17 00:00:00 2001 From: Mike Gilbert Date: Sat, 30 Dec 2017 12:48:20 -0500 Subject: [PATCH] basic: detect_vm_cpuid: fix hypervisor detection The __get_cpuid() function only calls __cpuid() if __get_cpuid_max() returns a value that is less than or equal to the leaf value. In QEMU/KVM, I found that the special hypervisor leaf value (0x40000000U) is always larger than the value retured by __get_cpuid_max(). Avoid this problem by calling the __cpuid() macro directly once we have checked the hypervisor bit from leaf 1. Fixes: d31b0033b7743393562a2e9d3c1e74afea981c13 --- src/basic/virt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/basic/virt.c b/src/basic/virt.c index 15dc860ad..21e11b698 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -79,8 +79,7 @@ static int detect_vm_cpuid(void) { unsigned j; /* There is a hypervisor, see what it is */ - if (__get_cpuid(0x40000000U, &eax, &ebx, &ecx, &edx) == 0) - return VIRTUALIZATION_NONE; + __cpuid(0x40000000U, eax, ebx, ecx, edx); sig.sig32[0] = ebx; sig.sig32[1] = ecx; -- 2.30.2