Commit 6c71cfcc authored by Michael Ellerman's avatar Michael Ellerman

powerpc/prom_init: Check display props exist before enabling btext

It's possible to enable CONFIG_PPC_EARLY_DEBUG_BOOTX for a pseries
kernel (maybe it shouldn't be), which is then booted with qemu/slof.

But if you do that the kernel crashes in draw_byte(), with a DAR
pointing somewhere near INT_MAX.

Adding some debug to prom_init we see that we're not able to read the
"address" property from OF, so we're just using whatever junk value
was on the stack.

So check the properties can be read properly from OF, if not we bail
out before initialising btext, which avoids the crash.
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Link: https://lore.kernel.org/r/20200821103407.3362149-1-mpe@ellerman.id.au
parent 39f87561
......@@ -2422,10 +2422,19 @@ static void __init prom_check_displays(void)
u32 width, height, pitch, addr;
prom_printf("Setting btext !\n");
prom_getprop(node, "width", &width, 4);
prom_getprop(node, "height", &height, 4);
prom_getprop(node, "linebytes", &pitch, 4);
prom_getprop(node, "address", &addr, 4);
if (prom_getprop(node, "width", &width, 4) == PROM_ERROR)
return;
if (prom_getprop(node, "height", &height, 4) == PROM_ERROR)
return;
if (prom_getprop(node, "linebytes", &pitch, 4) == PROM_ERROR)
return;
if (prom_getprop(node, "address", &addr, 4) == PROM_ERROR)
return;
prom_printf("W=%d H=%d LB=%d addr=0x%x\n",
width, height, pitch, addr);
btext_setup_display(width, height, 8, pitch, addr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment