DragonFlyBSD Kernel Audit
DF-1505 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/misc/kbd/kbd.c b/sys/dev/misc/kbd/kbd.c
--- a/sys/dev/misc/kbd/kbd.c
+++ b/sys/dev/misc/kbd/kbd.c
@@ -826,6 +826,12 @@
 
 	ap->a_result = 0;
 
+	sc = dev->si_drv1;
+	if (sc == NULL) {
+		ap->a_result = ENXIO;
+		return (0);
+	}
+
 	switch (kn->kn_filter) {
 	case EVFILT_READ:
 		kn->kn_fop = &genkbdfiltops;
@@ -836,7 +842,6 @@
 		return (0);
 	}
 
-	sc = dev->si_drv1;
 	klist = &sc->gkb_rkq.ki_note;
 	knote_insert(klist, kn);
 
@@ -851,6 +856,8 @@
 	struct klist *klist;
 
 	sc = dev->si_drv1;
+	if (sc == NULL)
+		return;
 	klist = &sc->gkb_rkq.ki_note;
 	knote_remove(klist, kn);
 }