DragonFlyBSD Kernel Audit
DF-1866 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/misc/ipmi/ipmi_kcs.c b/sys/dev/misc/ipmi/ipmi_kcs.c
--- a/sys/dev/misc/ipmi/ipmi_kcs.c
+++ b/sys/dev/misc/ipmi/ipmi_kcs.c
@@ -524,12 +524,15 @@
 
 	/* Wait for IBF = 0 */
 	status = INB(sc, KCS_CTL_STS);
+	{ int _t = ticks + 6 * hz;
 	while (status & KCS_STATUS_IBF) {
+		if (ticks > _t) goto to_abort;
 		DELAY(100);
 		status = INB(sc, KCS_CTL_STS);
-	}
+	} }
 
 	OUTB(sc, KCS_CTL_STS, KCS_CONTROL_GET_STATUS_ABORT);
+to_abort:
 
 	/* Wait for IBF = 0 */
 	status = INB(sc, KCS_CTL_STS);