This patch adds error handling to the serial_card_probe function in drivers/tty/serial/8250/8250_acorn.c. The serial8250_register_8250_port call within this function previously lacked proper handling for failure scenarios. Signed-off-by: Haoran Liu <liuhaoran14@xxxxxxx> --- drivers/tty/serial/8250/8250_acorn.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/tty/serial/8250/8250_acorn.c b/drivers/tty/serial/8250/8250_acorn.c index 758c4aa203ab..378ae6936028 100644 --- a/drivers/tty/serial/8250/8250_acorn.c +++ b/drivers/tty/serial/8250/8250_acorn.c @@ -43,6 +43,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id) struct uart_8250_port uart; unsigned long bus_addr; unsigned int i; + int ret; info = kzalloc(sizeof(struct serial_card_info), GFP_KERNEL); if (!info) @@ -72,6 +73,14 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id) uart.port.mapbase = bus_addr + type->offset[i]; info->ports[i] = serial8250_register_8250_port(&uart); + if (IS_ERR(info->ports[i])) { + ret = PTR_ERR(info->ports[i]); + while (i--) + serial8250_unregister_port(info->ports[i]); + + kfree(info); + return ret; + } } return 0; -- 2.17.1