On Thu, Feb 08, 2024 at 12:39:13PM +0000, Stuart Henderson wrote:
> I hit this after running "kbd -l". On this machine (VM) the keyboard is
> not responsive in DDB so I can't get any more from it.
> 
> uvm_fault(0xfffffd8073ad8a10, 0x0, 0, 1) -> e
> kernel: page fault trap, code=0
> Stopped at    wskbd_displayioctl_sc+0x1b9:    cmpl    $0,0(%rcx,%rsi,8)
>     TID    PID    UID     PRFLAGS     PFLAGS  CPU  COMMAND                    
>    
>  243085  96740    667  0x18000002          0    4  perl                       
>     
>  513689  69079    667  0x18000002          0    5  check_dns                  
>     
> * 62677  84076      0   0x8000003          0    3K kbd                        
>     
> wskbd_displayioctl_sc(ffff8000001f8600,c0105715,ffff80003171a990,2,ffff800032003aa8,0)
>  at wskbd_displayioctl_sc+0x1b9
> wskbd_do_ioctl_sc(ffff8000001f8600,c0105715,ffff80003171a990,2,ffff800032003aa8,0)
>  at wskbd_do_ioctl_sc+0xba
> wskbdioctl(4300,c0105715,ffff80003171a990,2,ffff800032003aa8) at 
> wskbdioctl+0x4e
> VOP_IOCTL(fffffd8134b59dc0,c0105715,ffff80003171a990,2,fffffd8034ef8e58,ffff800032003aa8)
>  at VOP_IOCTL+0x5d
> vn_ioctl(fffffd807961ce20,c0105715,ffff80003171a990,ffff800032003aa8) at 
> vn_ioctl+0x79
> sys_ioctl(ffff800032003aa8,ffff80003171aa90,ffff80003171aaf0) at 
> sys_ioctl+0x2af
> syscall(ffff80003171ab80) at syscall+0x5e3
> Xsyscall() at Xsyscall+0x128
> end of kernel
> end trace frame: 0x70d9d6640370, count: 7
> https://www.openbsd.org/ddb.html describes the minimum info required in bug
> reports.  Insufficient info makes it difficult to find and fix bugs.
> ddb{3}> 

Does this help?

diff --git sys/dev/wscons/wskbd.c sys/dev/wscons/wskbd.c
index 7631cd5f701..dd65f61ce63 100644
--- sys/dev/wscons/wskbd.c
+++ sys/dev/wscons/wskbd.c
@@ -1229,7 +1229,10 @@ getkeyrepeat:
 
        case WSKBDIO_GETENCODINGS:
                uedp = (struct wskbd_encoding_data *)data;
-               for (count = 0; sc->id->t_keymap.keydesc[count].name; count++)
+               for (count = 0;
+                    sc->id->t_keymap.keydesc != NULL &&
+                    sc->id->t_keymap.keydesc[count].name;
+                    count++)
                        ;
                if (uedp->nencodings > count)
                        uedp->nencodings = count;

Reply via email to