DragonFlyBSD Kernel Audit
DF-2165 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/linux_shmem.c b/sys/dev/drm/linux_shmem.c
--- a/sys/dev/drm/linux_shmem.c
+++ b/sys/dev/drm/linux_shmem.c
@@ -53,10 +53,13 @@
 	if (object->type == OBJT_MGTDEVICE) {
 		m = NULL;
 		rv = vm_pager_get_page(object, pindex, &m, 1);
-		if (m == NULL)
+		if (m == NULL) {
+			VM_OBJECT_UNLOCK(object);
 			return ERR_PTR(-ENOMEM);
+		}
 		if (rv != VM_PAGER_OK) {
 			vm_page_free(m);
+			VM_OBJECT_UNLOCK(object);
 			return ERR_PTR(-ENOMEM);
 		}
 	} else {
@@ -66,10 +69,13 @@
 			if (vm_pager_has_page(object, pindex)) {
 				rv = vm_pager_get_page(object, pindex, &m, 1);
 				m = vm_page_lookup(object, pindex);
-				if (m == NULL)
+				if (m == NULL) {
+					VM_OBJECT_UNLOCK(object);
 					return ERR_PTR(-ENOMEM);
+				}
 				if (rv != VM_PAGER_OK) {
 					vm_page_free(m);
+					VM_OBJECT_UNLOCK(object);
 					return ERR_PTR(-ENOMEM);
 				}
 			} else {