summaryrefslogtreecommitdiff
path: root/src/basic/virt.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-04-30 12:23:03 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commitf8a025d087bb1e69391462bda8c7e0a0522b6e7f (patch)
tree0d84ca8593a8730868a1430d0bf0707aba88d81e /src/basic/virt.c
parente6042b412479e96ca6ead97cc985c1b88cb234a2 (diff)
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
Diffstat (limited to 'src/basic/virt.c')
-rw-r--r--src/basic/virt.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/basic/virt.c b/src/basic/virt.c
index f0a8e5fa2..dfa55c710 100644
--- a/src/basic/virt.c
+++ b/src/basic/virt.c
@@ -320,13 +320,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;
}