[PATCH] HSI: omap_ssi_core: Fix error handling in ssi_init()

Yuan Can posted 1 patch 3 years, 4 months ago
drivers/hsi/controllers/omap_ssi_core.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
[PATCH] HSI: omap_ssi_core: Fix error handling in ssi_init()
Posted by Yuan Can 3 years, 4 months ago
The ssi_init() returns the platform_driver_register() directly without
checking its return value, if platform_driver_register() failed, the
ssi_pdriver is not unregistered.
Fix by unregister ssi_pdriver when the last platform_driver_register()
failed.

Fixes: 0fae198988b8 ("HSI: omap_ssi: built omap_ssi and omap_ssi_port into one module")
Signed-off-by: Yuan Can <yuancan@huawei.com>
---
 drivers/hsi/controllers/omap_ssi_core.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/hsi/controllers/omap_ssi_core.c b/drivers/hsi/controllers/omap_ssi_core.c
index 052cf3e92dd6..26f2c3c01297 100644
--- a/drivers/hsi/controllers/omap_ssi_core.c
+++ b/drivers/hsi/controllers/omap_ssi_core.c
@@ -631,7 +631,13 @@ static int __init ssi_init(void) {
 	if (ret)
 		return ret;
 
-	return platform_driver_register(&ssi_port_pdriver);
+	ret = platform_driver_register(&ssi_port_pdriver);
+	if (ret) {
+		platform_driver_unregister(&ssi_pdriver);
+		return ret;
+	}
+
+	return 0;
 }
 module_init(ssi_init);
 
-- 
2.17.1
Re: [PATCH] HSI: omap_ssi_core: Fix error handling in ssi_init()
Posted by Sebastian Reichel 3 years, 4 months ago
Hi,

On Thu, Nov 24, 2022 at 11:33:32AM +0000, Yuan Can wrote:
> The ssi_init() returns the platform_driver_register() directly without
> checking its return value, if platform_driver_register() failed, the
> ssi_pdriver is not unregistered.
> Fix by unregister ssi_pdriver when the last platform_driver_register()
> failed.
> 
> Fixes: 0fae198988b8 ("HSI: omap_ssi: built omap_ssi and omap_ssi_port into one module")
> Signed-off-by: Yuan Can <yuancan@huawei.com>
> ---

Thanks, queued.

-- Sebastian

>  drivers/hsi/controllers/omap_ssi_core.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hsi/controllers/omap_ssi_core.c b/drivers/hsi/controllers/omap_ssi_core.c
> index 052cf3e92dd6..26f2c3c01297 100644
> --- a/drivers/hsi/controllers/omap_ssi_core.c
> +++ b/drivers/hsi/controllers/omap_ssi_core.c
> @@ -631,7 +631,13 @@ static int __init ssi_init(void) {
>  	if (ret)
>  		return ret;
>  
> -	return platform_driver_register(&ssi_port_pdriver);
> +	ret = platform_driver_register(&ssi_port_pdriver);
> +	if (ret) {
> +		platform_driver_unregister(&ssi_pdriver);
> +		return ret;
> +	}
> +
> +	return 0;
>  }
>  module_init(ssi_init);
>  
> -- 
> 2.17.1
>