Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sc16is7xx: missing unregister/delete driver on error in sc16is7xx_init()

Add the missing uart_unregister_driver() and i2c_del_driver() before return
from sc16is7xx_init() in the error handling case.

Signed-off-by: Mao Wenan <maowenan@huawei.com>
Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Mao Wenan and committed by
Greg Kroah-Hartman
ac0cdb3d 67343306

+10 -2
+10 -2
drivers/tty/serial/sc16is7xx.c
··· 1507 1507 ret = i2c_add_driver(&sc16is7xx_i2c_uart_driver); 1508 1508 if (ret < 0) { 1509 1509 pr_err("failed to init sc16is7xx i2c --> %d\n", ret); 1510 - return ret; 1510 + goto err_i2c; 1511 1511 } 1512 1512 #endif 1513 1513 ··· 1515 1515 ret = spi_register_driver(&sc16is7xx_spi_uart_driver); 1516 1516 if (ret < 0) { 1517 1517 pr_err("failed to init sc16is7xx spi --> %d\n", ret); 1518 - return ret; 1518 + goto err_spi; 1519 1519 } 1520 1520 #endif 1521 + return ret; 1522 + 1523 + err_spi: 1524 + #ifdef CONFIG_SERIAL_SC16IS7XX_I2C 1525 + i2c_del_driver(&sc16is7xx_i2c_uart_driver); 1526 + #endif 1527 + err_i2c: 1528 + uart_unregister_driver(&sc16is7xx_uart); 1521 1529 return ret; 1522 1530 } 1523 1531 module_init(sc16is7xx_init);