⬢ DragonFlyBSD Kernel Audit
DF-5406 / fix.diff
← back to finding ↓ download raw
--- a/sys/bus/u4b/usb_hid.c
+++ b/sys/bus/u4b/usb_hid.c
@@ -428,6 +428,11 @@
 				s->loc_count = dval & mask;
 				break;
 			case 10:	/* Push */
+				if (s->pushlevel >= MAXPUSH - 1) {
+					DPRINTFN(0, "Cannot push "
+					    "item @ %d\n", s->pushlevel + 1);
+					break;
+				}
 				s->pushlevel ++;
 				if (s->pushlevel < MAXPUSH) {
 					s->cur[s->pushlevel] = *c;
@@ -442,6 +447,11 @@
 				}
 				break;
 			case 11:	/* Pop */
+				if (s->pushlevel == 0) {
+					DPRINTFN(0, "Cannot pop "
+					    "item @ %d\n", s->pushlevel);
+					break;
+				}
 				s->pushlevel --;
 				if (s->pushlevel < MAXPUSH) {
 					/* preserve position */