From 2cc27fc0694270e7fb0d84e6de90a4a6922f831f Mon Sep 17 00:00:00 2001 From: Justin Hibbits Date: Fri, 20 Jul 2018 16:08:14 +0000 Subject: [PATCH] vt/ofwfb: Check that /chosen/stdout is valid before using it in initialization The FDT implementation of OF_instance_to_package() backend checks the cross-reference to get the node. On failure, this returns the input handle unchanged. In the case of ofwfb attachment, if /chosen/stdout property does not exist, sc->sc_handle is either garbage or 0, which then gets propagated to node. This will prevent "screen" from being used, resulting in not properly attaching. Correct this by matching the code in ofwfb_probe(). --- sys/dev/vt/hw/ofwfb/ofwfb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/dev/vt/hw/ofwfb/ofwfb.c b/sys/dev/vt/hw/ofwfb/ofwfb.c index db52f92cd27..73fcb9e0d65 100644 --- a/sys/dev/vt/hw/ofwfb/ofwfb.c +++ b/sys/dev/vt/hw/ofwfb/ofwfb.c @@ -370,9 +370,11 @@ ofwfb_init(struct vt_device *vd) /* Initialize softc */ vd->vd_softc = sc = &ofwfb_conssoftc; + node = -1; chosen = OF_finddevice("/chosen"); - OF_getprop(chosen, "stdout", &sc->sc_handle, sizeof(ihandle_t)); - node = OF_instance_to_package(sc->sc_handle); + if (OF_getprop(chosen, "stdout", &sc->sc_handle, + sizeof(ihandle_t)) == sizeof(ihandle_t)) + node = OF_instance_to_package(sc->sc_handle); if (node == -1) { /* * The "/chosen/stdout" does not exist try