[1/3] PM / Domains: Don't kfree() the virtual device in the error path

Message ID 20190418102757.1246-2-ulf.hansson@linaro.org
State Accepted
Commit 71b77697af9ef06b559875e4bd8dc3d141807c93
Headers show
Series
  • PM / Domains: Improve support for multi PM domains
Related show

Commit Message

Ulf Hansson April 18, 2019, 10:27 a.m.
It's not correct to call kfree(dev) when device_register(dev) has failed.
Fix this by calling put_device(dev) instead.

Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains per device to genpd")
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

---
 drivers/base/power/domain.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.17.1

Comments

Viresh Kumar April 22, 2019, 8:27 a.m. | #1
On 18-04-19, 12:27, Ulf Hansson wrote:
> It's not correct to call kfree(dev) when device_register(dev) has failed.

> Fix this by calling put_device(dev) instead.

> 

> Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains per device to genpd")

> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---

>  drivers/base/power/domain.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c

> index ecac03dcc9b2..7fec69aebf46 100644

> --- a/drivers/base/power/domain.c

> +++ b/drivers/base/power/domain.c

> @@ -2528,7 +2528,7 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev,

>  

>  	ret = device_register(virt_dev);

>  	if (ret) {

> -		kfree(virt_dev);

> +		put_device(virt_dev);

>  		return ERR_PTR(ret);

>  	}


Acked-by: Viresh Kumar <viresh.kumar@linaro.org>


-- 
viresh
Niklas Cassel April 24, 2019, 11:28 a.m. | #2
On Thu, Apr 18, 2019 at 12:27:55PM +0200, Ulf Hansson wrote:
> It's not correct to call kfree(dev) when device_register(dev) has failed.

> Fix this by calling put_device(dev) instead.

> 

> Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains per device to genpd")

> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---

>  drivers/base/power/domain.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c

> index ecac03dcc9b2..7fec69aebf46 100644

> --- a/drivers/base/power/domain.c

> +++ b/drivers/base/power/domain.c

> @@ -2528,7 +2528,7 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev,

>  

>  	ret = device_register(virt_dev);

>  	if (ret) {

> -		kfree(virt_dev);

> +		put_device(virt_dev);

>  		return ERR_PTR(ret);

>  	}

>  

> -- 

> 2.17.1

> 


Acked-by: Niklas Cassel <niklas.cassel@linaro.org>

Patch

diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index ecac03dcc9b2..7fec69aebf46 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -2528,7 +2528,7 @@  struct device *genpd_dev_pm_attach_by_id(struct device *dev,
 
 	ret = device_register(virt_dev);
 	if (ret) {
-		kfree(virt_dev);
+		put_device(virt_dev);
 		return ERR_PTR(ret);
 	}