]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
pinctrl: check the return value of pinmux_ops::get_function_name()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 2 Sep 2025 11:59:10 +0000 (13:59 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2025 09:56:41 +0000 (11:56 +0200)
commit 4002ee98c022d671ecc1e4a84029e9ae7d8a5603 upstream.

While the API contract in docs doesn't specify it explicitly, the
generic implementation of the get_function_name() callback from struct
pinmux_ops - pinmux_generic_get_function_name() - can fail and return
NULL. This is already checked in pinmux_check_ops() so add a similar
check in pinmux_func_name_to_selector() instead of passing the returned
pointer right down to strcmp() where the NULL can get dereferenced. This
is normal operation when adding new pinfunctions.

Cc: stable@vger.kernel.org
Tested-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/pinctrl/pinmux.c

index f94d43b082d9c918e6f77f95fee386369b2bc893..0cbf698d16db54a90aaee0cb89c71c8dec29d670 100644 (file)
@@ -328,7 +328,7 @@ static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
        while (selector < nfuncs) {
                const char *fname = ops->get_function_name(pctldev, selector);
 
-               if (!strcmp(function, fname))
+               if (fname && !strcmp(function, fname))
                        return selector;
 
                selector++;