untrusted comment: verify with openbsd-66-base.pub RWSvK/c+cFe24F0i32Yi+ZLmlqEvPpPnTd1yiIV4BpzGj16hyS0FGcH5zeecn9gThCQyPjHLw4eGTWechNVakRYmg9tM2eygUAo= OpenBSD 6.6 errata 030, June 5, 2020: Malicious HID descriptors could be misparsed. Apply by doing: signify -Vep /etc/signify/openbsd-66-base.pub -x 030_hid.patch.sig \ -m - | (cd /usr/src && patch -p0) And then rebuild and install a new kernel: KK=`sysctl -n kern.osversion | cut -d# -f1` cd /usr/src/sys/arch/`machine`/compile/$KK make obj make config make make install Index: sys/dev/hid/hid.c =================================================================== RCS file: /cvs/src/sys/dev/hid/hid.c,v diff -u -p -u -r1.2 hid.c --- sys/dev/hid/hid.c 20 Jan 2016 01:11:50 -0000 1.2 +++ sys/dev/hid/hid.c 3 Jun 2020 18:12:10 -0000 @@ -199,6 +199,9 @@ hid_get_item(struct hid_data *s, struct if (s == NULL) return (0); + if (s->pushlevel >= MAXPUSH) + return (0); + c = &s->cur[s->pushlevel]; top: @@ -385,8 +388,8 @@ hid_get_item(struct hid_data *s, struct s->loc_count = dval & mask; break; case 10: /* Push */ - s->pushlevel ++; - if (s->pushlevel < MAXPUSH) { + if (s->pushlevel < MAXPUSH - 1) { + s->pushlevel++; s->cur[s->pushlevel] = *c; /* store size and count */ c->loc.size = s->loc_size; @@ -399,8 +402,8 @@ hid_get_item(struct hid_data *s, struct } break; case 11: /* Pop */ - s->pushlevel --; - if (s->pushlevel < MAXPUSH) { + if (s->pushlevel > 0) { + s->pushlevel--; /* preserve position */ oldpos = c->loc.pos; c = &s->cur[s->pushlevel];