aboutsummaryrefslogtreecommitdiffstats
path: root/emulators/open-vm-tools
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2017-08-18 01:47:58 +0800
committerjhb <jhb@FreeBSD.org>2017-08-18 01:47:58 +0800
commit6b9568210492541540e6759376bc4dbd773543ec (patch)
tree7f5b16f8e2e633ff267e9b9ef5959ac911b79949 /emulators/open-vm-tools
parent843ba3a506c6fba09b167225e1a8fbfe1eb0fc58 (diff)
downloadfreebsd-ports-gnome-6b9568210492541540e6759376bc4dbd773543ec.tar.gz
freebsd-ports-gnome-6b9568210492541540e6759376bc4dbd773543ec.tar.zst
freebsd-ports-gnome-6b9568210492541540e6759376bc4dbd773543ec.zip
Don't leak lock from os_kmem_alloc().
The current port patches for os_kmem_alloc() add VM object locking. However, the lock is not unlocked in the success case because the unlock code is inside of an if body instead of after the if statement. Reported by: jpaetzel Reviewed by: jpaetzel Approved by: swills MFH: 2017Q3 Differential Revision: https://reviews.freebsd.org/D12038
Diffstat (limited to 'emulators/open-vm-tools')
-rw-r--r--emulators/open-vm-tools/Makefile1
-rw-r--r--emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c20
2 files changed, 11 insertions, 10 deletions
diff --git a/emulators/open-vm-tools/Makefile b/emulators/open-vm-tools/Makefile
index 36b640fbe82f..c78f1af49026 100644
--- a/emulators/open-vm-tools/Makefile
+++ b/emulators/open-vm-tools/Makefile
@@ -5,6 +5,7 @@ PORTNAME= open-vm-tools
PORTVERSION= ${RELEASE_VER}
DISTVERSIONPREFIX= stable-
PORTEPOCH= 2
+PORTREVISION= 1
CATEGORIES= emulators
MAINTAINER= swills@FreeBSD.org
diff --git a/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c b/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
index 2c404b7df813..b97fee1be391 100644
--- a/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
+++ b/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
@@ -1,5 +1,5 @@
---- modules/freebsd/vmmemctl/os.c.orig 2017-02-24 22:15:37 UTC
-+++ modules/freebsd/vmmemctl/os.c
+--- modules/freebsd/vmmemctl/os.c.orig 2017-02-24 14:15:37.000000000 -0800
++++ modules/freebsd/vmmemctl/os.c 2017-08-15 13:54:03.813152000 -0700
@@ -37,9 +37,11 @@
#include <sys/param.h>
#include <sys/systm.h>
@@ -50,13 +50,10 @@
- if ( !vm_page_lookup(state->vmobject, page->pindex) ) {
- return;
-- }
+// if ( !vm_page_lookup(state->vmobject, page->pindex) ) {
+// return;
+// }
-
-- os_pmap_putindex(pmap, page->pindex);
-- vm_page_free(page);
++
+// os_pmap_putindex(pmap, page->pindex);
+// vm_page_free(page);
+#if __FreeBSD_version > 1000029
@@ -77,7 +74,10 @@
+#else
+ vm_page_unlock_queues();
+#endif
-+ }
+ }
+-
+- os_pmap_putindex(pmap, page->pindex);
+- vm_page_free(page);
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WUNLOCK(state->vmobject);
+#else
@@ -106,18 +106,18 @@
return NULL;
}
-@@ -504,6 +550,11 @@ os_kmem_alloc(int alloc_normal_failed) /
-
+@@ -505,6 +551,11 @@ os_kmem_alloc(int alloc_normal_failed) /
if (!page) {
os_pmap_putindex(pmap, pindex);
+ }
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WUNLOCK(state->vmobject);
+#else
+ VM_OBJECT_UNLOCK(state->vmobject);
+#endif
- }
return page;
+ }
@@ -847,7 +898,7 @@ vmmemctl_sysctl(SYSCTL_HANDLER_ARGS)
static void
vmmemctl_init_sysctl(void)