svn commit: r448159 - in head/emulators/open-vm-tools: . files

John Baldwin jhb at FreeBSD.org
Thu Aug 17 17:48:00 UTC 2017


Author: jhb (src,doc committer)
Date: Thu Aug 17 17:47:58 2017
New Revision: 448159
URL: https://svnweb.freebsd.org/changeset/ports/448159

Log:
  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

Modified:
  head/emulators/open-vm-tools/Makefile
  head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c

Modified: head/emulators/open-vm-tools/Makefile
==============================================================================
--- head/emulators/open-vm-tools/Makefile	Thu Aug 17 17:46:28 2017	(r448158)
+++ head/emulators/open-vm-tools/Makefile	Thu Aug 17 17:47:58 2017	(r448159)
@@ -5,6 +5,7 @@ PORTNAME=		open-vm-tools
 PORTVERSION=		${RELEASE_VER}
 DISTVERSIONPREFIX=	stable-
 PORTEPOCH=		2
+PORTREVISION=		1
 CATEGORIES=		emulators
 
 MAINTAINER=		swills at FreeBSD.org

Modified: head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
==============================================================================
--- head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c	Thu Aug 17 17:46:28 2017	(r448158)
+++ head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c	Thu Aug 17 17:47:58 2017	(r448159)
@@ -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)


More information about the svn-ports-all mailing list