diff --git a/app-emulation/vmware-modules/files/329-03-vmmon-compatibility-with-eventpoll-switch-to-poll_ma.patch b/app-emulation/vmware-modules/files/329-03-vmmon-compatibility-with-eventpoll-switch-to-poll_ma.patch new file mode 100644 index 0000000..bf4a18e --- /dev/null +++ b/app-emulation/vmware-modules/files/329-03-vmmon-compatibility-with-eventpoll-switch-to-poll_ma.patch @@ -0,0 +1,77 @@ +From 3f2a6c720f68860e3482c81eb49737ad9a05606d Mon Sep 17 00:00:00 2001 +From: Michal Kubecek +Date: Sun, 17 Jun 2018 15:54:09 +0200 +Subject: [PATCH 4/4] vmmon: compatibility with eventpoll switch to poll_mask() + +Since commit 11c5ad0ec441 ("eventpoll: switch to ->poll_mask") in +v4.18-rc1, eventpoll switched from ->poll() to ->poll_mask(). Rather than +calling the callback directly (which would result in null pointer +dereference), use vfs_poll() wrapper. As this wrapper is only available +since 4.18-rc1 cycle as well, provide a copy to use when building against +older kernels. +--- + vmmon-only/include/compat_poll.h | 30 ++++++++++++++++++++++++++++++ + vmmon-only/linux/hostif.c | 3 ++- + 2 files changed, 32 insertions(+), 1 deletion(-) + create mode 100644 vmmon-only/include/compat_poll.h + +diff --git a/vmmon-only/include/compat_poll.h b/vmmon-only/include/compat_poll.h +new file mode 100644 +index 0000000..562cdb6 +--- /dev/null ++++ b/vmmon-only/include/compat_poll.h +@@ -0,0 +1,30 @@ ++#ifndef __COMPAT_POLL_H__ ++#define __COMPAT_POLL_H__ ++ ++#include ++ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0)) ++ ++#ifndef __poll_t ++typedef unsigned int __poll_t; ++#endif ++ ++static inline __poll_t compat_vfs_poll(struct file *file, ++ struct poll_table_struct *pt) ++{ ++ if (unlikely(!file->f_op->poll)) ++ return DEFAULT_POLLMASK; ++ return file->f_op->poll(file, pt); ++} ++ ++#else ++ ++static inline __poll_t compat_vfs_poll(struct file *file, ++ struct poll_table_struct *pt) ++{ ++ return vfs_poll(file, pt); ++} ++ ++#endif ++ ++#endif /* __COMPAT_POLL_H__ */ +diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c +index b793539..61d00df 100644 +--- a/vmmon-only/linux/hostif.c ++++ b/vmmon-only/linux/hostif.c +@@ -74,6 +74,7 @@ + + #include "pgtbl.h" + #include "versioned_atomic.h" ++#include "compat_poll.h" + + #if !defined(CONFIG_HIGH_RES_TIMERS) + #error CONFIG_HIGH_RES_TIMERS required for acceptable performance +@@ -2373,7 +2374,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: + + poll_initwait(&table); + current->state = TASK_INTERRUPTIBLE; +- mask = file->f_op->poll(file, &table.pt); ++ mask = compat_vfs_poll(file, &table.pt); + if (!(mask & (POLLIN | POLLERR | POLLHUP))) { + vm->vmhost->vcpuSemaTask[vcpuid] = current; + schedule_timeout(timeoutms * HZ / 1000); // convert to Hz +-- +2.18.0 +