Remove all VMware software

This commit is contained in:
Sergey Morozov
2019-07-27 00:30:04 +03:00
parent b6d035bead
commit cd138bc598
20 changed files with 0 additions and 2395 deletions

View File

@@ -1,45 +0,0 @@
From 182ac915372c798e400c9718499cae2cb1822ef1 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Sat, 30 Sep 2017 21:41:51 +0200
Subject: [PATCH 6/6] vmmon: quick workaround for objtool warnings
As discussed in
https://bugzilla.suse.com/show_bug.cgi?id=1059674
the reason for multiple objtool warnings is the fact that vmmon module
defines its own Panic() function which never returns. While it is marked as
such which is used by the compiler for optimization, there is no way to
find this from object file.
While this seems innocuous, it might result in problems with unwinder
later. The quickest way around is to replace vmmon's own Panic() with
standard kernel panic() until a cleaner solution is found.
---
vmmon-only/include/vm_assert.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/vmmon-only/include/vm_assert.h b/vmmon-only/include/vm_assert.h
index 8cdbc93..b869def 100644
--- a/vmmon-only/include/vm_assert.h
+++ b/vmmon-only/include/vm_assert.h
@@ -67,6 +67,7 @@ extern "C" {
#if defined (VMKPANIC)
#include "vmk_assert.h"
#else /* !VMKPANIC */
+#include <linux/kernel.h>
#define _ASSERT_PANIC(name) \
Panic(_##name##Fmt "\n", __FILE__, __LINE__)
#define _ASSERT_PANIC_BUG(bug, name) \
@@ -107,7 +108,7 @@ NORETURN void Panic_NoSave(const char *fmt, ...) PRINTF_DECL(1, 2);
} while(0)
#else
-NORETURN void Panic(const char *fmt, ...) PRINTF_DECL(1, 2);
+#define Panic panic
#endif
void LogThrottled(uint32 *count, const char *fmt, ...) PRINTF_DECL(2, 3);
--
2.14.3

View File

@@ -1,31 +0,0 @@
From c46d05eb1e2d32d82ec377a4c9b0dd0164eee68e Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Thu, 22 Mar 2018 13:45:34 +0100
Subject: [PATCH 08/10] vmmon: fix always_inline attribute usage
Function declared with __attribute__((always_inline)) should also be
declared as inline, otherwise gcc issues a warning "always_inline function
might not be inlinable". It's just cosmetic but getting rid of known
harmless warnings makes it easier to spot actual problems. Use the
__always_inline macro for LinuxDriverSyncReadTSCs() as this is how always
inline functions should be declared in kernel code.
---
vmmon-only/linux/driver.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c
index 1905aa4..b37454c 100644
--- a/vmmon-only/linux/driver.c
+++ b/vmmon-only/linux/driver.c
@@ -981,7 +981,7 @@ LinuxDriverReadTSC(void *data, // OUT: TSC values
*-----------------------------------------------------------------------------
*/
-__attribute__((always_inline)) static Bool
+__always_inline static Bool
LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min
{
TSCDelta tscDelta;
--
2.17.0

View File

@@ -1,49 +0,0 @@
From 6392262b68387299ee81d5d659cb5423a2ae1c9c Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Mon, 26 Mar 2018 13:33:32 +0200
Subject: [PATCH 09/10] vmmon: fix indirect call with retpoline build
Build against kernel with retpoline support issues warning
objtool: Task_Switch()+0x425: indirect call found in RETPOLINE build
This is because an indirect call in TaskSwitchToMonitor() is encoded using
inline assembler so that it bypasses retpoline generation. For this
purpose, macro CALL_NOSPEC exists since v4.15-rc8 (and has been backported
into some distribution kernels with the rest of retpoline support). Use the
macro if available and fallback to the original code if not.
---
vmmon-only/common/task.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/vmmon-only/common/task.c b/vmmon-only/common/task.c
index 98cc74a..400ebfe 100644
--- a/vmmon-only/common/task.c
+++ b/vmmon-only/common/task.c
@@ -2203,12 +2203,23 @@ TaskSwitchToMonitor(VMCrossPage *crosspage)
{
uint64 raxGetsWiped, rcxGetsWiped;
+#ifdef CALL_NOSPEC
+ __asm__ __volatile__(CALL_NOSPEC
+ : "=a" (raxGetsWiped),
+ "=c" (rcxGetsWiped)
+ : "0" (codePtr),
+ "1" (crosspage),
+ THUNK_TARGET(codePtr)
+ : "rdx", "r8", "r9", "r10", "r11", "cc", "memory");
+#else
__asm__ __volatile__("call *%%rax"
: "=a" (raxGetsWiped),
"=c" (rcxGetsWiped)
: "0" (codePtr),
"1" (crosspage)
: "rdx", "r8", "r9", "r10", "r11", "cc", "memory");
+#endif
+
}
#elif defined(_MSC_VER)
/*
--
2.17.0

View File

@@ -1,85 +0,0 @@
From 70ed9dd2ec64c09fbd0de27dcb10f9948a2b212a Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Mon, 20 Aug 2018 07:46:13 +0200
Subject: [PATCH] vmmon: check presence of file_operations::poll()
Commit 11c5ad0ec441 ("eventpoll: switch to ->poll_mask") in v4.18-rc1, made
eventpoll switch from ->poll() to ->poll_mask(), resulting in a null
pointer dereference as vmmon calls the callback directly without checking
its availability.
Rather than calling the callback directly (which would result in null
pointer dereference), use vfs_poll() wrapper. As this wrapper is only
available since 4.18-rc1 cycle as well, provide a copy to use when building
against older kernels.
Note: even if the commit revealing the problem was reverted in 4.18-rc3
(and is unlikely to go back in the same form) so that vmmon no longer
crashes with 4.18 kernel, calling the callback without a check is a bad
practice so let's keep the patch in place.
---
vmmon-only/include/compat_poll.h | 30 ++++++++++++++++++++++++++++++
vmmon-only/linux/hostif.c | 3 ++-
2 files changed, 32 insertions(+), 1 deletion(-)
create mode 100644 vmmon-only/include/compat_poll.h
diff --git a/vmmon-only/include/compat_poll.h b/vmmon-only/include/compat_poll.h
new file mode 100644
index 0000000..562cdb6
--- /dev/null
+++ b/vmmon-only/include/compat_poll.h
@@ -0,0 +1,30 @@
+#ifndef __COMPAT_POLL_H__
+#define __COMPAT_POLL_H__
+
+#include <linux/poll.h>
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0))
+
+#ifndef __poll_t
+typedef unsigned int __poll_t;
+#endif
+
+static inline __poll_t compat_vfs_poll(struct file *file,
+ struct poll_table_struct *pt)
+{
+ if (unlikely(!file->f_op->poll))
+ return DEFAULT_POLLMASK;
+ return file->f_op->poll(file, pt);
+}
+
+#else
+
+static inline __poll_t compat_vfs_poll(struct file *file,
+ struct poll_table_struct *pt)
+{
+ return vfs_poll(file, pt);
+}
+
+#endif
+
+#endif /* __COMPAT_POLL_H__ */
diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
index 21758c2..af4b1d9 100644
--- a/vmmon-only/linux/hostif.c
+++ b/vmmon-only/linux/hostif.c
@@ -74,6 +74,7 @@
#include "pgtbl.h"
#include "versioned_atomic.h"
+#include "compat_poll.h"
#if !defined(CONFIG_HIGH_RES_TIMERS)
#error CONFIG_HIGH_RES_TIMERS required for acceptable performance
@@ -2570,7 +2571,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
poll_initwait(&table);
current->state = TASK_INTERRUPTIBLE;
- mask = file->f_op->poll(file, &table.pt);
+ mask = compat_vfs_poll(file, &table.pt);
if (!(mask & (POLLIN | POLLERR | POLLHUP))) {
vm->vmhost->vcpuSemaTask[vcpuid] = current;
schedule_timeout(timeoutms * HZ / 1000); // convert to Hz
--
2.19.0

View File

@@ -1,40 +0,0 @@
From 4d80590924550d0ee3fe470e027deea0ee43e6b6 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Tue, 18 Apr 2017 12:52:08 +0200
Subject: [PATCH 1/6] vmnet: use standard definition of PCI_VENDOR_ID_VMWARE if
available
The PCI_VENDOR_ID_VMWARE macro is defined in mainline pci_ids.h since
commit 94e57fea6202 ("PCI: Move PCI_VENDOR_ID_VMWARE to pci_ids.h")
in v3.18-rc1.
---
vmnet-only/vm_device_version.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
index ab396bc..cafddd0 100644
--- a/vmnet-only/vm_device_version.h
+++ b/vmnet-only/vm_device_version.h
@@ -35,6 +35,8 @@
#endif
#endif
+#include <linux/pci_ids.h>
+
/* LSILogic 53C1030 Parallel SCSI controller
* LSILogic SAS1068 SAS controller
*/
@@ -53,7 +55,10 @@
* VMware HD Audio codec
* VMware HD Audio controller
*/
+#ifndef PCI_VENDOR_ID_VMWARE
#define PCI_VENDOR_ID_VMWARE 0x15AD
+#endif
+
#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
#define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
#define PCI_DEVICE_ID_VMWARE_VGA 0x0711
--
2.14.3

View File

@@ -1,32 +0,0 @@
From 7cb0c3beb4abde406d5334376106d68997f6fb51 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Tue, 18 Apr 2017 13:01:56 +0200
Subject: [PATCH 2/6] vmnet: use standard definition of
PCI_VENDOR_ID_VMWARE_VMXNET3 if available
The PCI_DEVICE_ID_VMWARE_VMXNET3 macro is defined in mainline pci_ids.h
since commit b1226c7db1d9 ("vmxnet3: Move PCI Id to pci_ids.h") in
v4.10-rc1.
---
vmnet-only/vm_device_version.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
index cafddd0..9305ddb 100644
--- a/vmnet-only/vm_device_version.h
+++ b/vmnet-only/vm_device_version.h
@@ -75,7 +75,11 @@
#define PCI_DEVICE_ID_VMWARE_1394 0x0780
#define PCI_DEVICE_ID_VMWARE_BRIDGE 0x0790
#define PCI_DEVICE_ID_VMWARE_ROOTPORT 0x07A0
+
+#ifndef PCI_DEVICE_ID_VMWARE_VMXNET3
#define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07B0
+#endif
+
#define PCI_DEVICE_ID_VMWARE_PVSCSI 0x07C0
#define PCI_DEVICE_ID_VMWARE_82574 0x07D0
#define PCI_DEVICE_ID_VMWARE_AHCI 0x07E0
--
2.14.3

View File

@@ -1,54 +0,0 @@
From 53d6ccbeed4c519dc105f98552067ced2ecbd432 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Fri, 23 Jun 2017 09:29:24 +0200
Subject: [PATCH 3/6] vmmon: use standard definition of
MSR_MISC_FEATURES_ENABLES if available
The MSR_MISC_FEATURES_ENABLES macro is defined in mainline since commit
ab6d9468631a ("x86/msr: Rename MISC_FEATURE_ENABLES to
MISC_FEATURES_ENABLES") in v4.12-rc1.
The MSR_MISC_FEATURES_ENABLES_CPUID_FAULT macro is defined in mainline
since commit e9ea1e7f53b8 ("x86/arch_prctl: Add ARCH_[GET|SET]_CPUID") in
v4.12-rc1.
---
vmmon-only/include/x86msr.h | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/vmmon-only/include/x86msr.h b/vmmon-only/include/x86msr.h
index 3a6bfe8..904d9e9 100644
--- a/vmmon-only/include/x86msr.h
+++ b/vmmon-only/include/x86msr.h
@@ -24,6 +24,7 @@
#ifndef _X86MSR_H_
#define _X86MSR_H_
+#include <asm/msr-index.h>
#define INCLUDE_ALLOW_USERLEVEL
#define INCLUDE_ALLOW_VMX
@@ -112,7 +113,9 @@ MSRQuery;
#define MSR_TSC_AUX 0xc0000103
#define MSR_BD_TSC_RATIO 0xc0000104
+#ifndef MSR_MISC_FEATURES_ENABLES
#define MSR_MISC_FEATURES_ENABLES 0x140
+#endif
/* Intel Core Architecture and later: use only architected counters. */
#define IA32_MSR_PERF_CAPABILITIES 0x345
@@ -612,7 +615,11 @@ typedef enum {
/*
* MISC_FEATURES_ENABLES bits
*/
+#ifdef MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
+#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
+#else
#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING 1
+#endif
--
2.14.3

View File

@@ -1,39 +0,0 @@
From 704be6e3f2143df35e99025caa3393b9c309fbc1 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Mon, 24 Jul 2017 10:08:55 +0200
Subject: [PATCH 4/6] vmmon: use standard definition of CR3_PCID_MASK if
available
The CR3_PCID_MASK is defined in mainline asm/processor-flags.h since
commit 6c690ee1039b ("x86/mm: Split read_cr3() into read_cr3_pa() and
__read_cr3()") in v4.13-rc1.
---
vmmon-only/include/x86_basic_defs.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/vmmon-only/include/x86_basic_defs.h b/vmmon-only/include/x86_basic_defs.h
index abfb0b8..8c7566f 100644
--- a/vmmon-only/include/x86_basic_defs.h
+++ b/vmmon-only/include/x86_basic_defs.h
@@ -35,6 +35,8 @@
#define INCLUDE_ALLOW_VMCORE
#include "includeCheck.h"
+#include <asm/processor-flags.h>
+
#define X86_MAX_INSTR_LEN 15 /* Max byte length of an x86 instruction. */
#define NUM_IDT_VECTORS 256
@@ -75,7 +77,9 @@
#define CR3_PDB_MASK 0xfffff000
#define CR3_IGNORE 0xFFF
#define PAE_CR3_IGNORE 0x1F
+#ifndef CR3_PCID_MASK
#define CR3_PCID_MASK 0xFFF
+#endif
#define CR3_NO_FLUSH (1ULL << 63)
#define CR4_VME 0x00000001
--
2.14.3

View File

@@ -1,30 +0,0 @@
From ae4d4697c6f48be9314d807480dac206c9889d46 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Sun, 11 Feb 2018 01:17:00 +0100
Subject: [PATCH 07/10] vmmon: use standard definition of MSR_K7_HWCR_SMMLOCK
if available
The MSR_K7_HWCR_SMMLOCK macro is defined in mainline since commit
18c71ce9c882 ("x86/CPU/AMD: Add the Secure Encrypted Virtualization CPU
feature") in v4.16-rc1.
---
vmmon-only/include/x86msr.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/vmmon-only/include/x86msr.h b/vmmon-only/include/x86msr.h
index e10a859..5618776 100644
--- a/vmmon-only/include/x86msr.h
+++ b/vmmon-only/include/x86msr.h
@@ -441,7 +441,9 @@ typedef enum {
#define MSR_K7_HWCR_SSEDIS 0x00008000ULL // Disable SSE bit
#define MSR_K7_HWCR_MONMWAITUSEREN 0x00000400ULL // Enable MONITOR/MWAIT CPL>0
#define MSR_K7_HWCR_TLBFFDIS 0x00000040ULL // Disable TLB Flush Filter
+#ifndef MSR_K7_HWCR_SMMLOCK
#define MSR_K7_HWCR_SMMLOCK 0x00000001ULL // Lock SMM environment
+#endif
#ifndef MSR_K8_SYSCFG
#define MSR_K8_SYSCFG 0xc0010010
--
2.17.0