DragonFlyBSD Kernel Audit
DF-1601 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/misc/kbdmux/kbdmux.c b/sys/dev/misc/kbdmux/kbdmux.c
--- a/sys/dev/misc/kbdmux/kbdmux.c
+++ b/sys/dev/misc/kbdmux/kbdmux.c
@@ -449,6 +449,7 @@
 		taskqueue_drain(taskqueue_swi, &state->ks_task);
 
 	/* release all keyboards from the mux */
+	lwkt_gettoken(&kbd_token);
 	while ((k = SLIST_FIRST(&state->ks_kbds)) != NULL) {
 		kbd_release(k->kbd, &k->kbd);
 		SLIST_REMOVE_HEAD(&state->ks_kbds, next);
@@ -457,6 +458,7 @@
 
 		kfree(k, M_KBDMUX);
 	}
+	lwkt_reltoken(&kbd_token);
 
 	kbd_unregister(kbd);