From: Lennart Poettering Date: Mon, 30 Apr 2018 10:23:03 +0000 (+0200) Subject: virt: if we detect Xen by DMI, trust that over CPUID X-Git-Tag: v239~316^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f2fe2865cd19cd4318b82d01b9b62d22b1697b3a;p=thirdparty%2Fsystemd.git virt: if we detect Xen by DMI, trust that over CPUID Apparently Xen sometimes lies about its identity when queried via CPUID. Let's hence prefer DMI tests for CPUID Fixes: #8844 --- diff --git a/src/basic/virt.c b/src/basic/virt.c index e5b7ec3206c..c1fd2f6d5cc 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -319,13 +319,16 @@ int detect_vm(void) { /* We have to use the correct order here: * - * -> First try to detect Oracle Virtualbox, even if it uses KVM. - * -> Second try to detect from cpuid, this will report KVM for - * whatever software is used even if info in dmi is overwritten. - * -> Third try to detect from dmi. */ + * → First, try to detect Oracle Virtualbox, even if it uses KVM, as well as Xen even if it cloaks as Microsoft + * Hyper-V. + * + * → Second, try to detect from CPUID, this will report KVM for whatever software is used even if info in DMI is + * overwritten. + * + * → Third, try to detect from DMI. */ dmi = detect_vm_dmi(); - if (dmi == VIRTUALIZATION_ORACLE) { + if (IN_SET(dmi, VIRTUALIZATION_ORACLE, VIRTUALIZATION_XEN)) { r = dmi; goto finish; }