DragonFlyBSD Kernel Audit
DF-1016 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/bus/u4b/usb_dev.c b/sys/bus/u4b/usb_dev.c
--- a/sys/bus/u4b/usb_dev.c
+++ b/sys/bus/u4b/usb_dev.c
@@ -33,6 +33,7 @@
 #include <sys/types.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
+#include <sys/proc.h>
 #include <sys/bus.h>
 #include <sys/module.h>
 #include <sys/lock.h>
@@ -1042,7 +1043,12 @@
 				break;
 			}
 			f->async_p = USB_TD_GET_PROC(td);
+			if (f->async_p != NULL)
+				PHOLD(f->async_p);
 		} else {
+			if (f->async_p != NULL) {
+				PRELE(f->async_p);
+			}
 			f->async_p = NULL;
 		}
 		break;