of: Fix double free in of_parse_phandle_with_args_map
authorChristian A. Ehrhardt <lk@c--e.de>
Fri, 29 Dec 2023 10:54:11 +0000 (11:54 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:40 +0000 (15:35 -0800)
commitb64d09a4e8596f76d27f4b4a90a1cf6baf6a82f8
tree6dba9670f6f5a599ef61074dd3099cc3b58e8aa2
parentacf50ff9360ef9d69560d80c0ec93fd5565e6f20
of: Fix double free in of_parse_phandle_with_args_map

[ Upstream commit 4dde83569832f9377362e50f7748463340c5db6b ]

In of_parse_phandle_with_args_map() the inner loop that
iterates through the map entries calls of_node_put(new)
to free the reference acquired by the previous iteration
of the inner loop. This assumes that the value of "new" is
NULL on the first iteration of the inner loop.

Make sure that this is true in all iterations of the outer
loop by setting "new" to NULL after its value is assigned to "cur".

Extend the unittest to detect the double free and add an additional
test case that actually triggers this path.

Fixes: bd6f2fd5a1 ("of: Support parsing phandle argument lists through a nexus node")
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: "Christian A. Ehrhardt" <lk@c--e.de>
Link: https://lore.kernel.org/r/20231229105411.1603434-1-lk@c--e.de
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/of/base.c
drivers/of/unittest-data/tests-phandle.dtsi
drivers/of/unittest.c