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