[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20250620015343.21494-1-chenyuan_fl@163.com>
Date: Fri, 20 Jun 2025 09:53:43 +0800
From: Yuan Chen <chenyuan_fl@....com>
To: linus.walleij@...aro.org
Cc: linux-gpio@...r.kernel.org,
linux-kernel@...r.kernel.org,
chenyuan_fl@....com,
Yuan Chen <chenyuan@...inos.cn>
Subject: [PATCH] pinctrl: berlin: fix memory leak in berlin_pinctrl_build_state()
From: Yuan Chen <chenyuan@...inos.cn>
In the original implementation, krealloc() failure handling incorrectly
assigned the original memory pointer to NULL after kfree(), causing a
memory leak when reallocation failed.
Fixes: de845036f997 ("pinctrl: berlin: fix error return code of berlin_pinctrl_build_state()")
Signed-off-by: Yuan Chen <chenyuan@...inos.cn>
---
drivers/pinctrl/berlin/berlin.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c
index c372a2a24be4..9dc2da8056b7 100644
--- a/drivers/pinctrl/berlin/berlin.c
+++ b/drivers/pinctrl/berlin/berlin.c
@@ -204,6 +204,7 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
const struct berlin_desc_group *desc_group;
const struct berlin_desc_function *desc_function;
int i, max_functions = 0;
+ struct pinfunction *new_functions;
pctrl->nfunctions = 0;
@@ -229,12 +230,15 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
}
}
- pctrl->functions = krealloc(pctrl->functions,
+ new_functions = krealloc(pctrl->functions,
pctrl->nfunctions * sizeof(*pctrl->functions),
GFP_KERNEL);
- if (!pctrl->functions)
+ if (!new_functions) {
+ kfree(pctrl->functions);
return -ENOMEM;
+ }
+ pctrl->functions = new_functions;
/* map functions to theirs groups */
for (i = 0; i < pctrl->desc->ngroups; i++) {
desc_group = pctrl->desc->groups + i;
--
2.25.1
Powered by blists - more mailing lists