DragonFlyBSD Kernel Audit
DF-1714 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/misc/evdev/cdev.c b/sys/dev/misc/evdev/cdev.c
--- a/sys/dev/misc/evdev/cdev.c
+++ b/sys/dev/misc/evdev/cdev.c
@@ -130,9 +130,12 @@
 
 	/* Avoid race with evdev_unregister */
 	EVDEV_LOCK(evdev);
-	if (dev->si_drv1 == NULL)
+	if (dev->si_drv1 == NULL) {
 		ret = ENODEV;
-	else
+		lockuninit(&client->ec_buffer_mtx);
+		kfree(client, M_EVDEV);
+		return (ret);
+	} else
 		ret = evdev_register_client(evdev, client);
 
 	if (ret != 0)