sys/dev/pckbc/pckbd.c introduces a buglet, where the value computed for
local variable `table' in pckbd_set_xtscancode() in the non-translating
case, is overwritten by accident.

Unfortunately, this means that the keyboard ends up using a scancode set
which is not the one expected by the driver, and hilarity ensues, such
as key up events not translated correctly, and neither ctrl or caps
lock.

Unfortunately this breaks at least gsckbc(4/hppa), which is a controller
where you can't plug a DIN keyboard so a "modern" PS/2 keyboard is
required, and that logic can be shunt.

This is very inconvenient, as most of the hppa machines where the X
server works are gsckbc machines, and 6.3 can't be installed on them
because of this bug (but then, noone seems to have noticed, so this is
hardly relevant).

Simple fix below.

Index: pckbd.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/pckbc/pckbd.c,v
retrieving revision 1.44
diff -u -p -r1.44 pckbd.c
--- pckbd.c     6 Jan 2018 18:51:20 -0000       1.44
+++ pckbd.c     2 May 2018 18:58:28 -0000
@@ -214,7 +214,7 @@ int
 pckbd_set_xtscancode(pckbc_tag_t kbctag, pckbc_slot_t kbcslot,
     struct pckbd_internal *id)
 {
-       int table;
+       int table = 3;
 
        if (pckbc_xt_translation(kbctag)) {
 #ifdef DEBUG
@@ -247,7 +247,7 @@ pckbd_set_xtscancode(pckbc_tag_t kbctag,
        }
 
        /* keep falling back until we hit a table that looks usable. */
-       for (table = 3; table >= 1; table--) {
+       for (; table >= 1; table--) {
                u_char cmd[2];
 #ifdef DEBUG
                printf("pckbd: trying table %d\n", table);

Reply via email to