Skip to content

Commit

Permalink
serial: 8250: Do nothing if nr_uarts=0
Browse files Browse the repository at this point in the history
When nr_uarts was set to 0 (via config or 8250_core.nr_uarts), we crash
early on x86 because serial8250_isa_init_ports dereferences base_ops
which remains NULL. In fact, there is nothing to do for all the callers
of serial8250_isa_init_ports if there are no uarts.

Based on suggestions by Peter Hurley.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Jan Kiszka authored and Greg Kroah-Hartman committed May 10, 2015
1 parent 24ee4df commit 59cfc45
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/tty/serial/8250/8250_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -3535,6 +3535,9 @@ static struct console univ8250_console = {

static int __init univ8250_console_init(void)
{
if (nr_uarts == 0)
return -ENODEV;

serial8250_isa_init_ports();
register_console(&univ8250_console);
return 0;
Expand Down Expand Up @@ -3565,7 +3568,7 @@ int __init early_serial_setup(struct uart_port *port)
{
struct uart_port *p;

if (port->line >= ARRAY_SIZE(serial8250_ports))
if (port->line >= ARRAY_SIZE(serial8250_ports) || nr_uarts == 0)
return -ENODEV;

serial8250_isa_init_ports();
Expand Down Expand Up @@ -3932,6 +3935,9 @@ static int __init serial8250_init(void)
{
int ret;

if (nr_uarts == 0)
return -ENODEV;

serial8250_isa_init_ports();

printk(KERN_INFO "Serial: 8250/16550 driver, "
Expand Down

0 comments on commit 59cfc45

Please sign in to comment.