[PATCH 2/2] cpuidle: qcom-spm: fix platform device release in spm_cpuidle_register

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A reference to a device obtained via of_find_device_by_node() requires
explicit calls to put_device() when it is no longer required to avoid
leaking the resource.

Add the missing calls to put_device(&pdev->dev) in the success path as
well as in the only error path before the device is no longer required.

Note that the acquired device is neither assigned nor used to manage
additional resources, and it can be released right after using it.

Cc: stable@xxxxxxxxxxxxxxx
Fixes: 60f3692b5f0b ("cpuidle: qcom_spm: Detach state machine from main SPM handling")
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@xxxxxxxxx>
---
 drivers/cpuidle/cpuidle-qcom-spm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/cpuidle/cpuidle-qcom-spm.c b/drivers/cpuidle/cpuidle-qcom-spm.c
index c9ab49b310fd..601aa81ffff3 100644
--- a/drivers/cpuidle/cpuidle-qcom-spm.c
+++ b/drivers/cpuidle/cpuidle-qcom-spm.c
@@ -106,10 +106,13 @@ static int spm_cpuidle_register(struct device *cpuidle_dev, int cpu)
 		return -ENODEV;
 
 	data = devm_kzalloc(cpuidle_dev, sizeof(*data), GFP_KERNEL);
-	if (!data)
+	if (!data) {
+		put_device(&pdev->dev);
 		return -ENOMEM;
+	}
 
 	data->spm = dev_get_drvdata(&pdev->dev);
+	put_device(&pdev->dev);
 	if (!data->spm)
 		return -EINVAL;
 

-- 
2.43.0





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux