2022-05-11 09:28:18

by Zheng Bin

[permalink] [raw]
Subject: [PATCH -next] tty: serial: max3100: Add missing uart_unregister_driver in max3100_probe

max3100_probe misses a call uart_unregister_driver in error path,
this patch fixes that.

Signed-off-by: Zheng Bin <[email protected]>
---
drivers/tty/serial/max3100.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c
index 0b5f21fbb53d..6d34ca2a3f7b 100644
--- a/drivers/tty/serial/max3100.c
+++ b/drivers/tty/serial/max3100.c
@@ -752,6 +752,7 @@ static int max3100_probe(struct spi_device *spi)
if (!max3100s[i])
break;
if (i == MAX_MAX3100) {
+ uart_unregister_driver(&max3100_uart_driver);
dev_warn(&spi->dev, "too many MAX3100 chips\n");
mutex_unlock(&max3100s_lock);
return -ENOMEM;
@@ -759,6 +760,7 @@ static int max3100_probe(struct spi_device *spi)

max3100s[i] = kzalloc(sizeof(struct max3100_port), GFP_KERNEL);
if (!max3100s[i]) {
+ uart_unregister_driver(&max3100_uart_driver);
dev_warn(&spi->dev,
"kmalloc for max3100 structure %d failed!\n", i);
mutex_unlock(&max3100s_lock);
--
2.31.1



2022-05-11 14:59:06

by Jiri Slaby

[permalink] [raw]
Subject: Re: [PATCH -next] tty: serial: max3100: Add missing uart_unregister_driver in max3100_probe

On 11. 05. 22, 9:15, Zheng Bin wrote:
> max3100_probe misses a call uart_unregister_driver in error path,
> this patch fixes that.

I believe, that's intentional. Cf. uart_driver_registered.

> Signed-off-by: Zheng Bin <[email protected]>
> ---
> drivers/tty/serial/max3100.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c
> index 0b5f21fbb53d..6d34ca2a3f7b 100644
> --- a/drivers/tty/serial/max3100.c
> +++ b/drivers/tty/serial/max3100.c
> @@ -752,6 +752,7 @@ static int max3100_probe(struct spi_device *spi)
> if (!max3100s[i])
> break;
> if (i == MAX_MAX3100) {
> + uart_unregister_driver(&max3100_uart_driver);
> dev_warn(&spi->dev, "too many MAX3100 chips\n");
> mutex_unlock(&max3100s_lock);
> return -ENOMEM;
> @@ -759,6 +760,7 @@ static int max3100_probe(struct spi_device *spi)
>
> max3100s[i] = kzalloc(sizeof(struct max3100_port), GFP_KERNEL);
> if (!max3100s[i]) {
> + uart_unregister_driver(&max3100_uart_driver);
> dev_warn(&spi->dev,
> "kmalloc for max3100 structure %d failed!\n", i);
> mutex_unlock(&max3100s_lock);
> --
> 2.31.1
>


--
js
suse labs

2022-05-17 19:45:24

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH -next] tty: serial: max3100: Add missing uart_unregister_driver in max3100_probe

On Wed, May 11, 2022 at 03:15:23PM +0800, Zheng Bin wrote:
> max3100_probe misses a call uart_unregister_driver in error path,
> this patch fixes that.
>
> Signed-off-by: Zheng Bin <[email protected]>
> ---
> drivers/tty/serial/max3100.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c
> index 0b5f21fbb53d..6d34ca2a3f7b 100644
> --- a/drivers/tty/serial/max3100.c
> +++ b/drivers/tty/serial/max3100.c
> @@ -752,6 +752,7 @@ static int max3100_probe(struct spi_device *spi)
> if (!max3100s[i])
> break;
> if (i == MAX_MAX3100) {
> + uart_unregister_driver(&max3100_uart_driver);
> dev_warn(&spi->dev, "too many MAX3100 chips\n");
> mutex_unlock(&max3100s_lock);
> return -ENOMEM;
> @@ -759,6 +760,7 @@ static int max3100_probe(struct spi_device *spi)
>
> max3100s[i] = kzalloc(sizeof(struct max3100_port), GFP_KERNEL);
> if (!max3100s[i]) {
> + uart_unregister_driver(&max3100_uart_driver);
> dev_warn(&spi->dev,
> "kmalloc for max3100 structure %d failed!\n", i);
> mutex_unlock(&max3100s_lock);

As Jiri said, this change would break the existing devices that are
registered with this driver.

How did you test this change? What tool found this? How was it
verified?

thanks,

greg k-h