diff options
author | jhb <jhb@FreeBSD.org> | 2017-08-18 01:47:58 +0800 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2017-08-18 01:47:58 +0800 |
commit | 6b9568210492541540e6759376bc4dbd773543ec (patch) | |
tree | 7f5b16f8e2e633ff267e9b9ef5959ac911b79949 /emulators/open-vm-tools | |
parent | 843ba3a506c6fba09b167225e1a8fbfe1eb0fc58 (diff) | |
download | freebsd-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/Makefile | 1 | ||||
-rw-r--r-- | emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c | 20 |
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) |