On Tue, Oct 08, 2024 at 06:29:19PM +0000, Miod Vallat wrote:
> > So it happens here:
> > 
> >   1010  int
> >   1011  wsdisplaywrite(dev_t dev, struct uio *uio, int flag)
> >   1012  {
> >   1013          struct wsdisplay_softc *sc;
> >   1014          struct tty *tp;
> >   1015          int unit;
> >   1016          struct wsscreen *scr;
> >   1017
> >   1018          unit = WSDISPLAYUNIT(dev);
> > * 1019          sc = wsdisplay_cd.cd_devs[unit];
> 
> This would imply no wsdisplay device has attached, yet wscons has
> claimed console (either efifb or a vga-compatible display).

Would it make sense to copy the check from wsdisplayopen()
instead of crashing in this case?

Or should we prevent that situation on higher level?

Index: dev/wscons/wsdisplay.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/dev/wscons/wsdisplay.c,v
diff -u -p -r1.153 wsdisplay.c
--- dev/wscons/wsdisplay.c      30 Sep 2024 01:41:49 -0000      1.153
+++ dev/wscons/wsdisplay.c      9 Oct 2024 14:17:30 -0000
@@ -1016,7 +1016,9 @@ wsdisplaywrite(dev_t dev, struct uio *ui
        struct wsscreen *scr;
 
        unit = WSDISPLAYUNIT(dev);
-       sc = wsdisplay_cd.cd_devs[unit];
+       if (unit >= wsdisplay_cd.cd_ndevs ||    /* make sure it was attached */
+           (sc = wsdisplay_cd.cd_devs[unit]) == NULL)
+               return (ENXIO);
 
        if (ISWSDISPLAYCTL(dev))
                return (0);

Reply via email to