diff options
-rw-r--r-- | man/systemd-detect-virt.xml | 6 | ||||
-rw-r--r-- | src/basic/virt.c | 22 |
2 files changed, 14 insertions, 14 deletions
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml index dc10b4dd43..72ea35892f 100644 --- a/man/systemd-detect-virt.xml +++ b/man/systemd-detect-virt.xml @@ -96,7 +96,8 @@ <row> <entry><varname>kvm</varname></entry> - <entry>Linux KVM kernel virtual machine, from within QEMU</entry> + <entry>Linux KVM kernel virtual machine, with whatever software, except + Oracle Virtualbox</entry> </row> <row> @@ -116,7 +117,8 @@ <row> <entry><varname>oracle</varname></entry> - <entry>Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems)</entry> + <entry>Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems), + for legacy and KVM hypervisor</entry> </row> <row> diff --git a/src/basic/virt.c b/src/basic/virt.c index 0fbbdea602..830dc655e3 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -316,31 +316,29 @@ static int detect_vm_zvm(void) { /* Returns a short identifier for the various VM implementations */ int detect_vm(void) { static thread_local int cached_found = _VIRTUALIZATION_INVALID; - int r, cpuid; + int r, dmi; if (cached_found >= 0) return cached_found; /* We have to use the correct order here: * - * -> First try to detect qemu/kvm and return 'kvm'. - * -> Some virtualization technologies do use KVM hypervisor but are - * expected to be detected as something else. Virtualbox since - * version 5.0 is an example. So detect DMI next. - * -> Get infos from CPUID third. */ + * -> 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. */ - cpuid = detect_vm_cpuid(); - r = detect_vm_dmi(); - - if (r == VIRTUALIZATION_QEMU && cpuid == VIRTUALIZATION_KVM) - return cpuid; + dmi = detect_vm_dmi(); + if (dmi == VIRTUALIZATION_ORACLE) + return dmi; + r = detect_vm_cpuid(); if (r < 0) return r; if (r != VIRTUALIZATION_NONE) goto finish; - r = cpuid; + r = dmi; if (r < 0) return r; if (r != VIRTUALIZATION_NONE) |