DF-4781 / fix.diff
--- a/sys/dev/misc/dcons/dcons_os.c +++ b/sys/dev/misc/dcons/dcons_os.c @@ -461,6 +461,11 @@ */ dg.buf = (struct dcons_buf *) contigmalloc(dg.size, M_DEVBUF, 0, 0x10000, 0xffffffff, PAGE_SIZE, 0ul); + if (dg.buf == NULL) { + kprintf("dcons: contigmalloc(%zu) failed\n", dg.size); + drv_init = -1; + return (-1); + } dcons_init(dg.buf, dg.size, sc); } @@ -556,7 +561,8 @@ switch (type) { case MOD_LOAD: ret = dcons_drv_init(1); - dcons_attach(); + if (ret == 0) + dcons_attach(); #if 0 /* XXX __FreeBSD_version >= 500000 */ if (ret == 0) { dcons_cnprobe(&dcons_consdev); @@ -581,9 +587,10 @@ #endif dcons_detach(DCONS_CON); dcons_detach(DCONS_GDB); - dg.buf->magic = 0; - - contigfree(dg.buf, DCONS_BUF_SIZE, M_DEVBUF); + if (dg.buf != NULL) { + dg.buf->magic = 0; + contigfree(dg.buf, DCONS_BUF_SIZE, M_DEVBUF); + } break; case MOD_SHUTDOWN: |