summarylogtreecommitdiffstats
path: root/vmnet-14.1.7-5.4.patch
diff options
context:
space:
mode:
authorFelix Golatofski2020-01-08 21:31:47 +0100
committerFelix Golatofski2020-01-08 21:31:47 +0100
commit5511a27639e144b70210e9e3ca382414d9b10b78 (patch)
tree98a11df9b606cc40e75aa713bb692928bf18b73c /vmnet-14.1.7-5.4.patch
parenta7eb99cddf7842a7fb92478846b67394e6f572c2 (diff)
downloadaur-vmware-patch.tar.gz
Integrated patch
Diffstat (limited to 'vmnet-14.1.7-5.4.patch')
-rw-r--r--vmnet-14.1.7-5.4.patch152
1 files changed, 152 insertions, 0 deletions
diff --git a/vmnet-14.1.7-5.4.patch b/vmnet-14.1.7-5.4.patch
new file mode 100644
index 000000000000..f7dd0f9891de
--- /dev/null
+++ b/vmnet-14.1.7-5.4.patch
@@ -0,0 +1,152 @@
+diff --git a/Makefile b/Makefile
+index caab6b9..c2fc51f 100644
+--- vmnet-only/Makefile
++++ vmnet-only/Makefile
+@@ -107,7 +107,7 @@ prebuild:: ;
+ postbuild:: ;
+
+ $(DRIVER_KO): prebuild
+- $(MAKE) -C $(BUILD_DIR) SUBDIRS=$$PWD SRCROOT=$$PWD/$(SRCROOT) \
++ $(MAKE) -C $(BUILD_DIR) M=$$PWD SRCROOT=$$PWD/$(SRCROOT) \
+ MODULEBUILDDIR=$(MODULEBUILDDIR) modules
+ $(MAKE) -C $$PWD SRCROOT=$$PWD/$(SRCROOT) \
+ MODULEBUILDDIR=$(MODULEBUILDDIR) postbuild
+diff --git a/Makefile.kernel b/Makefile.kernel
+index 44a8a95..de04abe 100644
+--- vmnet-only/Makefile.kernel
++++ vmnet-only/Makefile.kernel
+@@ -32,6 +32,6 @@ $(DRIVER)-y := driver.o hub.o userif.o netif.o bridge.o procfs.o smac_compat.o \
+ ####
+
+ clean:
+- rm -rf $(DRIVER).o $(DRIVER).mod.o $(DRIVER).mod.c $(DRIVER).ko \
++ rm -rf $(DRIVER).o $(DRIVER).mod.o $(DRIVER).mod.c $(DRIVER).ko .cache.mk \
+ .tmp_versions Module.symvers Modules.symvers Module.markers \
+ modules.order $($(DRIVER)-y) .*.cmd .*.o.flags
+diff --git a/userif.c b/userif.c
+index acc6ca6..8dd6d21 100644
+--- vmnet-only/userif.c
++++ vmnet-only/userif.c
+@@ -33,6 +33,7 @@
+ #include <linux/proc_fs.h>
+ #include <linux/sockios.h>
+ #include <linux/sched.h>
++#include <linux/sched/signal.h>
+ #include <linux/slab.h>
+ #include <linux/version.h>
+ #include <linux/wait.h>
+@@ -78,11 +79,37 @@ static int VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp);
+ extern unsigned int vnet_max_qlen;
+
+ #if COMPAT_LINUX_VERSION_CHECK_LT(3, 2, 0)
+-# define compat_kmap(page) kmap(page)
+-# define compat_kunmap(page) kunmap(page)
++# define compat_kmap_frag(frag) kmap((frag)->page)
++# define compat_kunmap_frag(page) kunmap((frag)->page)
+ #else
+-# define compat_kmap(page) kmap((page).p)
+-# define compat_kunmap(page) kunmap((page).p)
++# define compat_kmap_frag(frag) kmap(skb_frag_page(frag))
++# define compat_kunmap_frag(frag) kunmap(skb_frag_page(frag))
++#endif
++
++static unsigned int compat_skb_frag_size(const skb_frag_t *frag)
++{
++#if COMPAT_LINUX_VERSION_CHECK_LT(3, 2, 0)
++ return frag->size;
++#else
++ return skb_frag_size(frag);
++#endif
++}
++
++static unsigned int compat_skb_frag_off(const skb_frag_t *frag)
++{
++#if COMPAT_LINUX_VERSION_CHECK_LT(5, 4, 0) && \
++ !(defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 15 && \
++ defined(CONFIG_SUSE_PATCHLEVEL) && CONFIG_SUSE_PATCHLEVEL >= 2)
++ return frag->page_offset;
++#else
++ return skb_frag_off(frag);
++#endif
++}
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0) && defined(VERIFY_WRITE)
++ #define write_access_ok(addr, size) access_ok(VERIFY_WRITE, addr, size)
++#else
++ #define write_access_ok(addr, size) access_ok(addr, size)
+ #endif
+
+ /*
+@@ -142,7 +169,7 @@ VNetUserIfMapPtr(VA uAddr, // IN: pointer to user memory
+ struct page **p, // OUT: locked page
+ void **ptr) // OUT: kernel mapped pointer
+ {
+- if (!access_ok(VERIFY_WRITE, (void *)uAddr, size) ||
++ if (!write_access_ok((void *)uAddr, size) ||
+ (((uAddr + size - 1) & ~(PAGE_SIZE - 1)) !=
+ (uAddr & ~(PAGE_SIZE - 1)))) {
+ return -EINVAL;
+@@ -559,20 +586,21 @@ VNetCsumCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
+ for (frag = skb_shinfo(skb)->frags;
+ frag != skb_shinfo(skb)->frags + skb_shinfo(skb)->nr_frags;
+ frag++) {
+- if (frag->size > 0) {
++ if (compat_skb_frag_size(frag) > 0) {
+ unsigned int tmpCsum;
+ const void *vaddr;
+
+- vaddr = compat_kmap(frag->page);
+- tmpCsum = csum_and_copy_to_user(vaddr + frag->page_offset,
+- curr, frag->size, 0, &err);
+- compat_kunmap(frag->page);
++ vaddr = compat_kmap_frag(frag);
++ tmpCsum = csum_and_copy_to_user(vaddr + compat_skb_frag_off(frag),
++ curr, compat_skb_frag_size(frag), 0,
++ &err);
++ compat_kunmap_frag(frag);
+
+ if (err) {
+ return err;
+ }
+ csum = csum_block_add(csum, tmpCsum, curr - buf);
+- curr += frag->size;
++ curr += compat_skb_frag_size(frag);
+ }
+ }
+
+diff --git a/vm_device_version.h b/vm_device_version.h
+index ab396bc..9305ddb 100644
+--- vmnet-only/vm_device_version.h
++++ 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
+@@ -70,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