mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
of/overlay: only treat a positive changeset id as registered
of_overlay_fdt_apply() stores the idr_alloc() return value in
ovcs->id before checking it. On failure the stored id is negative,
free_overlay_changeset()'s "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.
Make free_overlay_changeset() treat only a strict-positive id as
registered. The rest of the function already copes with a
partially-initialized ovcs, so the error path stays a plain
goto err_free_ovcs.
Fixes: 61b4de4e0b ("of: overlay: minor restructuring")
Cc: stable@vger.kernel.org
Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Assisted-by: Claude:claude-fable-5 [Claude Code]
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Link: https://patch.msgid.link/20260831-nh-of-alias-overlay-v7-5-02754604805a@nexthop.ai
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
parent
814f2da699
commit
44081d708b
|
|
@ -864,7 +864,8 @@ static void free_overlay_changeset(struct overlay_changeset *ovcs)
|
|||
if (ovcs->cset.entries.next)
|
||||
of_changeset_destroy(&ovcs->cset);
|
||||
|
||||
if (ovcs->id) {
|
||||
/* a failed idr_alloc() leaves its negative error in ovcs->id */
|
||||
if (ovcs->id > 0) {
|
||||
idr_remove(&ovcs_idr, ovcs->id);
|
||||
list_del(&ovcs->ovcs_list);
|
||||
ovcs->id = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user