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