Re: [PATCH v5 5/9] of/overlay: don't keep a negative id in ovcs->id on idr_alloc() failure

Geert Uytterhoeven <[email protected]>
Newsgroups org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <CAMuHMdUG0RH6sFpBxp-dXw4S8kdS0oyyCL=wzKE=TkheWQAs=w@mail.gmail.com>
Hi Abdurrahman,

Thanks for your patch!

On Thu, 23 Jul 2026 at 05:26, Abdurrahman Hussain
<[email protected]> wrote:
> of_overlay_fdt_apply() stores the idr_alloc() return value in
> ovcs->id before checking it. On failure the stored id is negative and
> the error path runs free_overlay_changeset(), whose "if (ovcs->id)"
> check passes: idr_remove() is called with a negative id and
> list_del() runs on ovcs->ovcs_list, which is not initialized until
> after the id allocation. An allocation failure at that point
> dereferences NULL.

Nice catch!

>
> Reset ovcs->id to 0 before taking the error path.
>
> Fixes: 61b4de4e0b38 ("of: overlay: minor restructuring")
> Assisted-by: Claude:claude-fable-5 [Claude Code]
> Signed-off-by: Abdurrahman Hussain <[email protected]>

> --- a/drivers/of/overlay.c
> +++ b/drivers/of/overlay.c
> @@ -1038,6 +1038,8 @@ int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size,
>         ovcs->id = idr_alloc(&ovcs_idr, ovcs, 1, 0, GFP_KERNEL);
>         if (ovcs->id <= 0) {
>                 ret = ovcs->id;
> +               /* free_overlay_changeset() treats a set id as registered */
> +               ovcs->id = 0;

(Alternatively, free_overlay_changeset() could check for a
strict-positive id)

However, I am wondering if this is the right fix?

All error cases above just return an error code, without doing
any cleanup. Failing to allocate an ID doesn't add any extra state...

>                 goto err_free_ovcs;

... so shouldn't this just  be changed to "goto out_unlock" instead?

>         }
>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.