Jiri Slaby c5b460
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Jiri Slaby c5b460
Date: Wed, 15 Feb 2023 15:42:38 +0200
Jiri Slaby c5b460
Subject: [PATCH] pinctrl: at91: use devm_kasprintf() to avoid potential leaks
Jiri Slaby c5b460
 (part 2)
Jiri Slaby c5b460
References: bsc#1012628
Jiri Slaby c5b460
Patch-mainline: 6.3.4
Jiri Slaby c5b460
Git-commit: f494c1913cbb34b9e2078b7b045c87c1ca6df791
Jiri Slaby c5b460
Jiri Slaby c5b460
[ Upstream commit f494c1913cbb34b9e2078b7b045c87c1ca6df791 ]
Jiri Slaby c5b460
Jiri Slaby c5b460
Use devm_kasprintf() instead of kasprintf() to avoid any potential
Jiri Slaby c5b460
leaks. At the moment drivers have no remove functionality hence
Jiri Slaby c5b460
there is no need for fixes tag.
Jiri Slaby c5b460
Jiri Slaby c5b460
While at it, switch to use devm_kasprintf_strarray().
Jiri Slaby c5b460
Jiri Slaby c5b460
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Jiri Slaby c5b460
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Jiri Slaby c5b460
Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Jiri Slaby c5b460
Link: https://lore.kernel.org/r/20230215134242.37618-2-andriy.shevchenko@linux.intel.com
Jiri Slaby c5b460
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Jiri Slaby c5b460
Signed-off-by: Sasha Levin <sashal@kernel.org>
Jiri Slaby c5b460
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby c5b460
---
Jiri Slaby c5b460
 drivers/pinctrl/pinctrl-at91.c | 23 +++++++++++++++++------
Jiri Slaby c5b460
 1 file changed, 17 insertions(+), 6 deletions(-)
Jiri Slaby c5b460
Jiri Slaby c5b460
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
Jiri Slaby c5b460
index 735c501e..9fa68ca4 100644
Jiri Slaby c5b460
--- a/drivers/pinctrl/pinctrl-at91.c
Jiri Slaby c5b460
+++ b/drivers/pinctrl/pinctrl-at91.c
Jiri Slaby c5b460
@@ -18,6 +18,7 @@
Jiri Slaby c5b460
 #include <linux/pm.h>
Jiri Slaby c5b460
 #include <linux/seq_file.h>
Jiri Slaby c5b460
 #include <linux/slab.h>
Jiri Slaby c5b460
+#include <linux/string_helpers.h>
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 /* Since we request GPIOs from ourself */
Jiri Slaby c5b460
 #include <linux/pinctrl/consumer.h>
Jiri Slaby c5b460
@@ -1371,6 +1372,7 @@ static int at91_pinctrl_probe_dt(struct platform_device *pdev,
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 static int at91_pinctrl_probe(struct platform_device *pdev)
Jiri Slaby c5b460
 {
Jiri Slaby c5b460
+	struct device *dev = &pdev->dev;
Jiri Slaby c5b460
 	struct at91_pinctrl *info;
Jiri Slaby c5b460
 	struct pinctrl_pin_desc *pdesc;
Jiri Slaby c5b460
 	int ret, i, j, k;
Jiri Slaby c5b460
@@ -1394,9 +1396,19 @@ static int at91_pinctrl_probe(struct platform_device *pdev)
Jiri Slaby c5b460
 		return -ENOMEM;
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 	for (i = 0, k = 0; i < gpio_banks; i++) {
Jiri Slaby c5b460
+		char **names;
Jiri Slaby c5b460
+
Jiri Slaby c5b460
+		names = devm_kasprintf_strarray(dev, "pio", MAX_NB_GPIO_PER_BANK);
Jiri Slaby c5b460
+		if (!names)
Jiri Slaby c5b460
+			return -ENOMEM;
Jiri Slaby c5b460
+
Jiri Slaby c5b460
 		for (j = 0; j < MAX_NB_GPIO_PER_BANK; j++, k++) {
Jiri Slaby c5b460
+			char *name = names[j];
Jiri Slaby c5b460
+
Jiri Slaby c5b460
+			strreplace(name, '-', i + 'A');
Jiri Slaby c5b460
+
Jiri Slaby c5b460
 			pdesc->number = k;
Jiri Slaby c5b460
-			pdesc->name = kasprintf(GFP_KERNEL, "pio%c%d", i + 'A', j);
Jiri Slaby c5b460
+			pdesc->name = name;
Jiri Slaby c5b460
 			pdesc++;
Jiri Slaby c5b460
 		}
Jiri Slaby c5b460
 	}
Jiri Slaby c5b460
@@ -1797,7 +1809,8 @@ static const struct of_device_id at91_gpio_of_match[] = {
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 static int at91_gpio_probe(struct platform_device *pdev)
Jiri Slaby c5b460
 {
Jiri Slaby c5b460
-	struct device_node *np = pdev->dev.of_node;
Jiri Slaby c5b460
+	struct device *dev = &pdev->dev;
Jiri Slaby c5b460
+	struct device_node *np = dev->of_node;
Jiri Slaby c5b460
 	struct at91_gpio_chip *at91_chip = NULL;
Jiri Slaby c5b460
 	struct gpio_chip *chip;
Jiri Slaby c5b460
 	struct pinctrl_gpio_range *range;
Jiri Slaby c5b460
@@ -1866,16 +1879,14 @@ static int at91_gpio_probe(struct platform_device *pdev)
Jiri Slaby c5b460
 			chip->ngpio = ngpio;
Jiri Slaby c5b460
 	}
Jiri Slaby c5b460
 
Jiri Slaby c5b460
-	names = devm_kcalloc(&pdev->dev, chip->ngpio, sizeof(char *),
Jiri Slaby c5b460
-			     GFP_KERNEL);
Jiri Slaby c5b460
-
Jiri Slaby c5b460
+	names = devm_kasprintf_strarray(dev, "pio", chip->ngpio);
Jiri Slaby c5b460
 	if (!names) {
Jiri Slaby c5b460
 		ret = -ENOMEM;
Jiri Slaby c5b460
 		goto clk_enable_err;
Jiri Slaby c5b460
 	}
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 	for (i = 0; i < chip->ngpio; i++)
Jiri Slaby c5b460
-		names[i] = devm_kasprintf(&pdev->dev, GFP_KERNEL, "pio%c%d", alias_idx + 'A', i);
Jiri Slaby c5b460
+		strreplace(names[i], '-', alias_idx + 'A');
Jiri Slaby c5b460
 
Jiri Slaby c5b460
 	chip->names = (const char *const *)names;
Jiri Slaby c5b460
 
Jiri Slaby c5b460
-- 
Jiri Slaby c5b460
2.35.3
Jiri Slaby c5b460