diff mbox series

[Resend] drivers/thermal: fix potential memleak in error branch

Message ID AOUAJQBgDcHjy8iGeDq3e4rT.1.1604995817639.Hmail.bernard@vivo.com
State New
Headers show
Series [Resend] drivers/thermal: fix potential memleak in error branch | expand

Commit Message

Bernard Zhao Nov. 10, 2020, 8:10 a.m. UTC
Function __thermal_cooling_device_register, when device_register
failed, cdev is not free after error value return, this may
bring in potential memleak.

Signed-off-by: Bernard Zhao <bernard@vivo.com>
---
 drivers/thermal/thermal_core.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Daniel Lezcano Nov. 12, 2020, 11:22 a.m. UTC | #1
On 10/11/2020 09:10, Bernard wrote:
> Function __thermal_cooling_device_register, when device_register

> failed, cdev is not free after error value return, this may

> bring in potential memleak.

> 

> Signed-off-by: Bernard Zhao <bernard@vivo.com>

> ---

>  drivers/thermal/thermal_core.c | 1 +

>  1 file changed, 1 insertion(+)

> 

> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c

> index 3d1e0033bf3e..e4bee15dfa1f 100644

> --- a/drivers/thermal/thermal_core.c

> +++ b/drivers/thermal/thermal_core.c

> @@ -1125,6 +1125,7 @@ __thermal_cooling_device_register(struct device_node *np,

>  	if (result) {

>  		ida_simple_remove(&thermal_cdev_ida, cdev->id);

>  		put_device(&cdev->device);

> +		kfree(cdev);

>  		return ERR_PTR(result);

>  	}


Please fix the function with the proper error path and the labels.

Thanks

  -- Daniel


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
diff mbox series

Patch

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 3d1e0033bf3e..e4bee15dfa1f 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1125,6 +1125,7 @@  __thermal_cooling_device_register(struct device_node *np,
 	if (result) {
 		ida_simple_remove(&thermal_cdev_ida, cdev->id);
 		put_device(&cdev->device);
+		kfree(cdev);
 		return ERR_PTR(result);
 	}