> Date: Tue, 22 May 2018 12:29:21 +0200
> From: Otto Moerbeek <[email protected]>
> 
> On Thu, May 03, 2018 at 05:23:18PM +0000, Miod Vallat wrote:
> 
> > 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.
> 
> A report this fixes the problme indeed came by on misc@
> 
> Imo this should be committed.

Did anyone at least try it on non-miod hardware (i.e. amd64)?

I guess we'll find out if we commit this diff...

ok kettenis@

> > 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