]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pinctrl: pinconf-generic: fix properties bitmap leak in parse_fw_cfg()
authorFelix Gu <ustc.gu@gmail.com>
Mon, 20 Apr 2026 10:55:55 +0000 (18:55 +0800)
committerLinus Walleij <linusw@kernel.org>
Tue, 28 Apr 2026 09:42:09 +0000 (11:42 +0200)
In parse_fw_cfg(), if fwnode_property_match_property_string() fails with
-ENOENT, the code returns directly and leaks the bitmap.

Use __free(bitmap) for automatic cleanup to fix the leak.

Fixes: 9c105255108b ("pinctrl: pinconf-generic: perform basic checks on pincfg properties")
Signed-off-by: Felix Gu <ustc.gu@gmail.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>
drivers/pinctrl/pinconf-generic.c

index d333ddd442987b91806cd42029826fb7153d8dfb..95c803c40a7d4292276250c864e4f189ae65acc2 100644 (file)
@@ -225,10 +225,9 @@ static int parse_fw_cfg(struct fwnode_handle *fwnode,
                        unsigned int count, unsigned long *cfg,
                        unsigned int *ncfg)
 {
-       unsigned long *properties;
        int i, test;
 
-       properties = bitmap_zalloc(count, GFP_KERNEL);
+       unsigned long *properties __free(bitmap) = bitmap_zalloc(count, GFP_KERNEL);
 
        for (i = 0; i < count; i++) {
                u32 val;
@@ -263,7 +262,6 @@ static int parse_fw_cfg(struct fwnode_handle *fwnode,
                        if (ret) {
                                pr_err("%pfw: conflicting setting detected for %s\n",
                                       fwnode, par->property);
-                               bitmap_free(properties);
                                return -EINVAL;
                        }
                }
@@ -295,7 +293,6 @@ static int parse_fw_cfg(struct fwnode_handle *fwnode,
                pr_err("%pfw: cannot have multiple drive configurations\n",
                       fwnode);
 
-       bitmap_free(properties);
        return 0;
 }