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
This commit is contained in:
Lennart Poettering
2018-04-30 12:23:03 +02:00
parent 2ff04e5b7f
commit f2fe2865cd

View File

@@ -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;
}