]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
pinctrl: sunxi: Fix memory leak on krealloc failure
authorYuan Chen <chenyuan@kylinos.cn>
Fri, 20 Jun 2025 01:27:08 +0000 (09:27 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 10:13:50 +0000 (12:13 +0200)
[ Upstream commit e3507c56cbb208d4f160942748c527ef6a528ba1 ]

In sunxi_pctrl_dt_node_to_map(), when krealloc() fails to resize
the pinctrl_map array, the function returns -ENOMEM directly
without freeing the previously allocated *map buffer. This results
in a memory leak of the original kmalloc_array allocation.

Fixes: e11dee2e98f8 ("pinctrl: sunxi: Deal with configless pins")
Signed-off-by: Yuan Chen <chenyuan@kylinos.cn>
Link: https://lore.kernel.org/20250620012708.16709-1-chenyuan_fl@163.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c

index bde67ee31417f01fc95224ebdd707c4979e550bd..8fbbdcc52debb17b4929987cd506783cd50b8f17 100644 (file)
@@ -395,6 +395,7 @@ static int sunxi_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
        const char *function, *pin_prop;
        const char *group;
        int ret, npins, nmaps, configlen = 0, i = 0;
+       struct pinctrl_map *new_map;
 
        *map = NULL;
        *num_maps = 0;
@@ -469,9 +470,13 @@ static int sunxi_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
         * We know have the number of maps we need, we can resize our
         * map array
         */
-       *map = krealloc(*map, i * sizeof(struct pinctrl_map), GFP_KERNEL);
-       if (!*map)
-               return -ENOMEM;
+       new_map = krealloc(*map, i * sizeof(struct pinctrl_map), GFP_KERNEL);
+       if (!new_map) {
+               ret = -ENOMEM;
+               goto err_free_map;
+       }
+
+       *map = new_map;
 
        return 0;