From 34d5e2a28233c69f4e60320b9f024dee67b5ba10 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 13 Apr 2021 11:06:14 +0100 Subject: [PATCH] Add all patches since 1.20 in preparation for 1.21 release. --- 0001-Fix-virt-what-cpuid-helper.patch | 118 +++++ ...Nutanix-Acropolis-Hypervisor-AHV-RHB.patch | 405 ++++++++++++++++++ 0003-helper-Fix-KVM-signature.patch | 38 ++ ...tection-of-MS-Surfacebook-2-as-a-vir.patch | 27 ++ 0005-docker-Check-for-.dockerenv-too.patch | 46 ++ ...ker-Lookup-from-proc-self-cgroup-too.patch | 61 +++ 0007-Add-podman-support.patch | 232 ++++++++++ ...Simplify-and-fix-invocation-of-cpuid.patch | 60 +++ virt-what.spec | 26 +- 9 files changed, 1008 insertions(+), 5 deletions(-) create mode 100644 0001-Fix-virt-what-cpuid-helper.patch create mode 100644 0002-Add-support-for-Nutanix-Acropolis-Hypervisor-AHV-RHB.patch create mode 100644 0003-helper-Fix-KVM-signature.patch create mode 100644 0004-Fix-incorrect-detection-of-MS-Surfacebook-2-as-a-vir.patch create mode 100644 0005-docker-Check-for-.dockerenv-too.patch create mode 100644 0006-docker-Lookup-from-proc-self-cgroup-too.patch create mode 100644 0007-Add-podman-support.patch create mode 100644 0008-Simplify-and-fix-invocation-of-cpuid.patch diff --git a/0001-Fix-virt-what-cpuid-helper.patch b/0001-Fix-virt-what-cpuid-helper.patch new file mode 100644 index 0000000..feeb0ab --- /dev/null +++ b/0001-Fix-virt-what-cpuid-helper.patch @@ -0,0 +1,118 @@ +From 0a0d9fa7c85c5474870cae37832d28ccd899d4ee Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 4 Oct 2019 15:57:42 +0300 +Subject: [PATCH 1/8] Fix virt-what-cpuid-helper. + +The value returned in %eax is the max_entry (eg. 0x40000000 +if there are no further leafs). However it is not reliable. +In addition if there are multiple leafs we should probably +only print the highest one. + +Also use uint32_t instead of unsigned int. + +Thanks: Paolo Bonzini. +--- + virt-what-cpuid-helper.c | 67 ++++++++++++++++++++++++++++------------ + 1 file changed, 48 insertions(+), 19 deletions(-) + +diff --git a/virt-what-cpuid-helper.c b/virt-what-cpuid-helper.c +index 7812545..0cd4a6f 100644 +--- a/virt-what-cpuid-helper.c ++++ b/virt-what-cpuid-helper.c +@@ -1,5 +1,5 @@ + /* virt-what-cpuid-helper: Are we running inside KVM or Xen HVM? +- * Copyright (C) 2008 Red Hat Inc. ++ * Copyright (C) 2008-2019 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by +@@ -21,14 +21,35 @@ + */ + + #include ++#include ++#include + #include + + #if defined(__i386__) || defined(__x86_64__) + +-static unsigned int +-cpuid (unsigned int eax, char *sig) ++/* Known x86 hypervisor signatures. Note that if you add a new test ++ * to virt-what.in you may need to update this list. The signature is ++ * always 12 bytes except in the case of KVM. ++ */ ++static int ++known_signature (char *sig) + { +- unsigned int *sig32 = (unsigned int *) sig; ++ return ++ strcmp (sig, "bhyve bhyve ") == 0 || ++ strcmp (sig, "KVMKVMKVM") == 0 || ++ strcmp (sig, "LKVMLKVMLKVM") == 0 || ++ strcmp (sig, "Microsoft Hv") == 0 || ++ strcmp (sig, "OpenBSDVMM58") == 0 || ++ strcmp (sig, "TCGTCGTCGTCG") == 0 || ++ strcmp (sig, "VMwareVMware") == 0 || ++ strcmp (sig, "XenVMMXenVMM") == 0 || ++ 0; ++} ++ ++static uint32_t ++cpuid (uint32_t eax, char *sig) ++{ ++ uint32_t *sig32 = (uint32_t *) sig; + + asm volatile ( + "xchgl %%ebx,%1; xor %%ebx,%%ebx; cpuid; xchgl %%ebx,%1" +@@ -43,24 +64,32 @@ static void + cpu_sig (void) + { + char sig[13]; +- unsigned int base = 0x40000000, leaf = base; +- unsigned int max_entries; ++ const uint32_t base = 0x40000000; ++ uint32_t leaf; + +- memset (sig, 0, sizeof sig); +- max_entries = cpuid (leaf, sig); +- puts (sig); +- +- /* Most hypervisors only have information in leaf 0x40000000, but +- * upstream Xen contains further leaf entries (in particular when +- * used with Viridian [HyperV] extensions). CPUID is supposed to +- * return the maximum leaf offset in %eax, so that's what we use, +- * but only if it looks sensible. ++ /* Most hypervisors only have information in leaf 0x40000000. ++ * ++ * Some hypervisors have "Viridian [HyperV] extensions", and those ++ * must appear in slot 0x40000000, but they will also have the true ++ * hypervisor in a higher slot. ++ * ++ * CPUID is supposed to return the maximum leaf offset in %eax, but ++ * this is not reliable. Instead we check the returned signatures ++ * against a known list (the others will be empty or garbage) and ++ * only print the ones we know about. This is OK because if we add ++ * a new test in virt-what we can update the list. ++ * ++ * By searching backwards we only print the highest entry, thus ++ * ignoring Viridian for Xen (and Nutanix). If we ever encounter a ++ * hypervisor that has more than 2 entries we may need to revisit ++ * this. + */ +- if (max_entries > 3 && max_entries < 0x10000) { +- for (leaf = base + 0x100; leaf <= base + max_entries; leaf += 0x100) { +- memset (sig, 0, sizeof sig); +- cpuid (leaf, sig); ++ for (leaf = base + 0xff00; leaf >= base; leaf -= 0x100) { ++ memset (sig, 0, sizeof sig); ++ cpuid (leaf, sig); ++ if (known_signature (sig)) { + puts (sig); ++ break; + } + } + } +-- +2.29.0.rc2 + diff --git a/0002-Add-support-for-Nutanix-Acropolis-Hypervisor-AHV-RHB.patch b/0002-Add-support-for-Nutanix-Acropolis-Hypervisor-AHV-RHB.patch new file mode 100644 index 0000000..470df9a --- /dev/null +++ b/0002-Add-support-for-Nutanix-Acropolis-Hypervisor-AHV-RHB.patch @@ -0,0 +1,405 @@ +From f317e788dd7c2a35c2ae0f64fa50ab720382ebf5 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 4 Oct 2019 16:25:55 +0300 +Subject: [PATCH 2/8] Add support for Nutanix Acropolis Hypervisor (AHV) + (RHBZ#1756381). + +Thanks: Cristian Seres for providing access to a guest. +--- + configure.ac | 2 + + tests/nutanix-ahv/Makefile.am | 28 ++++ + tests/nutanix-ahv/proc/cpuinfo | 27 ++++ + tests/nutanix-ahv/proc/self/status | 55 ++++++++ + tests/nutanix-ahv/sbin/dmidecode | 123 ++++++++++++++++++ + tests/nutanix-ahv/sbin/uname | 2 + + tests/nutanix-ahv/sbin/virt-what-cpuid-helper | 2 + + tests/nutanix-ahv/test.sh | 32 +++++ + virt-what.in | 10 +- + virt-what.pod | 6 + + 10 files changed, 286 insertions(+), 1 deletion(-) + create mode 100644 tests/nutanix-ahv/Makefile.am + create mode 100644 tests/nutanix-ahv/proc/cpuinfo + create mode 100644 tests/nutanix-ahv/proc/self/status + create mode 100755 tests/nutanix-ahv/sbin/dmidecode + create mode 100755 tests/nutanix-ahv/sbin/uname + create mode 100755 tests/nutanix-ahv/sbin/virt-what-cpuid-helper + create mode 100755 tests/nutanix-ahv/test.sh + +diff --git a/configure.ac b/configure.ac +index c45f469..58b3d77 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -51,6 +51,7 @@ tests="\ + lkvm-arm \ + lx86 \ + lxc \ ++ nutanix-ahv \ + parallels-desktop \ + ppc64-baremetal \ + ppc64-kvm \ +@@ -93,6 +94,7 @@ AC_CONFIG_FILES([Makefile + tests/lkvm-arm/Makefile + tests/lx86/Makefile + tests/lxc/Makefile ++ tests/nutanix-ahv/Makefile + tests/parallels-desktop/Makefile + tests/ppc64-baremetal/Makefile + tests/ppc64-kvm/Makefile +diff --git a/tests/nutanix-ahv/Makefile.am b/tests/nutanix-ahv/Makefile.am +new file mode 100644 +index 0000000..b748df8 +--- /dev/null ++++ b/tests/nutanix-ahv/Makefile.am +@@ -0,0 +1,28 @@ ++# Makefile for virt-what ++# Copyright (C) 2008-2011 Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++CLEANFILES = *~ ++ ++TESTS = test.sh ++ ++EXTRA_DIST = \ ++ test.sh \ ++ proc/cpuinfo \ ++ proc/self/status \ ++ sbin/dmidecode \ ++ sbin/uname \ ++ sbin/virt-what-cpuid-helper +diff --git a/tests/nutanix-ahv/proc/cpuinfo b/tests/nutanix-ahv/proc/cpuinfo +new file mode 100644 +index 0000000..d7a1f68 +--- /dev/null ++++ b/tests/nutanix-ahv/proc/cpuinfo +@@ -0,0 +1,27 @@ ++processor : 0 ++vendor_id : GenuineIntel ++cpu family : 15 ++model : 6 ++model name : Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz ++stepping : 1 ++microcode : 0x1 ++cpu MHz : 2199.998 ++cache size : 16384 KB ++physical id : 0 ++siblings : 1 ++core id : 0 ++cpu cores : 1 ++apicid : 0 ++initial apicid : 0 ++fpu : yes ++fpu_exception : yes ++cpuid level : 13 ++wp : yes ++flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat md_clear ++bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs ++bogomips : 4399.99 ++clflush size : 64 ++cache_alignment : 128 ++address sizes : 46 bits physical, 48 bits virtual ++power management: ++ +diff --git a/tests/nutanix-ahv/proc/self/status b/tests/nutanix-ahv/proc/self/status +new file mode 100644 +index 0000000..7b4eed0 +--- /dev/null ++++ b/tests/nutanix-ahv/proc/self/status +@@ -0,0 +1,55 @@ ++Name: cat ++Umask: 0022 ++State: R (running) ++Tgid: 18508 ++Ngid: 0 ++Pid: 18508 ++PPid: 18506 ++TracerPid: 0 ++Uid: 0 0 0 0 ++Gid: 0 0 0 0 ++FDSize: 64 ++Groups: 0 ++NStgid: 18508 ++NSpid: 18508 ++NSpgid: 18506 ++NSsid: 1945 ++VmPeak: 5392 kB ++VmSize: 5392 kB ++VmLck: 0 kB ++VmPin: 0 kB ++VmHWM: 760 kB ++VmRSS: 760 kB ++RssAnon: 68 kB ++RssFile: 692 kB ++RssShmem: 0 kB ++VmData: 312 kB ++VmStk: 132 kB ++VmExe: 28 kB ++VmLib: 1456 kB ++VmPTE: 48 kB ++VmSwap: 0 kB ++HugetlbPages: 0 kB ++CoreDumping: 0 ++THP_enabled: 1 ++Threads: 1 ++SigQ: 3/7359 ++SigPnd: 0000000000000000 ++ShdPnd: 0000000000000000 ++SigBlk: 0000000000000000 ++SigIgn: 0000000000000000 ++SigCgt: 0000000000000000 ++CapInh: 0000000000000000 ++CapPrm: 0000003fffffffff ++CapEff: 0000003fffffffff ++CapBnd: 0000003fffffffff ++CapAmb: 0000000000000000 ++NoNewPrivs: 0 ++Seccomp: 0 ++Speculation_Store_Bypass: thread vulnerable ++Cpus_allowed: ffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff ++Cpus_allowed_list: 0-239 ++Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 ++Mems_allowed_list: 0 ++voluntary_ctxt_switches: 0 ++nonvoluntary_ctxt_switches: 2 +diff --git a/tests/nutanix-ahv/sbin/dmidecode b/tests/nutanix-ahv/sbin/dmidecode +new file mode 100755 +index 0000000..3774819 +--- /dev/null ++++ b/tests/nutanix-ahv/sbin/dmidecode +@@ -0,0 +1,123 @@ ++#!/bin/sh - ++cat <<'EOF' ++i# dmidecode 3.2 ++Getting SMBIOS data from sysfs. ++SMBIOS 2.8 present. ++9 structures occupying 486 bytes. ++Table at 0x000F73C0. ++ ++Handle 0x0000, DMI type 0, 24 bytes ++BIOS Information ++ Vendor: SeaBIOS ++ Version: 1.9.1-5.el6 ++ Release Date: 04/01/2014 ++ Address: 0xE8000 ++ Runtime Size: 96 kB ++ ROM Size: 64 kB ++ Characteristics: ++ BIOS characteristics not supported ++ Targeted content distribution is supported ++ BIOS Revision: 0.0 ++ ++Handle 0x0100, DMI type 1, 27 bytes ++System Information ++ Manufacturer: Nutanix ++ Product Name: AHV ++ Version: RHEL 7.3.0 PC (i440FX + PIIX, 1996) ++ Serial Number: B913C223-EEDE-4DFC-BB43-BE1495F4388D ++ UUID: b913c223-eede-4dfc-bb43-be1495f4388d ++ Wake-up Type: Power Switch ++ SKU Number: Not Specified ++ Family: Red Hat Enterprise Linux ++ ++Handle 0x0300, DMI type 3, 21 bytes ++Chassis Information ++ Manufacturer: Red Hat ++ Type: Other ++ Lock: Not Present ++ Version: RHEL 7.3.0 PC (i440FX + PIIX, 1996) ++ Serial Number: Not Specified ++ Asset Tag: Not Specified ++ Boot-up State: Safe ++ Power Supply State: Safe ++ Thermal State: Safe ++ Security Status: Unknown ++ OEM Information: 0x00000000 ++ Height: Unspecified ++ Number Of Power Cords: Unspecified ++ Contained Elements: 0 ++ ++Handle 0x0400, DMI type 4, 42 bytes ++Processor Information ++ Socket Designation: CPU 0 ++ Type: Central Processor ++ Family: Other ++ Manufacturer: Red Hat ++ ID: 61 0F 00 00 FF FB 8B 0F ++ Version: RHEL 7.3.0 PC (i440FX + PIIX, 1996) ++ Voltage: Unknown ++ External Clock: Unknown ++ Max Speed: 2000 MHz ++ Current Speed: 2000 MHz ++ Status: Populated, Enabled ++ Upgrade: Other ++ L1 Cache Handle: Not Provided ++ L2 Cache Handle: Not Provided ++ L3 Cache Handle: Not Provided ++ Serial Number: Not Specified ++ Asset Tag: Not Specified ++ Part Number: Not Specified ++ Core Count: 1 ++ Core Enabled: 1 ++ Thread Count: 1 ++ Characteristics: None ++ ++Handle 0x1000, DMI type 16, 23 bytes ++Physical Memory Array ++ Location: Other ++ Use: System Memory ++ Error Correction Type: Multi-bit ECC ++ Maximum Capacity: 2 GB ++ Error Information Handle: Not Provided ++ Number Of Devices: 1 ++ ++Handle 0x1100, DMI type 17, 40 bytes ++Memory Device ++ Array Handle: 0x1000 ++ Error Information Handle: Not Provided ++ Total Width: Unknown ++ Data Width: Unknown ++ Size: 2048 MB ++ Form Factor: DIMM ++ Set: None ++ Locator: DIMM 0 ++ Bank Locator: Not Specified ++ Type: RAM ++ Type Detail: Other ++ Speed: Unknown ++ Manufacturer: Red Hat ++ Serial Number: Not Specified ++ Asset Tag: Not Specified ++ Part Number: Not Specified ++ Rank: Unknown ++ Configured Memory Speed: Unknown ++ Minimum Voltage: Unknown ++ Maximum Voltage: Unknown ++ Configured Voltage: Unknown ++ ++Handle 0x1300, DMI type 19, 31 bytes ++Memory Array Mapped Address ++ Starting Address: 0x00000000000 ++ Ending Address: 0x0007FFFFFFF ++ Range Size: 2 GB ++ Physical Array Handle: 0x1000 ++ Partition Width: 1 ++ ++Handle 0x2000, DMI type 32, 11 bytes ++System Boot Information ++ Status: No errors detected ++ ++Handle 0x7F00, DMI type 127, 4 bytes ++End Of Table ++ ++EOF +diff --git a/tests/nutanix-ahv/sbin/uname b/tests/nutanix-ahv/sbin/uname +new file mode 100755 +index 0000000..ab0ec89 +--- /dev/null ++++ b/tests/nutanix-ahv/sbin/uname +@@ -0,0 +1,2 @@ ++#!/bin/sh - ++echo x86_64 +diff --git a/tests/nutanix-ahv/sbin/virt-what-cpuid-helper b/tests/nutanix-ahv/sbin/virt-what-cpuid-helper +new file mode 100755 +index 0000000..f52a9d7 +--- /dev/null ++++ b/tests/nutanix-ahv/sbin/virt-what-cpuid-helper +@@ -0,0 +1,2 @@ ++#!/bin/sh - ++echo KVMKVMKVM +diff --git a/tests/nutanix-ahv/test.sh b/tests/nutanix-ahv/test.sh +new file mode 100755 +index 0000000..3d934b2 +--- /dev/null ++++ b/tests/nutanix-ahv/test.sh +@@ -0,0 +1,32 @@ ++# Test for Nutanix AHV ++# Copyright (C) 2019 Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++output="$(PATH=../..:$PATH virt-what --test-root=. 2>&1)" ++expected="nutanix_ahv" ++ ++if [ "$output" != "$expected" ]; then ++ echo "$0: test failed because output did not match expected" ++ echo "Expected output was:" ++ echo "----------------------------------------" ++ echo "$expected" ++ echo "----------------------------------------" ++ echo "But the actual output of the program was:" ++ echo "----------------------------------------" ++ echo "$output" ++ echo "----------------------------------------" ++ exit 1 ++fi +diff --git a/virt-what.in b/virt-what.in +index f685461..9eafa05 100644 +--- a/virt-what.in ++++ b/virt-what.in +@@ -1,6 +1,6 @@ + #!/bin/sh - + # @configure_input@ +-# Copyright (C) 2008-2017 Red Hat Inc. ++# Copyright (C) 2008-2019 Red Hat Inc. + # + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -220,6 +220,14 @@ if echo "$dmi" | grep -q 'Vendor: Parallels'; then + skip_qemu_kvm=true + fi + ++# Check for Nutanix AHV. ++# This is sufficiently different from KVM and has Viridian extensions, ++# so skip the KVM test. ++if echo "$dmi" | grep -q 'Manufacturer: Nutanix'; then ++ echo nutanix_ahv ++ skip_qemu_kvm=true ++fi ++ + # Check for oVirt/RHEV. + if echo "$dmi" | grep -q 'Manufacturer: oVirt'; then + echo ovirt +diff --git a/virt-what.pod b/virt-what.pod +index 5a0bdfc..ea5cb77 100644 +--- a/virt-what.pod ++++ b/virt-what.pod +@@ -177,6 +177,12 @@ is lkvm (a.k.a kvmtool). + + Status: contributed by Andrew Jones + ++=item B ++ ++The guest is running inside Nutanix Acropolis Hypervisor (AHV). ++ ++Status: confirmed by RWMJ. ++ + =item B + + The guest appears to be running inside an OpenVZ or Virtuozzo +-- +2.29.0.rc2 + diff --git a/0003-helper-Fix-KVM-signature.patch b/0003-helper-Fix-KVM-signature.patch new file mode 100644 index 0000000..2416e7a --- /dev/null +++ b/0003-helper-Fix-KVM-signature.patch @@ -0,0 +1,38 @@ +From 5cdf740942a4f443977344428dfe6c43f232f0eb Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 4 Oct 2019 18:30:01 +0100 +Subject: [PATCH 3/8] helper: Fix KVM signature. + +Thanks: Paolo Bonzini. +--- + virt-what-cpuid-helper.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/virt-what-cpuid-helper.c b/virt-what-cpuid-helper.c +index 0cd4a6f..9c6cdb2 100644 +--- a/virt-what-cpuid-helper.c ++++ b/virt-what-cpuid-helper.c +@@ -28,15 +28,16 @@ + #if defined(__i386__) || defined(__x86_64__) + + /* Known x86 hypervisor signatures. Note that if you add a new test +- * to virt-what.in you may need to update this list. The signature is +- * always 12 bytes except in the case of KVM. ++ * to virt-what.in you may need to update this list. Note the ++ * signature is always 12 bytes long, plus we add \0 to the end to ++ * make it 13 bytes. + */ + static int +-known_signature (char *sig) ++known_signature (const char *sig) + { + return + strcmp (sig, "bhyve bhyve ") == 0 || +- strcmp (sig, "KVMKVMKVM") == 0 || ++ memcmp (sig, "KVMKVMKVM\0\0\0", 12) == 0 || + strcmp (sig, "LKVMLKVMLKVM") == 0 || + strcmp (sig, "Microsoft Hv") == 0 || + strcmp (sig, "OpenBSDVMM58") == 0 || +-- +2.29.0.rc2 + diff --git a/0004-Fix-incorrect-detection-of-MS-Surfacebook-2-as-a-vir.patch b/0004-Fix-incorrect-detection-of-MS-Surfacebook-2-as-a-vir.patch new file mode 100644 index 0000000..c7c98d8 --- /dev/null +++ b/0004-Fix-incorrect-detection-of-MS-Surfacebook-2-as-a-vir.patch @@ -0,0 +1,27 @@ +From 3aa4ad0f81c35a56960871b68731b6e948d95f56 Mon Sep 17 00:00:00 2001 +From: willem van de velde +Date: Tue, 22 Oct 2019 11:58:01 +0100 +Subject: [PATCH 4/8] Fix incorrect detection of MS Surfacebook 2 as a virtual + machine. + +--- + virt-what.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/virt-what.in b/virt-what.in +index 9eafa05..a61ce91 100644 +--- a/virt-what.in ++++ b/virt-what.in +@@ -132,7 +132,8 @@ fi + # The negative check for cpuid is to distinguish this from Hyper-V + # which also has the same manufacturer string in the SM-BIOS data. + if [ "$cpuid" != "Microsoft Hv" ] && +- echo "$dmi" | grep -q 'Manufacturer: Microsoft Corporation'; then ++ echo "$dmi" | grep -q 'Manufacturer: Microsoft Corporation' && ++ echo "$dmi" | grep -q 'Product Name: Virtual Machine'; then + echo virtualpc + fi + +-- +2.29.0.rc2 + diff --git a/0005-docker-Check-for-.dockerenv-too.patch b/0005-docker-Check-for-.dockerenv-too.patch new file mode 100644 index 0000000..64367b1 --- /dev/null +++ b/0005-docker-Check-for-.dockerenv-too.patch @@ -0,0 +1,46 @@ +From e2c49cda221f95cb65b1b3ac3ae15aa41d92f519 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Skytt=C3=A4?= +Date: Sun, 1 Dec 2019 07:58:04 +0200 +Subject: [PATCH 5/8] docker: Check for /.dockerenv too + +/.dockerinit may no longer exist. + +Ref https://github.com/moby/moby/issues/18355 +--- + tests/docker/.dockerenv | 0 + tests/docker/Makefile.am | 1 + + virt-what.in | 2 +- + 3 files changed, 2 insertions(+), 1 deletion(-) + create mode 100644 tests/docker/.dockerenv + +diff --git a/tests/docker/.dockerenv b/tests/docker/.dockerenv +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/docker/Makefile.am b/tests/docker/Makefile.am +index e0ea991..e2a95d8 100644 +--- a/tests/docker/Makefile.am ++++ b/tests/docker/Makefile.am +@@ -21,6 +21,7 @@ TESTS = test.sh + + EXTRA_DIST = \ + test.sh \ ++ .dockerenv \ + .dockerinit \ + proc/cpuinfo \ + proc/self/status \ +diff --git a/virt-what.in b/virt-what.in +index a61ce91..db16b5f 100644 +--- a/virt-what.in ++++ b/virt-what.in +@@ -345,7 +345,7 @@ if ! "$skip_lkvm"; then + fi + + # Check for Docker. +-if [ -f "${root}/.dockerinit" ]; then ++if [ -f "${root}/.dockerenv" ] || [ -f "${root}/.dockerinit" ]; then + echo docker + fi + +-- +2.29.0.rc2 + diff --git a/0006-docker-Lookup-from-proc-self-cgroup-too.patch b/0006-docker-Lookup-from-proc-self-cgroup-too.patch new file mode 100644 index 0000000..3d9c936 --- /dev/null +++ b/0006-docker-Lookup-from-proc-self-cgroup-too.patch @@ -0,0 +1,61 @@ +From 57f0c3cc6a7e631f644d67f05b002c6004bb6601 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Skytt=C3=A4?= +Date: Sun, 1 Dec 2019 08:21:32 +0200 +Subject: [PATCH 6/8] docker: Lookup from /proc/self/cgroup too + +Refs https://github.com/moby/moby/issues/18355 +--- + tests/docker/Makefile.am | 1 + + tests/docker/proc/self/cgroup | 13 +++++++++++++ + virt-what.in | 3 ++- + 3 files changed, 16 insertions(+), 1 deletion(-) + create mode 100644 tests/docker/proc/self/cgroup + +diff --git a/tests/docker/Makefile.am b/tests/docker/Makefile.am +index e2a95d8..401f372 100644 +--- a/tests/docker/Makefile.am ++++ b/tests/docker/Makefile.am +@@ -24,6 +24,7 @@ EXTRA_DIST = \ + .dockerenv \ + .dockerinit \ + proc/cpuinfo \ ++ proc/self/cgroup \ + proc/self/status \ + sbin/dmidecode \ + sbin/uname \ +diff --git a/tests/docker/proc/self/cgroup b/tests/docker/proc/self/cgroup +new file mode 100644 +index 0000000..5547637 +--- /dev/null ++++ b/tests/docker/proc/self/cgroup +@@ -0,0 +1,13 @@ ++12:devices:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++11:blkio:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++10:perf_event:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++9:pids:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++8:cpuset:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++7:rdma:/ ++6:hugetlb:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++5:net_cls,net_prio:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++4:memory:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++3:freezer:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++2:cpu,cpuacct:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++1:name=systemd:/docker/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ++0::/system.slice/containerd.service +diff --git a/virt-what.in b/virt-what.in +index db16b5f..d43916b 100644 +--- a/virt-what.in ++++ b/virt-what.in +@@ -345,7 +345,8 @@ if ! "$skip_lkvm"; then + fi + + # Check for Docker. +-if [ -f "${root}/.dockerenv" ] || [ -f "${root}/.dockerinit" ]; then ++if [ -f "${root}/.dockerenv" ] || [ -f "${root}/.dockerinit" ] || \ ++ grep -qF /docker/ "${root}/proc/self/cgroup" 2>/dev/null; then + echo docker + fi + +-- +2.29.0.rc2 + diff --git a/0007-Add-podman-support.patch b/0007-Add-podman-support.patch new file mode 100644 index 0000000..1300d34 --- /dev/null +++ b/0007-Add-podman-support.patch @@ -0,0 +1,232 @@ +From 1df728aa4b1d2814265f9c86494f7d55ee0cf9af Mon Sep 17 00:00:00 2001 +From: Jordan Webb +Date: Mon, 13 Apr 2020 21:41:30 +0000 +Subject: [PATCH 7/8] Add podman support + +--- + configure.ac | 2 ++ + tests/podman/1/environ | Bin 0 -> 155 bytes + tests/podman/Makefile.am | 29 ++++++++++++++++++++ + tests/podman/proc/cpuinfo | 0 + tests/podman/proc/self/cgroup | 10 +++++++ + tests/podman/proc/self/status | 0 + tests/podman/sbin/dmidecode | 6 +++++ + tests/podman/sbin/uname | 2 ++ + tests/podman/sbin/virt-what-cpuid-helper | 2 ++ + tests/podman/test.sh | 32 +++++++++++++++++++++++ + virt-what.in | 10 ++++++- + virt-what.pod | 6 +++++ + 12 files changed, 98 insertions(+), 1 deletion(-) + create mode 100644 tests/podman/1/environ + create mode 100644 tests/podman/Makefile.am + create mode 100644 tests/podman/proc/cpuinfo + create mode 100644 tests/podman/proc/self/cgroup + create mode 100644 tests/podman/proc/self/status + create mode 100755 tests/podman/sbin/dmidecode + create mode 100755 tests/podman/sbin/uname + create mode 100755 tests/podman/sbin/virt-what-cpuid-helper + create mode 100755 tests/podman/test.sh + +diff --git a/configure.ac b/configure.ac +index 58b3d77..97d22bb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -53,6 +53,7 @@ tests="\ + lxc \ + nutanix-ahv \ + parallels-desktop \ ++ podman \ + ppc64-baremetal \ + ppc64-kvm \ + ppc64-lpar-dedicated \ +@@ -96,6 +97,7 @@ AC_CONFIG_FILES([Makefile + tests/lxc/Makefile + tests/nutanix-ahv/Makefile + tests/parallels-desktop/Makefile ++ tests/podman/Makefile + tests/ppc64-baremetal/Makefile + tests/ppc64-kvm/Makefile + tests/ppc64-lpar-dedicated/Makefile +diff --git a/tests/podman/1/environ b/tests/podman/1/environ +new file mode 100644 +index 0000000000000000000000000000000000000000..dd6f0d4d67a151ab7bab97565b0737b8dbf7db44 +GIT binary patch +literal 155 +zcmYL>K?=hl5JhL*%XorW3^JI2CJ>u-F>Rni)ncUd_?@JS?B@UX=Ygfcpaw_1MfC|) +zr4V1LmeOGMJmGP5qhtJ+`+g?F^0V`SgdCeIPY%CrtqJUC&fa%yMZLtVmasj+>YHQl +YMd8IEi3Dr7m)t_kYsGhYq>$nA11>u+CjbBd + +literal 0 +HcmV?d00001 + +diff --git a/tests/podman/Makefile.am b/tests/podman/Makefile.am +new file mode 100644 +index 0000000..a4c70ad +--- /dev/null ++++ b/tests/podman/Makefile.am +@@ -0,0 +1,29 @@ ++# Makefile for virt-what ++# Copyright (C) 2008-2011 Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++CLEANFILES = *~ ++ ++TESTS = test.sh ++ ++EXTRA_DIST = \ ++ test.sh \ ++ proc/cpuinfo \ ++ proc/self/cgroup \ ++ proc/self/status \ ++ sbin/dmidecode \ ++ sbin/uname \ ++ sbin/virt-what-cpuid-helper +diff --git a/tests/podman/proc/cpuinfo b/tests/podman/proc/cpuinfo +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/podman/proc/self/cgroup b/tests/podman/proc/self/cgroup +new file mode 100644 +index 0000000..11fc74e +--- /dev/null ++++ b/tests/podman/proc/self/cgroup +@@ -0,0 +1,10 @@ ++11:perf_event:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++10:devices:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++8:pids:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++7:blkio:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++6:cpu,cpuacct:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++5:net_cls,net_prio:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++4:freezer:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++3:cpuset:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++2:memory:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope ++1:name=systemd:/machine.slice/libpod-2ed85a65b4d6aedbf4e6bd1bb2d29e6d7778791bd02532788eb16954cebf01da.scope +diff --git a/tests/podman/proc/self/status b/tests/podman/proc/self/status +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/podman/sbin/dmidecode b/tests/podman/sbin/dmidecode +new file mode 100755 +index 0000000..d9992ad +--- /dev/null ++++ b/tests/podman/sbin/dmidecode +@@ -0,0 +1,6 @@ ++#!/bin/sh - ++cat <<'EOF' ++# dmidecode 2.11 ++/dev/mem: Operation not permitted ++EOF ++exit 1 +diff --git a/tests/podman/sbin/uname b/tests/podman/sbin/uname +new file mode 100755 +index 0000000..ab0ec89 +--- /dev/null ++++ b/tests/podman/sbin/uname +@@ -0,0 +1,2 @@ ++#!/bin/sh - ++echo x86_64 +diff --git a/tests/podman/sbin/virt-what-cpuid-helper b/tests/podman/sbin/virt-what-cpuid-helper +new file mode 100755 +index 0000000..ad82504 +--- /dev/null ++++ b/tests/podman/sbin/virt-what-cpuid-helper +@@ -0,0 +1,2 @@ ++#!/bin/sh - ++echo @ +diff --git a/tests/podman/test.sh b/tests/podman/test.sh +new file mode 100755 +index 0000000..6db58e5 +--- /dev/null ++++ b/tests/podman/test.sh +@@ -0,0 +1,32 @@ ++# Test for Podman ++# Copyright (C) 2008-2011 Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++output="$(PATH=../..:$PATH virt-what --test-root=. 2>&1)" ++expected="podman" ++ ++if [ "$output" != "$expected" ]; then ++ echo "$0: test failed because output did not match expected" ++ echo "Expected output was:" ++ echo "----------------------------------------" ++ echo "$expected" ++ echo "----------------------------------------" ++ echo "But the actual output of the program was:" ++ echo "----------------------------------------" ++ echo "$output" ++ echo "----------------------------------------" ++ exit 1 ++fi +diff --git a/virt-what.in b/virt-what.in +index d43916b..d52171c 100644 +--- a/virt-what.in ++++ b/virt-what.in +@@ -165,7 +165,7 @@ fi + # Added by Marc Fournier + + if [ -e "${root}/proc/1/environ" ] && +- cat "${root}/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container='; then ++ cat "${root}/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container=lxc'; then + echo lxc + fi + +@@ -350,6 +350,14 @@ if [ -f "${root}/.dockerenv" ] || [ -f "${root}/.dockerinit" ] || \ + echo docker + fi + ++# Check for Podman. ++if [ -e "${root}/proc/1/environ" ] && ++ cat "${root}/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container=podman'; then ++ echo podman ++elif grep -qF /libpod- "${root}/proc/self/cgroup" 2>/dev/null; then ++ echo podman ++fi ++ + # Check ppc64 lpar, kvm or powerkvm + + # example /proc/cpuinfo line indicating 'not baremetal' +diff --git a/virt-what.pod b/virt-what.pod +index ea5cb77..405537b 100644 +--- a/virt-what.pod ++++ b/virt-what.pod +@@ -204,6 +204,12 @@ The guest is running inside Parallels Virtual Platform + + Status: contributed by Justin Clift + ++=item B ++ ++This is a Podman container. ++ ++Status: contributed by Jordan Webb ++ + =item B + + The guest is running inside IBM PowerVM Lx86 Linux/x86 emulator. +-- +2.29.0.rc2 + diff --git a/0008-Simplify-and-fix-invocation-of-cpuid.patch b/0008-Simplify-and-fix-invocation-of-cpuid.patch new file mode 100644 index 0000000..5bccb57 --- /dev/null +++ b/0008-Simplify-and-fix-invocation-of-cpuid.patch @@ -0,0 +1,60 @@ +From 60d903fbb7653bc9754228bdab4c6933fcda1e72 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 13 Apr 2021 09:35:07 +0100 +Subject: [PATCH 8/8] Simplify and fix invocation of cpuid. + +Fixes a crash on some platforms identified by Yongkui Guo in +https://bugzilla.redhat.com/show_bug.cgi?id=1756381#c15 +--- + virt-what-cpuid-helper.c | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +diff --git a/virt-what-cpuid-helper.c b/virt-what-cpuid-helper.c +index 9c6cdb2..fdceb62 100644 +--- a/virt-what-cpuid-helper.c ++++ b/virt-what-cpuid-helper.c +@@ -47,17 +47,25 @@ known_signature (const char *sig) + 0; + } + ++/* Copied from the Linux kernel definition in ++ * arch/x86/include/asm/processor.h ++ */ ++static inline void ++cpuid (uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) ++{ ++ asm volatile ("cpuid" ++ : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) ++ : "0" (*eax), "2" (*ecx) ++ : "memory"); ++} ++ + static uint32_t +-cpuid (uint32_t eax, char *sig) ++cpuid_leaf (uint32_t eax, char *sig) + { + uint32_t *sig32 = (uint32_t *) sig; + +- asm volatile ( +- "xchgl %%ebx,%1; xor %%ebx,%%ebx; cpuid; xchgl %%ebx,%1" +- : "=a" (eax), "+r" (sig32[0]), "=c" (sig32[1]), "=d" (sig32[2]) +- : "0" (eax)); +- sig[12] = 0; +- ++ cpuid (&eax, &sig32[0], &sig32[1], &sig32[2]); ++ sig[12] = 0; /* \0-terminate the string to make string comparison possible */ + return eax; + } + +@@ -87,7 +95,7 @@ cpu_sig (void) + */ + for (leaf = base + 0xff00; leaf >= base; leaf -= 0x100) { + memset (sig, 0, sizeof sig); +- cpuid (leaf, sig); ++ cpuid_leaf (leaf, sig); + if (known_signature (sig)) { + puts (sig); + break; +-- +2.29.0.rc2 + diff --git a/virt-what.spec b/virt-what.spec index e280655..1eea3bf 100644 --- a/virt-what.spec +++ b/virt-what.spec @@ -1,13 +1,24 @@ Name: virt-what -Version: 1.20 -Release: 5%{?dist} +Version: 1.21 +Release: 0.1%{?dist} Summary: Detect if we are running in a virtual machine License: GPLv2+ URL: http://people.redhat.com/~rjones/virt-what/ -Source0: http://people.redhat.com/~rjones/virt-what/files/%{name}-%{version}.tar.gz +#Source0: http://people.redhat.com/~rjones/virt-what/files/%%{name}-%%{version}.tar.gz +Source0: http://people.redhat.com/~rjones/virt-what/files/%{name}-1.20.tar.gz -BuildRequires: make +# These are all the patches added since 1.20. +Patch0001: 0001-Fix-virt-what-cpuid-helper.patch +Patch0002: 0002-Add-support-for-Nutanix-Acropolis-Hypervisor-AHV-RHB.patch +Patch0003: 0003-helper-Fix-KVM-signature.patch +Patch0004: 0004-Fix-incorrect-detection-of-MS-Surfacebook-2-as-a-vir.patch +Patch0005: 0005-docker-Check-for-.dockerenv-too.patch +Patch0006: 0006-docker-Lookup-from-proc-self-cgroup-too.patch +Patch0007: 0007-Add-podman-support.patch +Patch0008: 0008-Simplify-and-fix-invocation-of-cpuid.patch + +BuildRequires: make BuildRequires: git # This is provided by the build root, but we make it explicit @@ -60,6 +71,7 @@ Current types of virtualization detected: - lxc Linux LXC container - kvm Linux Kernel Virtual Machine (KVM) - lkvm LKVM / kvmtool + - nutanix_ahv Nutanix Acropolis Hypervisor (AHV) - openvz OpenVZ or Virtuozzo - ovirt oVirt node - parallels Parallels Virtual Platform @@ -79,7 +91,8 @@ Current types of virtualization detected: %prep -%autosetup -S git +#%%autosetup -S git +%autosetup -S git -n %{name}-1.20 %build @@ -105,6 +118,9 @@ fi %changelog +* Tue Apr 13 2021 Richard W.M. Jones - 1.21-0.1 +- Add all patches since 1.20 in preparation for 1.21 release. + * Wed Jan 27 2021 Fedora Release Engineering - 1.20-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild