diff options
Diffstat (limited to 'app-emulation/vmware-modules/files')
61 files changed, 2425 insertions, 0 deletions
diff --git a/app-emulation/vmware-modules/files/271-3.10-00-userns.patch b/app-emulation/vmware-modules/files/271-3.10-00-userns.patch new file mode 100644 index 000000000000..b1b78b76300e --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-00-userns.patch @@ -0,0 +1,41 @@ +correctly initializes UID/GID values +gets UID correctly in light of user namespace API +origionally from https://462666.bugs.gentoo.org/attachment.cgi?id=342888 + +--- a/vmblock-only/linux/inode.c 2013-03-20 17:37:48.000000000 +0100 ++++ b/vmblock-only/linux/inode.c 2013-03-20 17:41:22.000000000 +0100 +@@ -135,7 +135,8 @@ + inode->i_size = INODE_TO_IINFO(inode)->nameLen; + inode->i_version = 1; + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; +- inode->i_uid = inode->i_gid = 0; ++ inode->i_uid = GLOBAL_ROOT_UID; ++ inode->i_gid = GLOBAL_ROOT_GID; + inode->i_op = &LinkInodeOps; + + d_add(dentry, inode); + +--- a/vmci-only/linux/driver.c 2013-03-20 17:57:35.000000000 +0100 ++++ b/vmci-only/linux/driver.c 2013-03-20 17:57:43.000000000 +0100 +@@ -740,7 +740,7 @@ + goto init_release; + } + +- user = current_uid(); ++ user = from_kuid(current_user_ns(), current_uid()); + retval = VMCIContext_InitContext(initBlock.cid, initBlock.flags, + 0 /* Unused */, vmciLinux->userVersion, + &user, &vmciLinux->context); + +--- a/vsock-only/linux/af_vsock.c 2013-03-20 18:01:48.000000000 +0100 ++++ b/vsock-only/linux/af_vsock.c 2013-03-20 18:01:58.000000000 +0100 +@@ -2866,7 +2866,7 @@ + vsk->connectTimeout = psk->connectTimeout; + } else { + vsk->trusted = capable(CAP_NET_ADMIN); +- vsk->owner = current_uid(); ++ vsk->owner = from_kuid(current_user_ns(), current_uid()); + vsk->queuePairSize = VSOCK_DEFAULT_QP_SIZE; + vsk->queuePairMinSize = VSOCK_DEFAULT_QP_SIZE_MIN; + vsk->queuePairMaxSize = VSOCK_DEFAULT_QP_SIZE_MAX; + diff --git a/app-emulation/vmware-modules/files/271-3.10-01-create_proc_entry.patch b/app-emulation/vmware-modules/files/271-3.10-01-create_proc_entry.patch new file mode 100644 index 000000000000..889ae71be47b --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-01-create_proc_entry.patch @@ -0,0 +1,28 @@ +uses the new proc_create function to create /proc entries +instead of create_proc_entry which was deprecated: +https://lkml.org/lkml/2013/4/11/215 + +--- a/vmblock-only/linux/control.c 2013-05-21 19:21:19.165750556 +0200 ++++ b/vmblock-only/linux/control.c 2013-05-21 19:22:18.363747723 +0200 +@@ -208,9 +208,10 @@ + VMBlockSetProcEntryOwner(controlProcMountpoint); + + /* Create /proc/fs/vmblock/dev */ +- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, +- VMBLOCK_CONTROL_MODE, +- controlProcDirEntry); ++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, ++ VMBLOCK_CONTROL_MODE, ++ controlProcDirEntry, ++ &ControlFileOps); + if (!controlProcEntry) { + Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n"); + remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry); +@@ -218,7 +219,6 @@ + return -EINVAL; + } + +- controlProcEntry->proc_fops = &ControlFileOps; + return 0; + } + diff --git a/app-emulation/vmware-modules/files/271-3.10-02-getname.patch b/app-emulation/vmware-modules/files/271-3.10-02-getname.patch new file mode 100644 index 000000000000..05ed8dbcc374 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-02-getname.patch @@ -0,0 +1,24 @@ +uses __getname/__putname instead of getname. getname was deprecated +the new code calls __getname (which really is a specific type of +memory allocator, then copies the string safely from user space +into the allocated buffer + +--- vmblock-only/linux/control.c 2014-03-15 15:28:40.871076076 +0100 ++++ vmblock-only/linux/control.c.new 2014-03-15 15:29:15.079074439 +0100 +@@ -279,11 +279,17 @@ + int i; + int retval; + +- name = getname(buf); ++ name = __getname(); + if (IS_ERR(name)) { + return PTR_ERR(name); + } + ++ i = strncpy_from_user(name, buf, PATH_MAX); ++ if (i < 0 || i == PATH_MAX) { ++ __putname(name); ++ return -EINVAL; ++ } ++ + for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) { diff --git a/app-emulation/vmware-modules/files/271-3.10-03-deprecated.patch b/app-emulation/vmware-modules/files/271-3.10-03-deprecated.patch new file mode 100644 index 000000000000..981aabdd1260 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-03-deprecated.patch @@ -0,0 +1,89 @@ +undefines DEPRECATED which is unfortunately also defined (as a string) +in <linux/printk.h>. Realistically, this macro isn't even used, so this +doesn't matter much. But it hushes some very loud warnings. + +diff -rupN vmblock-only/shared/vm_assert.h vmblock-only.new/shared/vm_assert.h +--- vmblock-only/shared/vm_assert.h 2014-10-09 21:50:54.221159088 -0400 ++++ vmblock-only.new/shared/vm_assert.h 2014-10-09 21:53:04.612166156 -0400 +@@ -237,11 +237,13 @@ EXTERN void WarningThrottled(uint32 *cou + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED; %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmci-only/shared/vm_assert.h vmci-only.new/shared/vm_assert.h +--- vmci-only/shared/vm_assert.h 2014-10-09 21:50:54.222159088 -0400 ++++ vmci-only.new/shared/vm_assert.h 2014-10-09 21:52:52.348165492 -0400 +@@ -237,11 +237,13 @@ EXTERN void WarningThrottled(uint32 *cou + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED; %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmmon-only/include/vm_assert.h vmmon-only.new/include/vm_assert.h +--- vmmon-only/include/vm_assert.h 2014-10-09 21:50:54.222159088 -0400 ++++ vmmon-only.new/include/vm_assert.h 2014-10-09 21:52:36.877164653 -0400 +@@ -237,11 +237,13 @@ EXTERN void WarningThrottled(uint32 *cou + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED; %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmnet-only/vm_assert.h vmnet-only.new/vm_assert.h +--- vmnet-only/vm_assert.h 2014-10-09 21:50:54.222159088 -0400 ++++ vmnet-only.new/vm_assert.h 2014-10-09 21:52:57.736165784 -0400 +@@ -237,11 +237,13 @@ EXTERN void WarningThrottled(uint32 *cou + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED; %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vsock-only/shared/vm_assert.h vsock-only.new/shared/vm_assert.h +--- vsock-only/shared/vm_assert.h 2014-10-09 21:50:54.222159088 -0400 ++++ vsock-only.new/shared/vm_assert.h 2014-10-09 21:52:45.352165112 -0400 +@@ -237,11 +237,13 @@ EXTERN void WarningThrottled(uint32 *cou + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED; %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + diff --git a/app-emulation/vmware-modules/files/271-3.10-04-unused-typedef.patch b/app-emulation/vmware-modules/files/271-3.10-04-unused-typedef.patch new file mode 100644 index 000000000000..d5129ec689a4 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-04-unused-typedef.patch @@ -0,0 +1,115 @@ +hushes warnings about unused typedefs which are part of the "static assert" +technique that the code uses. We simply add an "__attribute__((unused)) to each of them + +--- vmblock-only/shared/vm_assert.h 2014-10-07 22:43:39.519402467 -0400 ++++ vmblock-only/shared/vm_assert.h 2014-10-07 22:48:01.346409957 -0400 +@@ -317,7 +317,7 @@ EXTERN void WarningThrottled(uint32 *cou + #define ASSERT_ON_COMPILE(e) \ + do { \ + enum { AssertOnCompileMisused = ((e) ? 1 : -1) }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } while (0) + + +--- vmci-only/shared/vm_assert.h 2014-10-07 22:43:39.519402467 -0400 ++++ vmci-only/shared/vm_assert.h 2014-10-07 22:47:51.829409685 -0400 +@@ -317,7 +317,7 @@ EXTERN void WarningThrottled(uint32 *cou + #define ASSERT_ON_COMPILE(e) \ + do { \ + enum { AssertOnCompileMisused = ((e) ? 1 : -1) }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } while (0) + + +--- vmmon-only/include/vm_assert.h 2014-10-07 22:43:39.520402467 -0400 ++++ vmmon-only/include/vm_assert.h 2014-10-07 22:47:39.246409325 -0400 +@@ -317,7 +317,7 @@ EXTERN void WarningThrottled(uint32 *cou + #define ASSERT_ON_COMPILE(e) \ + do { \ + enum { AssertOnCompileMisused = ((e) ? 1 : -1) }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } while (0) + + +--- vmnet-only/vm_assert.h 2014-10-07 22:43:39.520402467 -0400 ++++ vmnet-only/vm_assert.h 2014-10-07 22:47:55.804409799 -0400 +@@ -317,7 +317,7 @@ EXTERN void WarningThrottled(uint32 *cou + #define ASSERT_ON_COMPILE(e) \ + do { \ + enum { AssertOnCompileMisused = ((e) ? 1 : -1) }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } while (0) + + +--- vsock-only/shared/vm_assert.h 2014-10-07 22:47:11.595408534 -0400 ++++ vsock-only/shared/vm_assert.h 2014-10-07 22:45:55.715406363 -0400 +@@ -317,7 +317,7 @@ EXTERN void WarningThrottled(uint32 *cou + #define ASSERT_ON_COMPILE(e) \ + do { \ + enum { AssertOnCompileMisused = ((e) ? 1 : -1) }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } while (0) + + +--- vsock-only/shared/vm_atomic.h 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only/shared/vm_atomic.h 2014-10-07 22:53:06.024418673 -0400 +@@ -2394,7 +2394,7 @@ Atomic_TestBit64(Atomic_uint64 *var, // + && 8 * sizeof (out) == size \ + && 8 * sizeof (cast) == size \ + ? 1 : -1 }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } \ + \ + \ +--- vmci-only/shared/vm_atomic.h 2013-11-05 23:33:27.000000000 -0500 ++++ vmci-only/shared/vm_atomic.h 2014-10-07 22:53:24.873419213 -0400 +@@ -2394,7 +2394,7 @@ Atomic_TestBit64(Atomic_uint64 *var, // + && 8 * sizeof (out) == size \ + && 8 * sizeof (cast) == size \ + ? 1 : -1 }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } \ + \ + \ + +--- vmblock-only/shared/vm_atomic.h 2013-11-05 23:33:27.000000000 -0500 ++++ vmblock-only/shared/vm_atomic.h 2014-10-07 22:53:31.073419390 -0400 +@@ -2394,7 +2394,7 @@ Atomic_TestBit64(Atomic_uint64 *var, // + && 8 * sizeof (out) == size \ + && 8 * sizeof (cast) == size \ + ? 1 : -1 }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } \ + \ + +--- vmnet-only/vm_atomic.h 2013-11-06 00:40:52.000000000 -0500 ++++ vmnet-only/vm_atomic.h 2014-10-07 23:04:50.637438831 -0400 +@@ -2394,7 +2394,7 @@ Atomic_TestBit64(Atomic_uint64 *var, // + && 8 * sizeof (out) == size \ + && 8 * sizeof (cast) == size \ + ? 1 : -1 }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } \ + \ + \ + +--- vmmon-only/include/vm_atomic.h 2013-11-06 00:40:52.000000000 -0500 ++++ vmmon-only/include/vm_atomic.h 2014-10-07 23:04:50.637438831 -0400 +@@ -2394,7 +2394,7 @@ Atomic_TestBit64(Atomic_uint64 *var, // + && 8 * sizeof (out) == size \ + && 8 * sizeof (cast) == size \ + ? 1 : -1 }; \ +- typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ ++ __attribute__((unused)) typedef char AssertOnCompileFailed[AssertOnCompileMisused]; \ + } \ + \ + \ diff --git a/app-emulation/vmware-modules/files/271-3.10-05-dentry.patch b/app-emulation/vmware-modules/files/271-3.10-05-dentry.patch new file mode 100644 index 000000000000..f4f59d977408 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-05-dentry.patch @@ -0,0 +1,34 @@ +starting with kernel 3.6, d_revalidate takes an unsigned int "flags" +as the second argument, not a nameidata pointer! see fs/namei.c +for implementation + +diff -Naur vmblock-only/linux/dentry.c vmblock-only/linux/dentry.c +--- vmblock-only/linux/dentry.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/dentry.c 2014-04-26 10:58:03.062635343 -0400 +@@ -32,7 +32,7 @@ + #include "block.h" + + +-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); ++static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags); + + struct dentry_operations LinkDentryOps = { + .d_revalidate = DentryOpRevalidate, +@@ -60,7 +60,7 @@ + + static int + DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating +- struct nameidata *nd) // IN: lookup flags & intent ++ unsigned int flags) // IN: lookup flags & intent + { + VMBlockInodeInfo *iinfo; + struct nameidata actualNd; +@@ -101,7 +101,7 @@ + if (actualDentry && + actualDentry->d_op && + actualDentry->d_op->d_revalidate) { +- return actualDentry->d_op->d_revalidate(actualDentry, nd); ++ return actualDentry->d_op->d_revalidate(actualDentry, flags); + } + + if (compat_path_lookup(iinfo->name, 0, &actualNd)) { diff --git a/app-emulation/vmware-modules/files/271-3.10-06-inode.patch b/app-emulation/vmware-modules/files/271-3.10-06-inode.patch new file mode 100644 index 000000000000..01c88930899c --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-06-inode.patch @@ -0,0 +1,36 @@ +starting with kernel 3.6, d_revalidate takes an unsigned int "flags" +as the second argument, not a nameidata pointer! see fs/namei.c +for implementation. Also changing vfs_follow_link to nd_set_link. +See: https://lkml.org/lkml/2013/9/9/236 + +diff -Naur vmblock-only/linux/inode.c vmblock-only/linux/inode.c +--- vmblock-only/linux/inode.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/inode.c 2014-04-26 10:58:03.063635343 -0400 +@@ -36,7 +36,7 @@ + + /* Inode operations */ + static struct dentry *InodeOpLookup(struct inode *dir, +- struct dentry *dentry, struct nameidata *nd); ++ struct dentry *dentry, unsigned int flags); + static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) + static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); +@@ -75,7 +75,7 @@ + static struct dentry * + InodeOpLookup(struct inode *dir, // IN: parent directory's inode + struct dentry *dentry, // IN: dentry to lookup +- struct nameidata *nd) // IN: lookup intent and information ++ unsigned int flags) // IN: lookup intent and information + { + char *filename; + struct inode *inode; +@@ -221,7 +221,8 @@ + goto out; + } + +- ret = vfs_follow_link(nd, iinfo->name); ++ nd_set_link(nd, iinfo->name); ++ ret = 0; + + out: + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) diff --git a/app-emulation/vmware-modules/files/271-3.10-07-hub.patch b/app-emulation/vmware-modules/files/271-3.10-07-hub.patch new file mode 100644 index 000000000000..eebe4a23b304 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.10-07-hub.patch @@ -0,0 +1,26 @@ +fixes a bug where sizeof was being used on a pointer when they clearly +meant to use the size of the array referred to. Fortunately, the amount is +always smaller than the actual size of the buffer, so likely not a security issue +(and was fixed in vmware-workstaiton 10 + +diff -rupN vmnet-only/hub.c vmnet-only.new/hub.c +--- vmnet-only/hub.c 2013-11-06 00:40:52.000000000 -0500 ++++ vmnet-only.new/hub.c 2014-10-07 18:45:34.403918680 -0400 +@@ -129,7 +129,7 @@ VNetHubFindHubByID(uint8 idNum[VNET_PVN_ + { + VNetHub *currHub = vnetHub; + while (currHub && (currHub->hubType != HUB_TYPE_PVN || +- memcmp(idNum, currHub->id.pvnID, sizeof idNum))) { ++ memcmp(idNum, currHub->id.pvnID, VNET_PVN_ID_LEN))) { + currHub = currHub->next; + } + return currHub; +@@ -312,7 +312,7 @@ VNetHubAlloc(Bool allocPvn, // IN: TRUE + + if (allocPvn) { + hub->hubType = HUB_TYPE_PVN; +- memcpy(hub->id.pvnID, id, sizeof id); ++ memcpy(hub->id.pvnID, id, VNET_PVN_ID_LEN); + ++pvnInstance; + } else { + hub->hubType = HUB_TYPE_VNET; diff --git a/app-emulation/vmware-modules/files/271-3.11-00-readdir.patch b/app-emulation/vmware-modules/files/271-3.11-00-readdir.patch new file mode 100644 index 000000000000..b2f76d3e2b30 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.11-00-readdir.patch @@ -0,0 +1,41 @@ +replaces usage of vfs_readdir with iterate_dir. origionally found here: +https://bugs.gentoo.org/show_bug.cgi?id=508204 + +diff -Naur vmblock-only/linux/file.c vmblock-only/linux/file.c +--- vmblock-only/linux/file.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/file.c 2014-04-26 10:58:03.062635343 -0400 +@@ -166,11 +166,9 @@ + + static int + FileOpReaddir(struct file *file, // IN +- void *dirent, // IN +- filldir_t filldir) // IN ++ struct dir_context *ctx) + { + int ret; +- FilldirInfo info; + struct file *actualFile; + + if (!file) { +@@ -184,11 +182,8 @@ + return -EINVAL; + } + +- info.filldir = filldir; +- info.dirent = dirent; +- + actualFile->f_pos = file->f_pos; +- ret = vfs_readdir(actualFile, Filldir, &info); ++ ret = iterate_dir(actualFile, ctx); + file->f_pos = actualFile->f_pos; + + return ret; +@@ -237,7 +232,7 @@ + + + struct file_operations RootFileOps = { +- .readdir = FileOpReaddir, ++ .iterate = FileOpReaddir, + .open = FileOpOpen, + .release = FileOpRelease, + }; diff --git a/app-emulation/vmware-modules/files/271-3.11-01-filldir.patch b/app-emulation/vmware-modules/files/271-3.11-01-filldir.patch new file mode 100644 index 000000000000..2eec99b7c1f8 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.11-01-filldir.patch @@ -0,0 +1,53 @@ +simply remove the code for Filldir since it is no longer used with the new +iterate_dir API + +diff -rupN vmblock-only/linux/file.c vmblock-only.new/linux/file.c +--- vmblock-only/linux/file.c 2014-10-07 23:22:46.832469618 -0400 ++++ vmblock-only.new/linux/file.c 2014-10-07 23:24:35.276472720 -0400 +@@ -38,46 +38,6 @@ typedef u64 inode_num_t; + typedef ino_t inode_num_t; + #endif + +-/* Specifically for our filldir_t callback */ +-typedef struct FilldirInfo { +- filldir_t filldir; +- void *dirent; +-} FilldirInfo; +- +- +-/* +- *---------------------------------------------------------------------------- +- * +- * Filldir -- +- * +- * Callback function for readdir that we use in place of the one provided. +- * This allows us to specify that each dentry is a symlink, but pass through +- * everything else to the original filldir function. +- * +- * Results: +- * Original filldir's return value. +- * +- * Side effects: +- * Directory information gets copied to user's buffer. +- * +- *---------------------------------------------------------------------------- +- */ +- +-static int +-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir +- const char *name, // IN: Dirent name +- int namelen, // IN: len of dirent's name +- loff_t offset, // IN: Offset +- inode_num_t ino, // IN: Inode number of dirent +- unsigned int d_type) // IN: Type of file +-{ +- FilldirInfo *info = buf; +- +- /* Specify DT_LNK regardless */ +- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK); +-} +- +- + /* File operations */ + + /* diff --git a/app-emulation/vmware-modules/files/271-3.13-00-vmnet.patch b/app-emulation/vmware-modules/files/271-3.13-00-vmnet.patch new file mode 100644 index 000000000000..1bf22077b727 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.13-00-vmnet.patch @@ -0,0 +1,39 @@ +the new API to get the hooknum +origionally from http://forums.gentoo.org/viewtopic-t-979802-start-25.html + +--- work/vmnet-only/filter.c 2013-08-27 20:29:04.000000000 +0100 ++++ patched/vmnet-only/filter.c 2014-01-26 01:09:05.184893854 +0000 +@@ -27,6 +27,7 @@ + #include "compat_module.h" + #include <linux/mutex.h> + #include <linux/netdevice.h> ++#include <linux/version.h> + #if COMPAT_LINUX_VERSION_CHECK_LT(3, 2, 0) + # include <linux/module.h> + #else +@@ -203,7 +204,11 @@ + #endif + + static unsigned int ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) + VNetFilterHookFn(unsigned int hooknum, // IN: ++#else ++VNetFilterHookFn(const struct nf_hook_ops *ops, // IN: ++#endif + #ifdef VMW_NFHOOK_USES_SKB + struct sk_buff *skb, // IN: + #else +@@ -252,7 +257,12 @@ + + /* When the host transmits, hooknum is VMW_NF_INET_POST_ROUTING. */ + /* When the host receives, hooknum is VMW_NF_INET_LOCAL_IN. */ +- transmit = (hooknum == VMW_NF_INET_POST_ROUTING); ++ ++ #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) ++ transmit = (hooknum == VMW_NF_INET_POST_ROUTING); ++ #else ++ transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING); ++ #endif + + packetHeader = compat_skb_network_header(skb); + ip = (struct iphdr*)packetHeader; diff --git a/app-emulation/vmware-modules/files/271-3.15-00-readlink.patch b/app-emulation/vmware-modules/files/271-3.15-00-readlink.patch new file mode 100644 index 000000000000..b8ee07822021 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.15-00-readlink.patch @@ -0,0 +1,15 @@ +replacing usage of vfs_readlink with new readlink_copy API +see: http://permalink.gmane.org/gmane.linux.kernel.commits.head/445090 + +diff -rupN vmblock-only/linux/inode.c vmblock-only/linux/inode.c +--- vmblock-only/linux/inode.c 2014-10-05 23:20:14.545218357 -0400 ++++ vmblock-only/linux/inode.c 2014-10-05 23:33:01.549259933 -0400 +@@ -178,7 +178,7 @@ InodeOpReadlink(struct dentry *dentry, + return -EINVAL; + } + +- return vfs_readlink(dentry, buffer, buflen, iinfo->name); ++ return readlink_copy(buffer, buflen, iinfo->name); + } + + diff --git a/app-emulation/vmware-modules/files/271-3.15-01-vsock.patch b/app-emulation/vmware-modules/files/271-3.15-01-vsock.patch new file mode 100644 index 000000000000..9e8d9d1a32f7 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.15-01-vsock.patch @@ -0,0 +1,46 @@ +removing the no longer existing second parameter to sk_data_ready +doesn't seem it ever served a purpose. + +diff -rupN vsock-only/linux/notify.c vsock-only.new/linux/notify.c +--- vsock-only/linux/notify.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notify.c 2014-10-05 23:46:47.943304728 -0400 +@@ -515,8 +515,11 @@ VSockVmciHandleWrote(struct sock *sk, + vsk = vsock_sk(sk); + PKT_FIELD(vsk, sentWaitingRead) = FALSE; + #endif +- ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +diff -rupN vsock-only/linux/notifyQState.c vsock-only.new/linux/notifyQState.c +--- vsock-only/linux/notifyQState.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notifyQState.c 2014-10-05 23:46:33.231303931 -0400 +@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, + struct sockaddr_vm *dst, // IN: unused + struct sockaddr_vm *src) // IN: unused + { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct + } + + /* See the comment in VSockVmciNotifyPktSendPostEnqueue */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + return err; diff --git a/app-emulation/vmware-modules/files/271-3.17-00-netdev.patch b/app-emulation/vmware-modules/files/271-3.17-00-netdev.patch new file mode 100644 index 000000000000..e3ee3aa09939 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.17-00-netdev.patch @@ -0,0 +1,16 @@ +new alloc_netdev requires a new parameter. All examples in the kernel i've seen just +use the constant NET_NAME_UNKNOWN. +origionally from: https://communities.vmware.com/message/2425189 + +diff -rupN vmnet-only/netif.c vmnet-only.new/netif.c +--- vmnet-only/netif.c 2013-11-06 00:40:52.000000000 -0500 ++++ vmnet-only.new/netif.c 2014-10-09 17:29:12.361307961 -0400 +@@ -149,7 +149,7 @@ VNetNetIf_Create(char *devName, // IN: + memcpy(deviceName, devName, sizeof deviceName); + NULL_TERMINATE_STRING(deviceName); + +- dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup); ++ dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_USER, VNetNetIfSetup); + if (!dev) { + retval = -ENOMEM; + goto out; diff --git a/app-emulation/vmware-modules/files/271-3.19-00-vmnet-warning.patch b/app-emulation/vmware-modules/files/271-3.19-00-vmnet-warning.patch new file mode 100644 index 000000000000..b4d30c97a59c --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-00-vmnet-warning.patch @@ -0,0 +1,13 @@ +diff -rupN vmnet-only/vm_device_version.h vmnet-only.new/vm_device_version.h +--- vmnet-only/vm_device_version.h 2013-11-06 00:40:52.000000000 -0500 ++++ vmnet-only.new/vm_device_version.h 2015-05-05 12:03:06.879202223 -0400 +@@ -53,7 +53,9 @@ + * VMware HD Audio codec + * VMware HD Audio controller + */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + #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_NET 0x0720 diff --git a/app-emulation/vmware-modules/files/271-3.19-01-vmblock-path.patch b/app-emulation/vmware-modules/files/271-3.19-01-vmblock-path.patch new file mode 100644 index 000000000000..178d1478ae59 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-01-vmblock-path.patch @@ -0,0 +1,67 @@ +Sources: +https://531682.bugs.gentoo.org/attachment.cgi?id=396484 +https://531682.bugs.gentoo.org/attachment.cgi?id=396482 +diff -rupN vmblock-only.orig/linux/dentry.c vmblock-only/linux/dentry.c +--- vmblock-only.orig/linux/dentry.c 2015-02-14 18:05:46.000000000 -0500 ++++ vmblock-only/linux/dentry.c 2015-02-14 18:09:59.000000000 -0500 +@@ -63,7 +63,7 @@ DentryOpRevalidate(struct dentry *dentry + unsigned int flags) // IN: lookup flags & intent + { + VMBlockInodeInfo *iinfo; +- struct nameidata actualNd; ++ struct path actualNd; + struct dentry *actualDentry; + int ret; + +diff -rupN vmblock-only.orig/linux/filesystem.c vmblock-only/linux/filesystem.c +--- vmblock-only.orig/linux/filesystem.c 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/linux/filesystem.c 2015-02-14 18:10:49.000000000 -0500 +@@ -322,7 +322,7 @@ Iget(struct super_block *sb, // IN: f + { + VMBlockInodeInfo *iinfo; + struct inode *inode; +- struct nameidata actualNd; ++ struct path actualNd; + + ASSERT(sb); + +diff -rupN vmblock-only.orig/shared/compat_namei.h vmblock-only/shared/compat_namei.h +--- vmblock-only.orig/shared/compat_namei.h 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/shared/compat_namei.h 2015-02-14 18:08:38.000000000 -0500 +@@ -26,21 +26,21 @@ + * struct. They were both replaced with a struct path. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_vmw_nd_to_dentry(nd) (nd).path.dentry ++#define compat_vmw_nd_to_dentry(nd) (nd).dentry + #else + #define compat_vmw_nd_to_dentry(nd) (nd).dentry + #endif + + /* In 2.6.25-rc2, path_release(&nd) was replaced with path_put(&nd.path). */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_path_release(nd) path_put(&(nd)->path) ++#define compat_path_release(nd) path_put(nd) + #else + #define compat_path_release(nd) path_release(nd) + #endif + + /* path_lookup was removed in 2.6.39 merge window VFS merge */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) +-#define compat_path_lookup(name, flags, nd) kern_path(name, flags, &((nd)->path)) ++#define compat_path_lookup(name, flags, nd) kern_path(name, flags, nd) + #else + #define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd) + #endif +diff -u vmblock-only.orig/linux/file.c vmblock-only/linux/file.c +--- vmblock-only.orig/linux/file.c 2015-02-11 12:18:29.000000000 -0500 ++++ vmblock-only/linux/file.c 2015-02-11 12:41:41.000000000 -0500 +@@ -92,7 +92,7 @@ + * and that would try to acquire the inode's semaphore; if the two inodes + * are the same we'll deadlock. + */ +- if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) { ++ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) { + Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n"); + if (filp_close(actualFile, current->files) < 0) { + Warning("FileOpOpen: unable to close opened file.\n"); diff --git a/app-emulation/vmware-modules/files/271-3.19-02-vmci.patch b/app-emulation/vmware-modules/files/271-3.19-02-vmci.patch new file mode 100644 index 000000000000..a8ec2b11daf9 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-02-vmci.patch @@ -0,0 +1,29 @@ +diff -rupN vmci-only/linux/vmciKernelIf.c vmci-only.new/linux/vmciKernelIf.c +--- vmci-only/linux/vmciKernelIf.c 2015-05-05 11:22:55.276071501 -0400 ++++ vmci-only.new/linux/vmciKernelIf.c 2015-05-05 11:23:58.912074950 -0400 +@@ -40,6 +40,7 @@ + #include <linux/socket.h> /* For memcpy_{to,from}iovec(). */ + #include <linux/vmalloc.h> + #include <linux/wait.h> ++#include <linux/skbuff.h> + + #include "compat_highmem.h" + #include "compat_interrupt.h" +diff -rupN vmci-only/linux/vmciKernelIf.c vmci-only.new/linux/vmciKernelIf.c +--- vmci-only/linux/vmciKernelIf.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmci-only.new/linux/vmciKernelIf.c 2015-05-05 11:21:59.929068500 -0400 +@@ -1246,11 +1246,11 @@ __VMCIMemcpyFromQueue(void *dest, + } + + if (isIovec) { +- struct iovec *iov = (struct iovec *)dest; ++ struct msghdr *msg = dest; + int err; + + /* The iovec will track bytesCopied internally. */ +- err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy); ++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy); + if (err != 0) { + kunmap(kernelIf->page[pageIndex]); + return VMCI_ERROR_INVALID_ARGS; + diff --git a/app-emulation/vmware-modules/files/271-3.19-03-vmnet.patch b/app-emulation/vmware-modules/files/271-3.19-03-vmnet.patch new file mode 100644 index 000000000000..041bfb6a6210 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-03-vmnet.patch @@ -0,0 +1,29 @@ +diff -ur vmnet-only.orig/driver.c vmnet-only/driver.c +--- vmnet-only.orig/driver.c 2014-06-13 02:38:25.000000000 +0200 ++++ vmnet-only/driver.c 2015-02-21 17:31:22.630656305 +0100 +@@ -1236,8 +1236,8 @@ + struct inode *inode = NULL; + long err; + +- if (filp && filp->f_dentry) { +- inode = filp->f_dentry->d_inode; ++ if (filp && filp->f_path.dentry) { ++ inode = filp->f_path.dentry->d_inode; + } + err = VNetFileOpIoctl(inode, filp, iocmd, ioarg); + return err; +diff -ur vmnet-only.orig/userif.c vmnet-only/userif.c +--- vmnet-only.orig/userif.c 2014-06-13 02:38:25.000000000 +0200 ++++ vmnet-only/userif.c 2015-02-21 17:37:46.154589854 +0100 +@@ -523,7 +523,10 @@ + .iov_base = buf, + .iov_len = len, + }; +- return skb_copy_datagram_iovec(skb, 0, &iov, len); ++ struct iov_iter to; ++ ++ iov_iter_init(&to, READ, &iov, 1, len); ++ return skb_copy_datagram_iter(skb, 0, &to, len); + } + + diff --git a/app-emulation/vmware-modules/files/271-3.19-04-vsock.patch b/app-emulation/vmware-modules/files/271-3.19-04-vsock.patch new file mode 100644 index 000000000000..8c9d3cb6dfe3 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-04-vsock.patch @@ -0,0 +1,12 @@ +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:26:05.145081792 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:30:54.304097466 -0400 +@@ -4266,7 +4266,7 @@ VSockVmciDgramSendmsg(struct kiocb *kioc + goto out; + } + +- memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len); ++ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len); + + dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port); + dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port); diff --git a/app-emulation/vmware-modules/files/271-3.19-05-vsock.patch b/app-emulation/vmware-modules/files/271-3.19-05-vsock.patch new file mode 100644 index 000000000000..2e412301d096 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-05-vsock.patch @@ -0,0 +1,15 @@ +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:31:35.710099711 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:36:33.260115840 -0400 +@@ -4727,7 +4727,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kioc + } + + /* Place the datagram payload in the user's iovec. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen); ++#else ++ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen); ++#endif + if (err) { + goto out; + } diff --git a/app-emulation/vmware-modules/files/271-3.19-06-vmci_qpair.patch b/app-emulation/vmware-modules/files/271-3.19-06-vmci_qpair.patch new file mode 100644 index 000000000000..1849a378456e --- /dev/null +++ b/app-emulation/vmware-modules/files/271-3.19-06-vmci_qpair.patch @@ -0,0 +1,24 @@ +diff -rupN vsock-only.old/linux/af_vsock.c vsock-only/linux/af_vsock.c +--- vsock-only.old/linux/af_vsock.c 2015-05-06 20:41:47.684046762 -0400 ++++ vsock-only/linux/af_vsock.c 2015-05-06 20:52:15.245080779 -0400 +@@ -4629,7 +4629,7 @@ VSockVmciStreamSendmsg(struct kiocb *kio + * able to send. + */ + +- written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov, ++ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov, + len - totalWritten, 0); + if (written < 0) { + err = -ENOMEM; +@@ -4874,9 +4874,9 @@ VSockVmciStreamRecvmsg(struct kiocb *kio + } + + if (flags & MSG_PEEK) { +- read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } else { +- read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } + + if (read < 0) { diff --git a/app-emulation/vmware-modules/files/271-hardened.patch b/app-emulation/vmware-modules/files/271-hardened.patch new file mode 100644 index 000000000000..ea1b0f300751 --- /dev/null +++ b/app-emulation/vmware-modules/files/271-hardened.patch @@ -0,0 +1,170 @@ +diff --git a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c +index 921f25c..41a39e3 100644 +--- a/vmci-only/linux/driver.c ++++ b/vmci-only/linux/driver.c +@@ -241,7 +241,24 @@ static unsigned int LinuxDriverPoll(struct file *file, poll_table *wait); + #define LinuxDriverUnlockIoctlPerFD(mutex) do {} while (0) + #endif + +-static struct file_operations vmuser_fops; ++/* ++ * Moved file operations initialize here because of incompatibilites ++ * with Gentoo hardened profile/hardend Linux 3. ++ */ ++static struct file_operations vmuser_fops = { ++ .owner = THIS_MODULE, ++ .poll = LinuxDriverPoll, ++#ifdef HAVE_UNLOCKED_IOCTL ++ .unlocked_ioctl = LinuxDriver_UnlockedIoctl, ++#else ++ .ioctl = LinuxDriver_Ioctl, ++#endif ++#ifdef HAVE_COMPAT_IOCTL ++ .compat_ioctl = LinuxDriver_UnlockedIoctl, ++#endif ++ .open = LinuxDriver_Open, ++ .release = LinuxDriver_Close ++}; + + + /* +@@ -378,26 +395,6 @@ vmci_host_init(void) + return -ENOMEM; + } + +- /* +- * Initialize the file_operations structure. Because this code is always +- * compiled as a module, this is fine to do it here and not in a static +- * initializer. +- */ +- +- memset(&vmuser_fops, 0, sizeof vmuser_fops); +- vmuser_fops.owner = THIS_MODULE; +- vmuser_fops.poll = LinuxDriverPoll; +-#ifdef HAVE_UNLOCKED_IOCTL +- vmuser_fops.unlocked_ioctl = LinuxDriver_UnlockedIoctl; +-#else +- vmuser_fops.ioctl = LinuxDriver_Ioctl; +-#endif +-#ifdef HAVE_COMPAT_IOCTL +- vmuser_fops.compat_ioctl = LinuxDriver_UnlockedIoctl; +-#endif +- vmuser_fops.open = LinuxDriver_Open; +- vmuser_fops.release = LinuxDriver_Close; +- + sprintf(linuxState.deviceName, "vmci"); + linuxState.major = 10; + linuxState.misc.minor = MISC_DYNAMIC_MINOR; +diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c +index b21dd44..960c2aa 100644 +--- a/vmmon-only/linux/driver.c ++++ b/vmmon-only/linux/driver.c +@@ -178,7 +178,22 @@ static struct vm_operations_struct vmuser_mops = { + #endif + }; + +-static struct file_operations vmuser_fops; ++static struct file_operations vmuser_fops = { ++ .owner = THIS_MODULE, ++ .poll = LinuxDriverPoll, ++#ifdef HAVE_UNLOCKED_IOCTL ++ .unlocked_ioctl = LinuxDriver_UnlockedIoctl, ++#else ++ .ioctl = LinuxDriver_Ioctl, ++#endif ++#ifdef HAVE_COMPAT_IOCTL ++ .compat_ioctl = LinuxDriver_UnlockedIoctl, ++#endif ++ .open = LinuxDriver_Open, ++ .release = LinuxDriver_Close, ++ .mmap = LinuxDriverMmap ++}; ++ + static struct timer_list tscTimer; + + /* +@@ -357,27 +372,6 @@ init_module(void) + spin_lock_init(&linuxState.pollListLock); + #endif + +- /* +- * Initialize the file_operations structure. Because this code is always +- * compiled as a module, this is fine to do it here and not in a static +- * initializer. +- */ +- +- memset(&vmuser_fops, 0, sizeof vmuser_fops); +- vmuser_fops.owner = THIS_MODULE; +- vmuser_fops.poll = LinuxDriverPoll; +-#ifdef HAVE_UNLOCKED_IOCTL +- vmuser_fops.unlocked_ioctl = LinuxDriver_UnlockedIoctl; +-#else +- vmuser_fops.ioctl = LinuxDriver_Ioctl; +-#endif +-#ifdef HAVE_COMPAT_IOCTL +- vmuser_fops.compat_ioctl = LinuxDriver_UnlockedIoctl; +-#endif +- vmuser_fops.open = LinuxDriver_Open; +- vmuser_fops.release = LinuxDriver_Close; +- vmuser_fops.mmap = LinuxDriverMmap; +- + #ifdef VMX86_DEVEL + devel_init_module(); + linuxState.minor = 0; +diff --git a/vmnet-only/driver.c b/vmnet-only/driver.c +index b12b982..40bd4cf 100644 +--- a/vmnet-only/driver.c ++++ b/vmnet-only/driver.c +@@ -165,7 +165,22 @@ static long VNetFileOpUnlockedIoctl(struct file * filp, + unsigned int iocmd, unsigned long ioarg); + #endif + +-static struct file_operations vnetFileOps; ++static struct file_operations vnetFileOps = { ++ .owner = THIS_MODULE, ++ .read = VNetFileOpRead, ++ .write = VNetFileOpWrite, ++ .poll = VNetFileOpPoll, ++#ifdef HAVE_UNLOCKED_IOCTL ++ .unlocked_ioctl = VNetFileOpUnlockedIoctl, ++#else ++ .ioctl = VNetFileOpIoctl, ++#endif ++#ifdef HAVE_COMPAT_IOCTL ++ .compat_ioctl = VNetFileOpUnlockedIoctl, ++#endif ++ .open = VNetFileOpOpen, ++ .release = VNetFileOpClose ++}; + + /* + * Utility functions +@@ -476,28 +491,6 @@ init_module(void) + goto err_proto; + } + +- /* +- * Initialize the file_operations structure. Because this code is always +- * compiled as a module, this is fine to do it here and not in a static +- * initializer. +- */ +- +- memset(&vnetFileOps, 0, sizeof vnetFileOps); +- vnetFileOps.owner = THIS_MODULE; +- vnetFileOps.read = VNetFileOpRead; +- vnetFileOps.write = VNetFileOpWrite; +- vnetFileOps.poll = VNetFileOpPoll; +-#ifdef HAVE_UNLOCKED_IOCTL +- vnetFileOps.unlocked_ioctl = VNetFileOpUnlockedIoctl; +-#else +- vnetFileOps.ioctl = VNetFileOpIoctl; +-#endif +-#ifdef HAVE_COMPAT_IOCTL +- vnetFileOps.compat_ioctl = VNetFileOpUnlockedIoctl; +-#endif +- vnetFileOps.open = VNetFileOpOpen; +- vnetFileOps.release = VNetFileOpClose; +- + retval = register_chrdev(VNET_MAJOR_NUMBER, "vmnet", &vnetFileOps); + if (retval) { + LOG(0, (KERN_NOTICE "/dev/vmnet: could not register major device %d\n", diff --git a/app-emulation/vmware-modules/files/279-3.10-00-userns.patch b/app-emulation/vmware-modules/files/279-3.10-00-userns.patch new file mode 100644 index 000000000000..b1b78b76300e --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.10-00-userns.patch @@ -0,0 +1,41 @@ +correctly initializes UID/GID values +gets UID correctly in light of user namespace API +origionally from https://462666.bugs.gentoo.org/attachment.cgi?id=342888 + +--- a/vmblock-only/linux/inode.c 2013-03-20 17:37:48.000000000 +0100 ++++ b/vmblock-only/linux/inode.c 2013-03-20 17:41:22.000000000 +0100 +@@ -135,7 +135,8 @@ + inode->i_size = INODE_TO_IINFO(inode)->nameLen; + inode->i_version = 1; + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; +- inode->i_uid = inode->i_gid = 0; ++ inode->i_uid = GLOBAL_ROOT_UID; ++ inode->i_gid = GLOBAL_ROOT_GID; + inode->i_op = &LinkInodeOps; + + d_add(dentry, inode); + +--- a/vmci-only/linux/driver.c 2013-03-20 17:57:35.000000000 +0100 ++++ b/vmci-only/linux/driver.c 2013-03-20 17:57:43.000000000 +0100 +@@ -740,7 +740,7 @@ + goto init_release; + } + +- user = current_uid(); ++ user = from_kuid(current_user_ns(), current_uid()); + retval = VMCIContext_InitContext(initBlock.cid, initBlock.flags, + 0 /* Unused */, vmciLinux->userVersion, + &user, &vmciLinux->context); + +--- a/vsock-only/linux/af_vsock.c 2013-03-20 18:01:48.000000000 +0100 ++++ b/vsock-only/linux/af_vsock.c 2013-03-20 18:01:58.000000000 +0100 +@@ -2866,7 +2866,7 @@ + vsk->connectTimeout = psk->connectTimeout; + } else { + vsk->trusted = capable(CAP_NET_ADMIN); +- vsk->owner = current_uid(); ++ vsk->owner = from_kuid(current_user_ns(), current_uid()); + vsk->queuePairSize = VSOCK_DEFAULT_QP_SIZE; + vsk->queuePairMinSize = VSOCK_DEFAULT_QP_SIZE_MIN; + vsk->queuePairMaxSize = VSOCK_DEFAULT_QP_SIZE_MAX; + diff --git a/app-emulation/vmware-modules/files/279-3.10-01-getname.patch b/app-emulation/vmware-modules/files/279-3.10-01-getname.patch new file mode 100644 index 000000000000..05ed8dbcc374 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.10-01-getname.patch @@ -0,0 +1,24 @@ +uses __getname/__putname instead of getname. getname was deprecated +the new code calls __getname (which really is a specific type of +memory allocator, then copies the string safely from user space +into the allocated buffer + +--- vmblock-only/linux/control.c 2014-03-15 15:28:40.871076076 +0100 ++++ vmblock-only/linux/control.c.new 2014-03-15 15:29:15.079074439 +0100 +@@ -279,11 +279,17 @@ + int i; + int retval; + +- name = getname(buf); ++ name = __getname(); + if (IS_ERR(name)) { + return PTR_ERR(name); + } + ++ i = strncpy_from_user(name, buf, PATH_MAX); ++ if (i < 0 || i == PATH_MAX) { ++ __putname(name); ++ return -EINVAL; ++ } ++ + for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) { diff --git a/app-emulation/vmware-modules/files/279-3.10-03-deprecated.patch b/app-emulation/vmware-modules/files/279-3.10-03-deprecated.patch new file mode 100644 index 000000000000..98b28aabcdeb --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.10-03-deprecated.patch @@ -0,0 +1,89 @@ +undefines DEPRECATED which is unfortunately also defined (as a string) +in <linux/printk.h>. Realistically, this macro isn't even used, so this +doesn't matter much. But it hushes some very loud warnings. + +diff -rupN vmblock-only/shared/vm_assert.h vmblock-only.new/shared/vm_assert.h +--- vmblock-only/shared/vm_assert.h 2014-04-14 17:41:41.000000000 -0400 ++++ vmblock-only.new/shared/vm_assert.h 2014-10-11 17:37:23.010352172 -0400 +@@ -251,11 +251,13 @@ void WarningThrottled(uint32 *count, con + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED. %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmci-only/shared/vm_assert.h vmci-only.new/shared/vm_assert.h +--- vmci-only/shared/vm_assert.h 2014-04-14 17:41:41.000000000 -0400 ++++ vmci-only.new/shared/vm_assert.h 2014-10-11 17:37:08.936352130 -0400 +@@ -251,11 +251,13 @@ void WarningThrottled(uint32 *count, con + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED. %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmmon-only/include/vm_assert.h vmmon-only.new/include/vm_assert.h +--- vmmon-only/include/vm_assert.h 2014-04-14 20:06:20.000000000 -0400 ++++ vmmon-only.new/include/vm_assert.h 2014-10-11 17:36:45.289352058 -0400 +@@ -251,11 +251,13 @@ void WarningThrottled(uint32 *count, con + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED. %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vmnet-only/vm_assert.h vmnet-only.new/vm_assert.h +--- vmnet-only/vm_assert.h 2014-04-14 20:06:21.000000000 -0400 ++++ vmnet-only.new/vm_assert.h 2014-10-11 17:37:14.364352146 -0400 +@@ -251,11 +251,13 @@ void WarningThrottled(uint32 *count, con + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED. %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + +diff -rupN vsock-only/shared/vm_assert.h vsock-only.new/shared/vm_assert.h +--- vsock-only/shared/vm_assert.h 2014-04-14 17:41:41.000000000 -0400 ++++ vsock-only.new/shared/vm_assert.h 2014-10-11 17:37:02.778352111 -0400 +@@ -251,11 +251,13 @@ void WarningThrottled(uint32 *count, con + #define LOG_ONCE(_s) DO_ONCE(Log _s) + + #ifdef VMX86_DEVEL ++ #undef DEPRECATED + #define DEPRECATED(_fix) DO_ONCE( \ + Warning("%s:%d: %s is DEPRECATED. %s\n", \ + __FILE__, __LINE__, __FUNCTION__, \ + _fix)) + #else ++ #undef DEPRECATED + #define DEPRECATED(_fix) do {} while (0) + #endif + diff --git a/app-emulation/vmware-modules/files/279-3.10-04-dentry.patch b/app-emulation/vmware-modules/files/279-3.10-04-dentry.patch new file mode 100644 index 000000000000..f4f59d977408 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.10-04-dentry.patch @@ -0,0 +1,34 @@ +starting with kernel 3.6, d_revalidate takes an unsigned int "flags" +as the second argument, not a nameidata pointer! see fs/namei.c +for implementation + +diff -Naur vmblock-only/linux/dentry.c vmblock-only/linux/dentry.c +--- vmblock-only/linux/dentry.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/dentry.c 2014-04-26 10:58:03.062635343 -0400 +@@ -32,7 +32,7 @@ + #include "block.h" + + +-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); ++static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags); + + struct dentry_operations LinkDentryOps = { + .d_revalidate = DentryOpRevalidate, +@@ -60,7 +60,7 @@ + + static int + DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating +- struct nameidata *nd) // IN: lookup flags & intent ++ unsigned int flags) // IN: lookup flags & intent + { + VMBlockInodeInfo *iinfo; + struct nameidata actualNd; +@@ -101,7 +101,7 @@ + if (actualDentry && + actualDentry->d_op && + actualDentry->d_op->d_revalidate) { +- return actualDentry->d_op->d_revalidate(actualDentry, nd); ++ return actualDentry->d_op->d_revalidate(actualDentry, flags); + } + + if (compat_path_lookup(iinfo->name, 0, &actualNd)) { diff --git a/app-emulation/vmware-modules/files/279-3.10-05-inode.patch b/app-emulation/vmware-modules/files/279-3.10-05-inode.patch new file mode 100644 index 000000000000..01c88930899c --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.10-05-inode.patch @@ -0,0 +1,36 @@ +starting with kernel 3.6, d_revalidate takes an unsigned int "flags" +as the second argument, not a nameidata pointer! see fs/namei.c +for implementation. Also changing vfs_follow_link to nd_set_link. +See: https://lkml.org/lkml/2013/9/9/236 + +diff -Naur vmblock-only/linux/inode.c vmblock-only/linux/inode.c +--- vmblock-only/linux/inode.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/inode.c 2014-04-26 10:58:03.063635343 -0400 +@@ -36,7 +36,7 @@ + + /* Inode operations */ + static struct dentry *InodeOpLookup(struct inode *dir, +- struct dentry *dentry, struct nameidata *nd); ++ struct dentry *dentry, unsigned int flags); + static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) + static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); +@@ -75,7 +75,7 @@ + static struct dentry * + InodeOpLookup(struct inode *dir, // IN: parent directory's inode + struct dentry *dentry, // IN: dentry to lookup +- struct nameidata *nd) // IN: lookup intent and information ++ unsigned int flags) // IN: lookup intent and information + { + char *filename; + struct inode *inode; +@@ -221,7 +221,8 @@ + goto out; + } + +- ret = vfs_follow_link(nd, iinfo->name); ++ nd_set_link(nd, iinfo->name); ++ ret = 0; + + out: + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) diff --git a/app-emulation/vmware-modules/files/279-3.15-00-readlink.patch b/app-emulation/vmware-modules/files/279-3.15-00-readlink.patch new file mode 100644 index 000000000000..b8ee07822021 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.15-00-readlink.patch @@ -0,0 +1,15 @@ +replacing usage of vfs_readlink with new readlink_copy API +see: http://permalink.gmane.org/gmane.linux.kernel.commits.head/445090 + +diff -rupN vmblock-only/linux/inode.c vmblock-only/linux/inode.c +--- vmblock-only/linux/inode.c 2014-10-05 23:20:14.545218357 -0400 ++++ vmblock-only/linux/inode.c 2014-10-05 23:33:01.549259933 -0400 +@@ -178,7 +178,7 @@ InodeOpReadlink(struct dentry *dentry, + return -EINVAL; + } + +- return vfs_readlink(dentry, buffer, buflen, iinfo->name); ++ return readlink_copy(buffer, buflen, iinfo->name); + } + + diff --git a/app-emulation/vmware-modules/files/279-3.15-01-vsock.patch b/app-emulation/vmware-modules/files/279-3.15-01-vsock.patch new file mode 100644 index 000000000000..9e8d9d1a32f7 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.15-01-vsock.patch @@ -0,0 +1,46 @@ +removing the no longer existing second parameter to sk_data_ready +doesn't seem it ever served a purpose. + +diff -rupN vsock-only/linux/notify.c vsock-only.new/linux/notify.c +--- vsock-only/linux/notify.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notify.c 2014-10-05 23:46:47.943304728 -0400 +@@ -515,8 +515,11 @@ VSockVmciHandleWrote(struct sock *sk, + vsk = vsock_sk(sk); + PKT_FIELD(vsk, sentWaitingRead) = FALSE; + #endif +- ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +diff -rupN vsock-only/linux/notifyQState.c vsock-only.new/linux/notifyQState.c +--- vsock-only/linux/notifyQState.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notifyQState.c 2014-10-05 23:46:33.231303931 -0400 +@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, + struct sockaddr_vm *dst, // IN: unused + struct sockaddr_vm *src) // IN: unused + { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct + } + + /* See the comment in VSockVmciNotifyPktSendPostEnqueue */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + return err; diff --git a/app-emulation/vmware-modules/files/279-3.17-00-netdev.patch b/app-emulation/vmware-modules/files/279-3.17-00-netdev.patch new file mode 100644 index 000000000000..e3ee3aa09939 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.17-00-netdev.patch @@ -0,0 +1,16 @@ +new alloc_netdev requires a new parameter. All examples in the kernel i've seen just +use the constant NET_NAME_UNKNOWN. +origionally from: https://communities.vmware.com/message/2425189 + +diff -rupN vmnet-only/netif.c vmnet-only.new/netif.c +--- vmnet-only/netif.c 2013-11-06 00:40:52.000000000 -0500 ++++ vmnet-only.new/netif.c 2014-10-09 17:29:12.361307961 -0400 +@@ -149,7 +149,7 @@ VNetNetIf_Create(char *devName, // IN: + memcpy(deviceName, devName, sizeof deviceName); + NULL_TERMINATE_STRING(deviceName); + +- dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup); ++ dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_USER, VNetNetIfSetup); + if (!dev) { + retval = -ENOMEM; + goto out; diff --git a/app-emulation/vmware-modules/files/279-3.18-00-version-redefined.patch b/app-emulation/vmware-modules/files/279-3.18-00-version-redefined.patch new file mode 100644 index 000000000000..2d3882430580 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.18-00-version-redefined.patch @@ -0,0 +1,24 @@ +--- a/vmci-only/shared/vm_device_version.h 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmci-only/shared/vm_device_version.h 2015-02-24 03:58:06.041605450 +0300 +@@ -53,7 +53,9 @@ + * 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 +--- a/vmnet-only/vm_device_version.h 2015-02-07 03:54:16.000000000 +0300 ++++ c/vmnet-only/vm_device_version.h 2015-02-24 03:58:06.044604981 +0300 +@@ -53,7 +53,9 @@ + * 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 diff --git a/app-emulation/vmware-modules/files/279-3.19-00-compat-namei.patch b/app-emulation/vmware-modules/files/279-3.19-00-compat-namei.patch new file mode 100644 index 000000000000..ec73500e979c --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-00-compat-namei.patch @@ -0,0 +1,23 @@ +--- a/vmblock-only/shared/compat_namei.h 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmblock-only/shared/compat_namei.h 2015-02-24 03:51:25.235286047 +0300 +@@ -21,6 +21,20 @@ + + #include <linux/namei.h> + ++/* Copy-n-paste from kernel's source/fs/namei.c */ ++struct nameidata { ++ struct path path; ++ struct qstr last; ++ struct path root; ++ struct inode *inode; /* path.dentry.d_inode */ ++ unsigned int flags; ++ unsigned seq, m_seq; ++ int last_type; ++ unsigned depth; ++ struct file *base; ++ char *saved_names[MAX_NESTED_LINKS + 1]; ++}; ++ + /* + * In 2.6.25-rc2, dentry and mount objects were removed from the nameidata + * struct. They were both replaced with a struct path. diff --git a/app-emulation/vmware-modules/files/279-3.19-01-dentry.patch b/app-emulation/vmware-modules/files/279-3.19-01-dentry.patch new file mode 100644 index 000000000000..6f11a520a447 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-01-dentry.patch @@ -0,0 +1,13 @@ +--- a/vmnet-only/driver.c 2015-02-07 03:54:17.000000000 +0300 ++++ c/vmnet-only/driver.c 2015-02-24 03:58:06.043605137 +0300 +@@ -1191,8 +1191,8 @@ + struct inode *inode = NULL; + long err; + +- if (filp && filp->f_dentry) { +- inode = filp->f_dentry->d_inode; ++ if (filp && filp->f_path.dentry) { ++ inode = filp->f_path.dentry->d_inode; + } + err = VNetFileOpIoctl(inode, filp, iocmd, ioarg); + return err; diff --git a/app-emulation/vmware-modules/files/279-3.19-02-vmblock-path.patch b/app-emulation/vmware-modules/files/279-3.19-02-vmblock-path.patch new file mode 100644 index 000000000000..178d1478ae59 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-02-vmblock-path.patch @@ -0,0 +1,67 @@ +Sources: +https://531682.bugs.gentoo.org/attachment.cgi?id=396484 +https://531682.bugs.gentoo.org/attachment.cgi?id=396482 +diff -rupN vmblock-only.orig/linux/dentry.c vmblock-only/linux/dentry.c +--- vmblock-only.orig/linux/dentry.c 2015-02-14 18:05:46.000000000 -0500 ++++ vmblock-only/linux/dentry.c 2015-02-14 18:09:59.000000000 -0500 +@@ -63,7 +63,7 @@ DentryOpRevalidate(struct dentry *dentry + unsigned int flags) // IN: lookup flags & intent + { + VMBlockInodeInfo *iinfo; +- struct nameidata actualNd; ++ struct path actualNd; + struct dentry *actualDentry; + int ret; + +diff -rupN vmblock-only.orig/linux/filesystem.c vmblock-only/linux/filesystem.c +--- vmblock-only.orig/linux/filesystem.c 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/linux/filesystem.c 2015-02-14 18:10:49.000000000 -0500 +@@ -322,7 +322,7 @@ Iget(struct super_block *sb, // IN: f + { + VMBlockInodeInfo *iinfo; + struct inode *inode; +- struct nameidata actualNd; ++ struct path actualNd; + + ASSERT(sb); + +diff -rupN vmblock-only.orig/shared/compat_namei.h vmblock-only/shared/compat_namei.h +--- vmblock-only.orig/shared/compat_namei.h 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/shared/compat_namei.h 2015-02-14 18:08:38.000000000 -0500 +@@ -26,21 +26,21 @@ + * struct. They were both replaced with a struct path. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_vmw_nd_to_dentry(nd) (nd).path.dentry ++#define compat_vmw_nd_to_dentry(nd) (nd).dentry + #else + #define compat_vmw_nd_to_dentry(nd) (nd).dentry + #endif + + /* In 2.6.25-rc2, path_release(&nd) was replaced with path_put(&nd.path). */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_path_release(nd) path_put(&(nd)->path) ++#define compat_path_release(nd) path_put(nd) + #else + #define compat_path_release(nd) path_release(nd) + #endif + + /* path_lookup was removed in 2.6.39 merge window VFS merge */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) +-#define compat_path_lookup(name, flags, nd) kern_path(name, flags, &((nd)->path)) ++#define compat_path_lookup(name, flags, nd) kern_path(name, flags, nd) + #else + #define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd) + #endif +diff -u vmblock-only.orig/linux/file.c vmblock-only/linux/file.c +--- vmblock-only.orig/linux/file.c 2015-02-11 12:18:29.000000000 -0500 ++++ vmblock-only/linux/file.c 2015-02-11 12:41:41.000000000 -0500 +@@ -92,7 +92,7 @@ + * and that would try to acquire the inode's semaphore; if the two inodes + * are the same we'll deadlock. + */ +- if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) { ++ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) { + Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n"); + if (filp_close(actualFile, current->files) < 0) { + Warning("FileOpOpen: unable to close opened file.\n"); diff --git a/app-emulation/vmware-modules/files/279-3.19-03-iovec.patch b/app-emulation/vmware-modules/files/279-3.19-03-iovec.patch new file mode 100644 index 000000000000..b016fec1e652 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-03-iovec.patch @@ -0,0 +1,19 @@ +--- a/vmnet-only/userif.c 2015-02-07 03:54:17.000000000 +0300 ++++ c/vmnet-only/userif.c 2015-02-24 03:58:06.043605137 +0300 +@@ -523,7 +523,15 @@ + .iov_base = buf, + .iov_len = len, + }; +- return skb_copy_datagram_iovec(skb, 0, &iov, len); ++ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) ++ return skb_copy_datagram_iovec(skb, 0, &iov, len); ++#else ++ struct iov_iter to; ++ iov_iter_init(&to, READ, &iov, 1, len); ++ return skb_copy_datagram_iter(skb, 0, &to, len); ++#endif + } + + diff --git a/app-emulation/vmware-modules/files/279-3.19-04-iovec.patch b/app-emulation/vmware-modules/files/279-3.19-04-iovec.patch new file mode 100644 index 000000000000..9103c555663d --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-04-iovec.patch @@ -0,0 +1,39 @@ +diff -rupN vmci-only.old/linux/vmciKernelIf.c vmci-only/linux/vmciKernelIf.c +--- vmci-only.old/linux/vmciKernelIf.c 2015-04-28 18:05:56.000000000 +0000 ++++ vmci-only/linux/vmciKernelIf.c 2015-07-06 08:02:08.314262258 +0000 +@@ -40,6 +40,7 @@ + #include <linux/socket.h> /* For memcpy_{to,from}iovec(). */ + #include <linux/vmalloc.h> + #include <linux/wait.h> ++#include <linux/skbuff.h> + + #include "compat_highmem.h" + #include "compat_interrupt.h" +@@ -1227,11 +1228,11 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, + } + + if (isIovec) { +- struct iovec *iov = (struct iovec *)src; ++ struct msghdr *msg = (struct msghdr *)src; + int err; + + /* The iovec will track bytesCopied internally. */ +- err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy); ++ err = memcpy_from_msg((u8 *)va + pageOffset, msg, toCopy); + if (err != 0) { + if (!kernelIf->isDataMapped) { + kunmap(kernelIf->page[pageIndex]); +@@ -1302,11 +1303,11 @@ __VMCIMemcpyFromQueue(void *dest, + } + + if (isIovec) { +- struct iovec *iov = (struct iovec *)dest; ++ struct msghdr *msg = (struct msghdr *)dest; + int err; + + /* The iovec will track bytesCopied internally. */ +- err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy); ++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy); + if (err != 0) { + if (!kernelIf->isDataMapped) { + kunmap(kernelIf->page[pageIndex]); diff --git a/app-emulation/vmware-modules/files/279-3.19-05-vmci_qpair.patch b/app-emulation/vmware-modules/files/279-3.19-05-vmci_qpair.patch new file mode 100644 index 000000000000..1849a378456e --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-05-vmci_qpair.patch @@ -0,0 +1,24 @@ +diff -rupN vsock-only.old/linux/af_vsock.c vsock-only/linux/af_vsock.c +--- vsock-only.old/linux/af_vsock.c 2015-05-06 20:41:47.684046762 -0400 ++++ vsock-only/linux/af_vsock.c 2015-05-06 20:52:15.245080779 -0400 +@@ -4629,7 +4629,7 @@ VSockVmciStreamSendmsg(struct kiocb *kio + * able to send. + */ + +- written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov, ++ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov, + len - totalWritten, 0); + if (written < 0) { + err = -ENOMEM; +@@ -4874,9 +4874,9 @@ VSockVmciStreamRecvmsg(struct kiocb *kio + } + + if (flags & MSG_PEEK) { +- read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } else { +- read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } + + if (read < 0) { diff --git a/app-emulation/vmware-modules/files/279-3.19-06-vsock.patch b/app-emulation/vmware-modules/files/279-3.19-06-vsock.patch new file mode 100644 index 000000000000..2e412301d096 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-06-vsock.patch @@ -0,0 +1,15 @@ +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:31:35.710099711 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:36:33.260115840 -0400 +@@ -4727,7 +4727,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kioc + } + + /* Place the datagram payload in the user's iovec. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen); ++#else ++ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen); ++#endif + if (err) { + goto out; + } diff --git a/app-emulation/vmware-modules/files/279-3.19-07-vsock.patch b/app-emulation/vmware-modules/files/279-3.19-07-vsock.patch new file mode 100644 index 000000000000..8c9d3cb6dfe3 --- /dev/null +++ b/app-emulation/vmware-modules/files/279-3.19-07-vsock.patch @@ -0,0 +1,12 @@ +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:26:05.145081792 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:30:54.304097466 -0400 +@@ -4266,7 +4266,7 @@ VSockVmciDgramSendmsg(struct kiocb *kioc + goto out; + } + +- memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len); ++ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len); + + dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port); + dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port); diff --git a/app-emulation/vmware-modules/files/279-5.10-00-userns.patch b/app-emulation/vmware-modules/files/279-5.10-00-userns.patch new file mode 100644 index 000000000000..7a1bb987fecd --- /dev/null +++ b/app-emulation/vmware-modules/files/279-5.10-00-userns.patch @@ -0,0 +1,16 @@ +correctly initializes UID/GID values +gets UID correctly in light of user namespace API +origionally from https://462666.bugs.gentoo.org/attachment.cgi?id=342888 + +--- a/vmblock-only/linux/inode.c 2013-03-20 17:37:48.000000000 +0100 ++++ b/vmblock-only/linux/inode.c 2013-03-20 17:41:22.000000000 +0100 +@@ -135,7 +135,8 @@ + inode->i_size = INODE_TO_IINFO(inode)->nameLen; + inode->i_version = 1; + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; +- inode->i_uid = inode->i_gid = 0; ++ inode->i_uid = GLOBAL_ROOT_UID; ++ inode->i_gid = GLOBAL_ROOT_GID; + inode->i_op = &LinkInodeOps; + + d_add(dentry, inode); diff --git a/app-emulation/vmware-modules/files/304-3.10-00-dentry.patch b/app-emulation/vmware-modules/files/304-3.10-00-dentry.patch new file mode 100644 index 000000000000..5cc445fcadf9 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.10-00-dentry.patch @@ -0,0 +1,43 @@ +Minor change the API, now it just gets passed flags instead of a pointer to the nameidata +--- a/vmblock-only/linux/dentry.c 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmblock-only/linux/dentry.c 2015-02-24 03:58:06.038605919 +0300 +@@ -32,7 +32,11 @@ + #include "block.h" + + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) + static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); ++#else ++static int DentryOpRevalidate(struct dentry *dentry, unsigned int); ++#endif + + struct dentry_operations LinkDentryOps = { + .d_revalidate = DentryOpRevalidate, +@@ -58,9 +62,12 @@ + *---------------------------------------------------------------------------- + */ + +-static int +-DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating +- struct nameidata *nd) // IN: lookup flags & intent ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) ++static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd) ++#else ++static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags) ++#endif ++ + { + VMBlockInodeInfo *iinfo; + struct nameidata actualNd; +@@ -101,7 +108,11 @@ + if (actualDentry && + actualDentry->d_op && + actualDentry->d_op->d_revalidate) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) ++ return actualDentry->d_op->d_revalidate(actualDentry, flags); ++#else + return actualDentry->d_op->d_revalidate(actualDentry, nd); ++#endif + } + + if (compat_path_lookup(iinfo->name, 0, &actualNd)) { diff --git a/app-emulation/vmware-modules/files/304-3.10-01-inode.patch b/app-emulation/vmware-modules/files/304-3.10-01-inode.patch new file mode 100644 index 000000000000..e12d84d10e7b --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.10-01-inode.patch @@ -0,0 +1,94 @@ +Minor change the API, now it just gets passed flags instead of a pointer to the nameidata +Properly initializes UID/GID with repsect to namespaces +Some changes the readlink/setlink APIs +--- a/vmblock-only/linux/inode.c 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmblock-only/linux/inode.c 2015-02-24 03:58:06.039605762 +0300 +@@ -35,9 +35,15 @@ + + + /* Inode operations */ +-static struct dentry *InodeOpLookup(struct inode *dir, +- struct dentry *dentry, struct nameidata *nd); ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) ++static struct dentry *InodeOpLookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd); + static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); ++#else ++static struct dentry *InodeOpLookup(struct inode *, struct dentry *, unsigned int); ++static int InodeOpReadlink(struct dentry *, char __user *, int); ++#endif ++ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) + static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); + #else +@@ -49,12 +55,15 @@ + .lookup = InodeOpLookup, + }; + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) + static struct inode_operations LinkInodeOps = { ++#else ++struct inode_operations LinkInodeOps = { ++#endif + .readlink = InodeOpReadlink, + .follow_link = InodeOpFollowlink, + }; + +- + /* + *---------------------------------------------------------------------------- + * +@@ -75,7 +84,11 @@ + static struct dentry * + InodeOpLookup(struct inode *dir, // IN: parent directory's inode + struct dentry *dentry, // IN: dentry to lookup +- struct nameidata *nd) // IN: lookup intent and information ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) ++ struct nameidata *nd) // IN: lookup intent and information ++#else ++ unsigned int flags) ++#endif + { + char *filename; + struct inode *inode; +@@ -135,7 +148,12 @@ + inode->i_size = INODE_TO_IINFO(inode)->nameLen; + inode->i_version = 1; + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) + inode->i_uid = inode->i_gid = 0; ++#else ++ inode->i_gid = make_kgid(current_user_ns(), 0); ++ inode->i_uid = make_kuid(current_user_ns(), 0); ++#endif + inode->i_op = &LinkInodeOps; + + d_add(dentry, inode); +@@ -177,7 +195,12 @@ + return -EINVAL; + } + +- return vfs_readlink(dentry, buffer, buflen, iinfo->name); ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99) ++ return vfs_readlink(dentry, buffer, buflen, iinfo->name); ++#else ++ return readlink_copy(buffer, buflen, iinfo->name); ++#endif ++ + } + + +@@ -221,7 +244,7 @@ + goto out; + } + +- ret = vfs_follow_link(nd, iinfo->name); ++ nd_set_link(nd, iinfo->name); + + out: + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) +@@ -230,3 +253,4 @@ + return ret; + #endif + } ++ diff --git a/app-emulation/vmware-modules/files/304-3.10-02-control.patch b/app-emulation/vmware-modules/files/304-3.10-02-control.patch new file mode 100644 index 000000000000..928835337511 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.10-02-control.patch @@ -0,0 +1,57 @@ +The API to create proc entries now takes the file ops structure directly, instead of being set after the fact +Using new __getname/__putname API +--- a/vmblock-only/linux/control.c 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmblock-only/linux/control.c 2015-02-24 03:58:06.038605919 +0300 +@@ -208,9 +208,11 @@ + VMBlockSetProcEntryOwner(controlProcMountpoint); + + /* Create /proc/fs/vmblock/dev */ +- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, +- VMBLOCK_CONTROL_MODE, +- controlProcDirEntry); ++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, ++ VMBLOCK_CONTROL_MODE, ++ controlProcDirEntry, ++ &ControlFileOps); ++ + if (!controlProcEntry) { + Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n"); + remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry); +@@ -218,7 +220,10 @@ + return -EINVAL; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) + controlProcEntry->proc_fops = &ControlFileOps; ++#endif ++ + return 0; + } + +@@ -287,18 +287,24 @@ ExecuteBlockOp(const char __user *buf, + int i; + int retval; + +- name = getname(buf); ++ name = __getname(); + if (IS_ERR(name)) { + return PTR_ERR(name); + } + ++ i = strncpy_from_user(name, buf, PATH_MAX); ++ if (i < 0 || i == PATH_MAX) { ++ __putname(name); ++ return -EINVAL; ++ } ++ + for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) { + name[i] = '\0'; + } + + retval = i < 0 ? -EINVAL : blockOp(name, blocker); + +- putname(name); ++ __putname(name); + + return retval; + } diff --git a/app-emulation/vmware-modules/files/304-3.10-03-inline.patch b/app-emulation/vmware-modules/files/304-3.10-03-inline.patch new file mode 100644 index 000000000000..fa8f36a35c29 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.10-03-inline.patch @@ -0,0 +1,14 @@ +Hushes a warning +--- a/vmmon-only/linux/driver.c 2015-02-07 03:54:16.000000000 +0300 ++++ c/vmmon-only/linux/driver.c 2015-02-24 03:58:06.042605293 +0300 +@@ -1328,7 +1328,9 @@ + *----------------------------------------------------------------------------- + */ + +-__attribute__((always_inline)) static Bool ++#include <linux/compiler-gcc.h> ++ ++__always_inline static Bool + LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min + { + TSCDelta tscDelta; diff --git a/app-emulation/vmware-modules/files/304-3.11-00-readdir.patch b/app-emulation/vmware-modules/files/304-3.11-00-readdir.patch new file mode 100644 index 000000000000..b2f76d3e2b30 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.11-00-readdir.patch @@ -0,0 +1,41 @@ +replaces usage of vfs_readdir with iterate_dir. origionally found here: +https://bugs.gentoo.org/show_bug.cgi?id=508204 + +diff -Naur vmblock-only/linux/file.c vmblock-only/linux/file.c +--- vmblock-only/linux/file.c 2013-11-05 23:33:26.000000000 -0500 ++++ vmblock-only/linux/file.c 2014-04-26 10:58:03.062635343 -0400 +@@ -166,11 +166,9 @@ + + static int + FileOpReaddir(struct file *file, // IN +- void *dirent, // IN +- filldir_t filldir) // IN ++ struct dir_context *ctx) + { + int ret; +- FilldirInfo info; + struct file *actualFile; + + if (!file) { +@@ -184,11 +182,8 @@ + return -EINVAL; + } + +- info.filldir = filldir; +- info.dirent = dirent; +- + actualFile->f_pos = file->f_pos; +- ret = vfs_readdir(actualFile, Filldir, &info); ++ ret = iterate_dir(actualFile, ctx); + file->f_pos = actualFile->f_pos; + + return ret; +@@ -237,7 +232,7 @@ + + + struct file_operations RootFileOps = { +- .readdir = FileOpReaddir, ++ .iterate = FileOpReaddir, + .open = FileOpOpen, + .release = FileOpRelease, + }; diff --git a/app-emulation/vmware-modules/files/304-3.11-01-filldir.patch b/app-emulation/vmware-modules/files/304-3.11-01-filldir.patch new file mode 100644 index 000000000000..2eec99b7c1f8 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.11-01-filldir.patch @@ -0,0 +1,53 @@ +simply remove the code for Filldir since it is no longer used with the new +iterate_dir API + +diff -rupN vmblock-only/linux/file.c vmblock-only.new/linux/file.c +--- vmblock-only/linux/file.c 2014-10-07 23:22:46.832469618 -0400 ++++ vmblock-only.new/linux/file.c 2014-10-07 23:24:35.276472720 -0400 +@@ -38,46 +38,6 @@ typedef u64 inode_num_t; + typedef ino_t inode_num_t; + #endif + +-/* Specifically for our filldir_t callback */ +-typedef struct FilldirInfo { +- filldir_t filldir; +- void *dirent; +-} FilldirInfo; +- +- +-/* +- *---------------------------------------------------------------------------- +- * +- * Filldir -- +- * +- * Callback function for readdir that we use in place of the one provided. +- * This allows us to specify that each dentry is a symlink, but pass through +- * everything else to the original filldir function. +- * +- * Results: +- * Original filldir's return value. +- * +- * Side effects: +- * Directory information gets copied to user's buffer. +- * +- *---------------------------------------------------------------------------- +- */ +- +-static int +-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir +- const char *name, // IN: Dirent name +- int namelen, // IN: len of dirent's name +- loff_t offset, // IN: Offset +- inode_num_t ino, // IN: Inode number of dirent +- unsigned int d_type) // IN: Type of file +-{ +- FilldirInfo *info = buf; +- +- /* Specify DT_LNK regardless */ +- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK); +-} +- +- + /* File operations */ + + /* diff --git a/app-emulation/vmware-modules/files/304-3.15-00-vsock.patch b/app-emulation/vmware-modules/files/304-3.15-00-vsock.patch new file mode 100644 index 000000000000..9e8d9d1a32f7 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.15-00-vsock.patch @@ -0,0 +1,46 @@ +removing the no longer existing second parameter to sk_data_ready +doesn't seem it ever served a purpose. + +diff -rupN vsock-only/linux/notify.c vsock-only.new/linux/notify.c +--- vsock-only/linux/notify.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notify.c 2014-10-05 23:46:47.943304728 -0400 +@@ -515,8 +515,11 @@ VSockVmciHandleWrote(struct sock *sk, + vsk = vsock_sk(sk); + PKT_FIELD(vsk, sentWaitingRead) = FALSE; + #endif +- ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +diff -rupN vsock-only/linux/notifyQState.c vsock-only.new/linux/notifyQState.c +--- vsock-only/linux/notifyQState.c 2013-11-05 23:33:27.000000000 -0500 ++++ vsock-only.new/linux/notifyQState.c 2014-10-05 23:46:33.231303931 -0400 +@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, + struct sockaddr_vm *dst, // IN: unused + struct sockaddr_vm *src) // IN: unused + { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + +@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct + } + + /* See the comment in VSockVmciNotifyPktSendPostEnqueue */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) ++ sk->sk_data_ready(sk); ++#else + sk->sk_data_ready(sk, 0); ++#endif + } + + return err; diff --git a/app-emulation/vmware-modules/files/304-3.18-00-version-redefined.patch b/app-emulation/vmware-modules/files/304-3.18-00-version-redefined.patch new file mode 100644 index 000000000000..22d6325c9a90 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.18-00-version-redefined.patch @@ -0,0 +1,25 @@ +Hushes some (but not all warnings) relating to redefinitions of this define +--- a/vmci-only/shared/vm_device_version.h 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmci-only/shared/vm_device_version.h 2015-02-24 03:58:06.041605450 +0300 +@@ -53,7 +53,9 @@ + * 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 +--- a/vmnet-only/vm_device_version.h 2015-02-07 03:54:16.000000000 +0300 ++++ c/vmnet-only/vm_device_version.h 2015-02-24 03:58:06.044604981 +0300 +@@ -53,7 +53,9 @@ + * 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 diff --git a/app-emulation/vmware-modules/files/304-3.19-00-compat-namei.patch b/app-emulation/vmware-modules/files/304-3.19-00-compat-namei.patch new file mode 100644 index 000000000000..0182077254a1 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-00-compat-namei.patch @@ -0,0 +1,24 @@ +A copy of this since it is no longer exported by the kernel headers +--- a/vmblock-only/shared/compat_namei.h 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmblock-only/shared/compat_namei.h 2015-02-24 03:51:25.235286047 +0300 +@@ -21,6 +21,20 @@ + + #include <linux/namei.h> + ++/* Copy-n-paste from kernel's source/fs/namei.c */ ++struct nameidata { ++ struct path path; ++ struct qstr last; ++ struct path root; ++ struct inode *inode; /* path.dentry.d_inode */ ++ unsigned int flags; ++ unsigned seq, m_seq; ++ int last_type; ++ unsigned depth; ++ struct file *base; ++ char *saved_names[MAX_NESTED_LINKS + 1]; ++}; ++ + /* + * In 2.6.25-rc2, dentry and mount objects were removed from the nameidata + * struct. They were both replaced with a struct path. diff --git a/app-emulation/vmware-modules/files/304-3.19-01-dentry.patch b/app-emulation/vmware-modules/files/304-3.19-01-dentry.patch new file mode 100644 index 000000000000..3e3be6542dda --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-01-dentry.patch @@ -0,0 +1,14 @@ +There is an level of abstrxtion in the newre API as of 3.19 here +--- a/vmnet-only/driver.c 2015-02-07 03:54:17.000000000 +0300 ++++ c/vmnet-only/driver.c 2015-02-24 03:58:06.043605137 +0300 +@@ -1191,8 +1191,8 @@ + struct inode *inode = NULL; + long err; + +- if (filp && filp->f_dentry) { +- inode = filp->f_dentry->d_inode; ++ if (filp && filp->f_path.dentry) { ++ inode = filp->f_path.dentry->d_inode; + } + err = VNetFileOpIoctl(inode, filp, iocmd, ioarg); + return err; diff --git a/app-emulation/vmware-modules/files/304-3.19-02-vmblock-path.patch b/app-emulation/vmware-modules/files/304-3.19-02-vmblock-path.patch new file mode 100644 index 000000000000..178d1478ae59 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-02-vmblock-path.patch @@ -0,0 +1,67 @@ +Sources: +https://531682.bugs.gentoo.org/attachment.cgi?id=396484 +https://531682.bugs.gentoo.org/attachment.cgi?id=396482 +diff -rupN vmblock-only.orig/linux/dentry.c vmblock-only/linux/dentry.c +--- vmblock-only.orig/linux/dentry.c 2015-02-14 18:05:46.000000000 -0500 ++++ vmblock-only/linux/dentry.c 2015-02-14 18:09:59.000000000 -0500 +@@ -63,7 +63,7 @@ DentryOpRevalidate(struct dentry *dentry + unsigned int flags) // IN: lookup flags & intent + { + VMBlockInodeInfo *iinfo; +- struct nameidata actualNd; ++ struct path actualNd; + struct dentry *actualDentry; + int ret; + +diff -rupN vmblock-only.orig/linux/filesystem.c vmblock-only/linux/filesystem.c +--- vmblock-only.orig/linux/filesystem.c 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/linux/filesystem.c 2015-02-14 18:10:49.000000000 -0500 +@@ -322,7 +322,7 @@ Iget(struct super_block *sb, // IN: f + { + VMBlockInodeInfo *iinfo; + struct inode *inode; +- struct nameidata actualNd; ++ struct path actualNd; + + ASSERT(sb); + +diff -rupN vmblock-only.orig/shared/compat_namei.h vmblock-only/shared/compat_namei.h +--- vmblock-only.orig/shared/compat_namei.h 2014-11-20 19:29:15.000000000 -0500 ++++ vmblock-only/shared/compat_namei.h 2015-02-14 18:08:38.000000000 -0500 +@@ -26,21 +26,21 @@ + * struct. They were both replaced with a struct path. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_vmw_nd_to_dentry(nd) (nd).path.dentry ++#define compat_vmw_nd_to_dentry(nd) (nd).dentry + #else + #define compat_vmw_nd_to_dentry(nd) (nd).dentry + #endif + + /* In 2.6.25-rc2, path_release(&nd) was replaced with path_put(&nd.path). */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +-#define compat_path_release(nd) path_put(&(nd)->path) ++#define compat_path_release(nd) path_put(nd) + #else + #define compat_path_release(nd) path_release(nd) + #endif + + /* path_lookup was removed in 2.6.39 merge window VFS merge */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) +-#define compat_path_lookup(name, flags, nd) kern_path(name, flags, &((nd)->path)) ++#define compat_path_lookup(name, flags, nd) kern_path(name, flags, nd) + #else + #define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd) + #endif +diff -u vmblock-only.orig/linux/file.c vmblock-only/linux/file.c +--- vmblock-only.orig/linux/file.c 2015-02-11 12:18:29.000000000 -0500 ++++ vmblock-only/linux/file.c 2015-02-11 12:41:41.000000000 -0500 +@@ -92,7 +92,7 @@ + * and that would try to acquire the inode's semaphore; if the two inodes + * are the same we'll deadlock. + */ +- if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) { ++ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) { + Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n"); + if (filp_close(actualFile, current->files) < 0) { + Warning("FileOpOpen: unable to close opened file.\n"); diff --git a/app-emulation/vmware-modules/files/304-3.19-03-iovec.patch b/app-emulation/vmware-modules/files/304-3.19-03-iovec.patch new file mode 100644 index 000000000000..726d1173b3b3 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-03-iovec.patch @@ -0,0 +1,20 @@ +using new iterator based API, this matches exactly the changes made upstream as of vmware-modules-304.2 +--- a/vmnet-only/userif.c 2015-02-07 03:54:17.000000000 +0300 ++++ c/vmnet-only/userif.c 2015-02-24 03:58:06.043605137 +0300 +@@ -523,7 +523,15 @@ + .iov_base = buf, + .iov_len = len, + }; +- return skb_copy_datagram_iovec(skb, 0, &iov, len); ++ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) ++ return skb_copy_datagram_iovec(skb, 0, &iov, len); ++#else ++ struct iov_iter to; ++ iov_iter_init(&to, READ, &iov, 1, len); ++ return skb_copy_datagram_iter(skb, 0, &to, len); ++#endif + } + + diff --git a/app-emulation/vmware-modules/files/304-3.19-04-iovec.patch b/app-emulation/vmware-modules/files/304-3.19-04-iovec.patch new file mode 100644 index 000000000000..83f0cc8fcbbf --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-04-iovec.patch @@ -0,0 +1,59 @@ +Some parts of the iovec API were replaced by the similar message API. Refactoring the code to use that. +--- a/vmci-only/linux/vmciKernelIf.c 2015-02-07 03:11:55.000000000 +0300 ++++ c/vmci-only/linux/vmciKernelIf.c 2015-02-24 03:58:06.041605450 +0300 +@@ -40,6 +40,7 @@ + #include <linux/socket.h> /* For memcpy_{to,from}iovec(). */ + #include <linux/vmalloc.h> + #include <linux/wait.h> ++#include <linux/skbuff.h> + + #include "compat_highmem.h" + #include "compat_interrupt.h" +@@ -1196,21 +1197,21 @@ + } else { + toCopy = size - bytesCopied; + } +- ++ /* Code cloned from kernels drivers/misc/vmw_vmci/vmci_queue_pair.c */ + if (isIovec) { +- struct iovec *iov = (struct iovec *)src; +- int err; ++ struct msghdr *msg = (struct msghdr *)src; ++ int err; + +- /* The iovec will track bytesCopied internally. */ +- err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy); +- if (err != 0) { +- if (kernelIf->host) { +- kunmap(kernelIf->u.h.page[pageIndex]); ++ /* The iovec will track bytes_copied internally. */ ++ err = memcpy_from_msg((u8 *)va + pageOffset, msg, toCopy); ++ if (err != 0) { ++ if (kernelIf->host) ++ kunmap(kernelIf->u.h.page[pageIndex]); ++ return VMCI_ERROR_INVALID_ARGS; + } +- return VMCI_ERROR_INVALID_ARGS; +- } +- } else { +- memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy); ++ } else { ++ memcpy((u8 *)va + pageOffset, ++ (u8 *)src + bytesCopied, toCopy); + } + + bytesCopied += toCopy; +@@ -1273,11 +1274,11 @@ + } + + if (isIovec) { +- struct iovec *iov = (struct iovec *)dest; ++ struct msghdr *msg = (struct msghdr *)dest; + int err; + + /* The iovec will track bytesCopied internally. */ +- err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy); ++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy); + if (err != 0) { + if (kernelIf->host) { + kunmap(kernelIf->u.h.page[pageIndex]); diff --git a/app-emulation/vmware-modules/files/304-3.19-05-vmci_qpair.patch b/app-emulation/vmware-modules/files/304-3.19-05-vmci_qpair.patch new file mode 100644 index 000000000000..4dec3c468206 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-05-vmci_qpair.patch @@ -0,0 +1,25 @@ +Some parts of the iovec API were replaced by the similar message API. Refactoring the code to use that. +diff -rupN vsock-only.old/linux/af_vsock.c vsock-only/linux/af_vsock.c +--- vsock-only.old/linux/af_vsock.c 2015-05-06 20:41:47.684046762 -0400 ++++ vsock-only/linux/af_vsock.c 2015-05-06 20:52:15.245080779 -0400 +@@ -4629,7 +4629,7 @@ VSockVmciStreamSendmsg(struct kiocb *kio + * able to send. + */ + +- written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov, ++ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov, + len - totalWritten, 0); + if (written < 0) { + err = -ENOMEM; +@@ -4874,9 +4874,9 @@ VSockVmciStreamRecvmsg(struct kiocb *kio + } + + if (flags & MSG_PEEK) { +- read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } else { +- read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0); ++ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0); + } + + if (read < 0) { diff --git a/app-emulation/vmware-modules/files/304-3.19-06-vsock.patch b/app-emulation/vmware-modules/files/304-3.19-06-vsock.patch new file mode 100644 index 000000000000..9a2096e679a4 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-06-vsock.patch @@ -0,0 +1,16 @@ +Some parts of the iovec API were replaced by the similar message API. Refactoring the code to use that. +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:31:35.710099711 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:36:33.260115840 -0400 +@@ -4727,7 +4727,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kioc + } + + /* Place the datagram payload in the user's iovec. */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) + err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen); ++#else ++ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen); ++#endif + if (err) { + goto out; + } diff --git a/app-emulation/vmware-modules/files/304-3.19-07-vsock.patch b/app-emulation/vmware-modules/files/304-3.19-07-vsock.patch new file mode 100644 index 000000000000..6aec2cd3d7b5 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-3.19-07-vsock.patch @@ -0,0 +1,13 @@ +Some parts of the iovec API were replaced by the similar message API. Refactoring the code to use that. +diff -rupN vsock-only/linux/af_vsock.c vsock-only.new/linux/af_vsock.c +--- vsock-only/linux/af_vsock.c 2015-05-05 11:26:05.145081792 -0400 ++++ vsock-only.new/linux/af_vsock.c 2015-05-05 11:30:54.304097466 -0400 +@@ -4266,7 +4266,7 @@ VSockVmciDgramSendmsg(struct kiocb *kioc + goto out; + } + +- memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len); ++ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len); + + dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port); + dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port); diff --git a/app-emulation/vmware-modules/files/304-apic.patch b/app-emulation/vmware-modules/files/304-apic.patch new file mode 100644 index 000000000000..66cd45933246 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-apic.patch @@ -0,0 +1,12 @@ +diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c +index f1f4b10..c43242f 100644 +--- a/vmmon-only/linux/hostif.c ++++ b/vmmon-only/linux/hostif.c +@@ -55,6 +55,7 @@ + #include <linux/kthread.h> + #include <linux/wait.h> + ++#include <asm/apic.h> + + #include "vmware.h" + #include "x86apic.h" diff --git a/app-emulation/vmware-modules/files/304-hardened.patch b/app-emulation/vmware-modules/files/304-hardened.patch new file mode 100644 index 000000000000..cc3e04152877 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-hardened.patch @@ -0,0 +1,113 @@ +diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c +index b21dd44..960c2aa 100644 +--- a/vmmon-only/linux/driver.c ++++ b/vmmon-only/linux/driver.c +@@ -178,7 +178,22 @@ static struct vm_operations_struct vmuser_mops = { + #endif + }; + +-static struct file_operations vmuser_fops; ++static struct file_operations vmuser_fops = { ++ .owner = THIS_MODULE, ++ .poll = LinuxDriverPoll, ++#ifdef HAVE_UNLOCKED_IOCTL ++ .unlocked_ioctl = LinuxDriver_UnlockedIoctl, ++#else ++ .ioctl = LinuxDriver_Ioctl, ++#endif ++#ifdef HAVE_COMPAT_IOCTL ++ .compat_ioctl = LinuxDriver_UnlockedIoctl, ++#endif ++ .open = LinuxDriver_Open, ++ .release = LinuxDriver_Close, ++ .mmap = LinuxDriverMmap ++}; ++ + static struct timer_list tscTimer; + + /* +@@ -357,27 +372,6 @@ init_module(void) + spin_lock_init(&linuxState.pollListLock); + #endif + +- /* +- * Initialize the file_operations structure. Because this code is always +- * compiled as a module, this is fine to do it here and not in a static +- * initializer. +- */ +- +- memset(&vmuser_fops, 0, sizeof vmuser_fops); +- vmuser_fops.owner = THIS_MODULE; +- vmuser_fops.poll = LinuxDriverPoll; +-#ifdef HAVE_UNLOCKED_IOCTL +- vmuser_fops.unlocked_ioctl = LinuxDriver_UnlockedIoctl; +-#else +- vmuser_fops.ioctl = LinuxDriver_Ioctl; +-#endif +-#ifdef HAVE_COMPAT_IOCTL +- vmuser_fops.compat_ioctl = LinuxDriver_UnlockedIoctl; +-#endif +- vmuser_fops.open = LinuxDriver_Open; +- vmuser_fops.release = LinuxDriver_Close; +- vmuser_fops.mmap = LinuxDriverMmap; +- + #ifdef VMX86_DEVEL + devel_init_module(); + linuxState.minor = 0; +diff --git a/vmnet-only/driver.c b/vmnet-only/driver.c +index b12b982..40bd4cf 100644 +--- a/vmnet-only/driver.c ++++ b/vmnet-only/driver.c +@@ -165,7 +165,22 @@ static long VNetFileOpUnlockedIoctl(struct file * filp, + unsigned int iocmd, unsigned long ioarg); + #endif + +-static struct file_operations vnetFileOps; ++static struct file_operations vnetFileOps = { ++ .owner = THIS_MODULE, ++ .read = VNetFileOpRead, ++ .write = VNetFileOpWrite, ++ .poll = VNetFileOpPoll, ++#ifdef HAVE_UNLOCKED_IOCTL ++ .unlocked_ioctl = VNetFileOpUnlockedIoctl, ++#else ++ .ioctl = VNetFileOpIoctl, ++#endif ++#ifdef HAVE_COMPAT_IOCTL ++ .compat_ioctl = VNetFileOpUnlockedIoctl, ++#endif ++ .open = VNetFileOpOpen, ++ .release = VNetFileOpClose ++}; + + /* + * Utility functions +@@ -476,28 +491,6 @@ init_module(void) + goto err_proto; + } + +- /* +- * Initialize the file_operations structure. Because this code is always +- * compiled as a module, this is fine to do it here and not in a static +- * initializer. +- */ +- +- memset(&vnetFileOps, 0, sizeof vnetFileOps); +- vnetFileOps.owner = THIS_MODULE; +- vnetFileOps.read = VNetFileOpRead; +- vnetFileOps.write = VNetFileOpWrite; +- vnetFileOps.poll = VNetFileOpPoll; +-#ifdef HAVE_UNLOCKED_IOCTL +- vnetFileOps.unlocked_ioctl = VNetFileOpUnlockedIoctl; +-#else +- vnetFileOps.ioctl = VNetFileOpIoctl; +-#endif +-#ifdef HAVE_COMPAT_IOCTL +- vnetFileOps.compat_ioctl = VNetFileOpUnlockedIoctl; +-#endif +- vnetFileOps.open = VNetFileOpOpen; +- vnetFileOps.release = VNetFileOpClose; +- + retval = register_chrdev(VNET_MAJOR_NUMBER, "vmnet", &vnetFileOps); + if (retval) { + LOG(0, (KERN_NOTICE "/dev/vmnet: could not register major device %d\n", diff --git a/app-emulation/vmware-modules/files/304-makefile-include.patch b/app-emulation/vmware-modules/files/304-makefile-include.patch new file mode 100644 index 000000000000..39c300030805 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-makefile-include.patch @@ -0,0 +1,65 @@ +diff --git a/vmblock-only/Makefile.kernel b/vmblock-only/Makefile.kernel +index ab7a727..e3ec9d2 100644 +--- a/vmblock-only/Makefile.kernel ++++ b/vmblock-only/Makefile.kernel +@@ -19,7 +19,7 @@ + + INCLUDE += -I$(SRCROOT)/include + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachecreate.c, -DVMW_KMEMCR_HAS_DTOR, ) + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachector.c, -DVMW_KMEMCR_CTOR_HAS_3_ARGS, ) +diff --git a/vmci-only/Makefile.kernel b/vmci-only/Makefile.kernel +index ba343ee..861ea83 100644 +--- a/vmci-only/Makefile.kernel ++++ b/vmci-only/Makefile.kernel +@@ -21,7 +21,7 @@ CC_OPTS += -DVMCI + + INCLUDE += -I$(SRCROOT)/shared -I$(SRCROOT)/common -I$(SRCROOT)/linux + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + + obj-m += $(DRIVER).o + +diff --git a/vmmon-only/Makefile.kernel b/vmmon-only/Makefile.kernel +index 8770d1d..c4746c3 100644 +--- a/vmmon-only/Makefile.kernel ++++ b/vmmon-only/Makefile.kernel +@@ -22,7 +22,7 @@ CC_OPTS += -DVMMON -DVMCORE + INCLUDE := -I$(SRCROOT)/include -I$(SRCROOT)/common -I$(SRCROOT)/linux \ + -I$(SRCROOT)/vmcore + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + + EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/autoconf/smpcall.c, -DVMW_HAVE_SMP_CALL_3ARG, ) + +diff --git a/vmnet-only/Makefile.kernel b/vmnet-only/Makefile.kernel +index d1e3133..665d428 100644 +--- a/vmnet-only/Makefile.kernel ++++ b/vmnet-only/Makefile.kernel +@@ -19,7 +19,7 @@ + + INCLUDE := -I$(SRCROOT) + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/netdev_has_net.c,-DVMW_NETDEV_HAS_NET, ) + EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/netdev_has_dev_net.c,-DVMW_NETDEV_HAS_DEV_NET, ) + EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/nfhook_uses_skb.c,-DVMW_NFHOOK_USES_SKB, ) +diff --git a/vsock-only/Makefile.kernel b/vsock-only/Makefile.kernel +index b4629ee..264b8cb 100644 +--- a/vsock-only/Makefile.kernel ++++ b/vsock-only/Makefile.kernel +@@ -25,7 +25,7 @@ INCLUDE += -I$(SRCROOT)/include + INCLUDE += -I$(SRCROOT)/linux + INCLUDE += -I$(SRCROOT)/common + +-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) ++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE) + EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/netcreate_num_params.c, -DVMW_NETCREATE_KERNARG, ) + + diff --git a/app-emulation/vmware-modules/files/304-makefile-kernel-dir.patch b/app-emulation/vmware-modules/files/304-makefile-kernel-dir.patch new file mode 100644 index 000000000000..1a647a3302d8 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-makefile-kernel-dir.patch @@ -0,0 +1,85 @@ +diff --git a/vmblock-only/Makefile b/vmblock-only/Makefile +index 2b81323..746c8b8 100644 +--- a/vmblock-only/Makefile ++++ b/vmblock-only/Makefile +@@ -49,10 +49,10 @@ VM_UNAME = $(shell uname -r) + ifdef LINUXINCLUDE + HEADER_DIR = $(LINUXINCLUDE) + else +-HEADER_DIR = /lib/modules/$(VM_UNAME)/build/include ++HEADER_DIR = $(KERNEL_DIR) + endif + +-BUILD_DIR = $(HEADER_DIR)/.. ++BUILD_DIR = $(KBUILD_OUTPUT) + + DRIVER := vmblock + PRODUCT := ws +diff --git a/vmci-only/Makefile b/vmci-only/Makefile +index 8e9c5be..6ec828b 100644 +--- a/vmci-only/Makefile ++++ b/vmci-only/Makefile +@@ -49,10 +49,10 @@ VM_UNAME = $(shell uname -r) + ifdef LINUXINCLUDE + HEADER_DIR = $(LINUXINCLUDE) + else +-HEADER_DIR = /lib/modules/$(VM_UNAME)/build/include ++HEADER_DIR = $(KERNEL_DIR) + endif + +-BUILD_DIR = $(HEADER_DIR)/.. ++BUILD_DIR = $(KBUILD_OUTPUT) + + DRIVER := vmci + PRODUCT := ws +diff --git a/vmmon-only/Makefile b/vmmon-only/Makefile +index 5bd867b..91a83d4 100644 +--- a/vmmon-only/Makefile ++++ b/vmmon-only/Makefile +@@ -49,10 +49,10 @@ VM_UNAME = $(shell uname -r) + ifdef LINUXINCLUDE + HEADER_DIR = $(LINUXINCLUDE) + else +-HEADER_DIR = /lib/modules/$(VM_UNAME)/build/include ++HEADER_DIR = $(KERNEL_DIR) + endif + +-BUILD_DIR = $(HEADER_DIR)/.. ++BUILD_DIR = $(KBUILD_OUTPUT) + + DRIVER := vmmon + PRODUCT := @@PRODUCT@@ +diff --git a/vmnet-only/Makefile b/vmnet-only/Makefile +index d4eb73c..c7c6d38 100644 +--- a/vmnet-only/Makefile ++++ b/vmnet-only/Makefile +@@ -49,10 +49,10 @@ VM_UNAME = $(shell uname -r) + ifdef LINUXINCLUDE + HEADER_DIR = $(LINUXINCLUDE) + else +-HEADER_DIR = /lib/modules/$(VM_UNAME)/build/include ++HEADER_DIR = $(KERNEL_DIR) + endif + +-BUILD_DIR = $(HEADER_DIR)/.. ++BUILD_DIR = $(KBUILD_OUTPUT) + + DRIVER := vmnet + PRODUCT := @@PRODUCT@@ +diff --git a/vsock-only/Makefile b/vsock-only/Makefile +index 93dd61d..9765696 100644 +--- a/vsock-only/Makefile ++++ b/vsock-only/Makefile +@@ -49,10 +49,10 @@ VM_UNAME = $(shell uname -r) + ifdef LINUXINCLUDE + HEADER_DIR = $(LINUXINCLUDE) + else +-HEADER_DIR = /lib/modules/$(VM_UNAME)/build/include ++HEADER_DIR = $(KERNEL_DIR) + endif + +-BUILD_DIR = $(HEADER_DIR)/.. ++BUILD_DIR = $(KBUILD_OUTPUT) + + DRIVER := vsock + PRODUCT := ws diff --git a/app-emulation/vmware-modules/files/304-netdevice.patch b/app-emulation/vmware-modules/files/304-netdevice.patch new file mode 100644 index 000000000000..35231a3205e3 --- /dev/null +++ b/app-emulation/vmware-modules/files/304-netdevice.patch @@ -0,0 +1,24 @@ +diff --git a/vmnet-only/compat_netdevice.h b/vmnet-only/compat_netdevice.h +index 7a56304..9ff4548 100644 +--- a/vmnet-only/compat_netdevice.h ++++ b/vmnet-only/compat_netdevice.h +@@ -47,6 +47,19 @@ + # define net_device device + #endif + ++/* it looks like these have been removed from the kernel 3.1 ++ * probably because the "transition" is considered complete. ++ * so to keep this source compatible we just redefine them like they were ++ * previously ++ */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0) ++#define HAVE_ALLOC_NETDEV /* feature macro: alloc_xxxdev ++ functions are available. */ ++#define HAVE_FREE_NETDEV /* free_netdev() */ ++#define HAVE_NETDEV_PRIV /* netdev_priv() */ ++#define HAVE_NETIF_QUEUE ++#define HAVE_NET_DEVICE_OPS ++#endif + + /* + * SET_MODULE_OWNER appeared sometime during 2.3.x. It was setting |