]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
of: Fix of_find_node_opts_by_path() handling of alias+path+options
authorZijun Hu <quic_zijuhu@quicinc.com>
Mon, 16 Dec 2024 00:40:40 +0000 (08:40 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 11:47:08 +0000 (12:47 +0100)
commit b9e58c934c56aa35b0fb436d9afd86ef326bae0e upstream.

of_find_node_opts_by_path() fails to find OF device node when its
@path parameter have pattern below:

"alias-name/node-name-1/.../node-name-N:options".

The reason is that alias name length calculated by the API is wrong, as
explained by example below:

"testcase-alias/phandle-tests/consumer-a:testaliasoption".
 ^             ^                        ^
 0             14                       39

The right length of alias 'testcase-alias' is 14, but the result worked
out by the API is 39 which is obvious wrong.

Fix by using index of either '/' or ':' as the length who comes earlier.

Fixes: 75c28c09af99 ("of: add optional options parameter to of_find_node_by_path()")
Cc: stable@vger.kernel.org
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Link: https://lore.kernel.org/r/20241216-of_core_fix-v2-1-e69b8f60da63@quicinc.com
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/of/base.c

index cb2a1c5b283a49a13072028ac84460cfc1d2616a..1029173ded4ddde69592ded6a5b9cac17cd59320 100644 (file)
@@ -926,10 +926,10 @@ struct device_node *of_find_node_opts_by_path(const char *path, const char **opt
        /* The path could begin with an alias */
        if (*path != '/') {
                int len;
-               const char *p = separator;
+               const char *p = strchrnul(path, '/');
 
-               if (!p)
-                       p = strchrnul(path, '/');
+               if (separator && separator < p)
+                       p = separator;
                len = p - path;
 
                /* of_aliases must not be NULL */