lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CACRpkda7MbBmas+jcPJ4k=L6ab+EHkKRA3LrTGQfWPKsHeMdWA@mail.gmail.com>
Date: Thu, 6 Feb 2025 09:31:15 +0100
From: Linus Walleij <linus.walleij@...aro.org>
To: Valentin Caron <valentin.caron@...s.st.com>
Cc: linux-gpio@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map

On Thu, Jan 16, 2025 at 6:02 PM Valentin Caron
<valentin.caron@...s.st.com> wrote:

> Cross case in pinctrl framework make impossible to an hogged pin and
> another, not hogged, used within the same device-tree node. For example
> with this simplified device-tree :
>
>   &pinctrl {
>     pinctrl_pin_1: pinctrl-pin-1 {
>       pins = "dummy-pinctrl-pin";
>     };
>   };
>
>   &rtc {
>     pinctrl-names = "default"
>     pinctrl-0 = <&pinctrl_pin_1 &rtc_pin_1>
>
>     rtc_pin_1: rtc-pin-1 {
>       pins = "dummy-rtc-pin";
>     };
>   };
>
> "pinctrl_pin_1" configuration is never set. This produces this path in
> the code:
>
>   really_probe()
>     pinctrl_bind_pins()
>     | devm_pinctrl_get()
>     |   pinctrl_get()
>     |     create_pinctrl()
>     |       pinctrl_dt_to_map()
>     |         // Hog pin create an abort for all pins of the node
>     |         ret = dt_to_map_one_config()
>     |         | /* Do not defer probing of hogs (circular loop) */
>     |         | if (np_pctldev == p->dev->of_node)
>     |         |   return -ENODEV;
>     |         if (ret)
>     |           goto err
>     |
>     call_driver_probe()
>       stm32_rtc_probe()
>         pinctrl_enable()
>           pinctrl_claim_hogs()
>             create_pinctrl()
>               for_each_maps(maps_node, i, map)
>                 // Not hog pin is skipped
>                 if (pctldev && strcmp(dev_name(pctldev->dev),
>                                       map->ctrl_dev_name))
>                   continue;
>
> At the first call of create_pinctrl() the hogged pin produces an abort to
> avoid a defer of hogged pins. All other pin configurations are trashed.
>
> At the second call, create_pinctrl is now called with pctldev parameter to
> get hogs, but in this context only hogs are set. And other pins are
> skipped.
>
> To handle this, do not produce an abort in the first call of
> create_pinctrl(). Classic pin configuration will be set in
> pinctrl_bind_pins() context. And the hogged pin configuration will be set
> in pinctrl_claim_hogs() context.
>
> Signed-off-by: Valentin Caron <valentin.caron@...s.st.com>

It looks correct to me, so patch is applied for v6.15!

Yours,
Linus Walleij

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ