| From 8aa0fec4331ad11030cfc43ddd16b42dd759dfc2 Mon Sep 17 00:00:00 2001 |
| From: Peng Hao <peng.hao2@zte.com.cn> |
| Date: Tue, 2 Apr 2019 22:12:38 +0800 |
| Subject: arm/mach-at91/pm : fix possible object reference leak |
| |
| [ Upstream commit ba5e60c9b75dec92d4c695b928f69300b17d7686 ] |
| |
| of_find_device_by_node() takes a reference to the struct device |
| when it finds a match via get_device. When returning error we should |
| call put_device. |
| |
| Reviewed-by: Mukesh Ojha <mojha@codeaurora.org> |
| Signed-off-by: Peng Hao <peng.hao2@zte.com.cn> |
| Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| arch/arm/mach-at91/pm.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c |
| index 51e808adb00c..2a757dcaa1a5 100644 |
| --- a/arch/arm/mach-at91/pm.c |
| +++ b/arch/arm/mach-at91/pm.c |
| @@ -591,13 +591,13 @@ static int __init at91_pm_backup_init(void) |
| |
| np = of_find_compatible_node(NULL, NULL, "atmel,sama5d2-securam"); |
| if (!np) |
| - goto securam_fail; |
| + goto securam_fail_no_ref_dev; |
| |
| pdev = of_find_device_by_node(np); |
| of_node_put(np); |
| if (!pdev) { |
| pr_warn("%s: failed to find securam device!\n", __func__); |
| - goto securam_fail; |
| + goto securam_fail_no_ref_dev; |
| } |
| |
| sram_pool = gen_pool_get(&pdev->dev, NULL); |
| @@ -620,6 +620,8 @@ static int __init at91_pm_backup_init(void) |
| return 0; |
| |
| securam_fail: |
| + put_device(&pdev->dev); |
| +securam_fail_no_ref_dev: |
| iounmap(pm_data.sfrbu); |
| pm_data.sfrbu = NULL; |
| return ret; |
| -- |
| 2.20.1 |
| |