From 411a812540bdd84546eb685d346673f6af2f6e9a Mon Sep 17 00:00:00 2001 From: Wasim Nazir Date: Sun, 25 May 2025 00:01:55 +0530 Subject: libfdt: overlay_merge: Fix copy_node for multiple phandles Update local fixups property with multiple phandles if any. Change-Id: Ic8be4ad29f59ecef07f11a0592989c979e66ea81 Signed-off-by: Wasim Nazir --- libfdt/fdt_overlay.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c index 644d16b..90b9e05 100644 --- a/libfdt/fdt_overlay.c +++ b/libfdt/fdt_overlay.c @@ -710,7 +710,7 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, } fdt_for_each_property_offset(prop, fdto, fdto_child) { - int ret; + int ret, fdt_len = 0; const char *value, *pname; void *p; @@ -718,6 +718,9 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, if (!value) return len; + if (fdt_getprop(fdt, parent, pname, &fdt_len)) + len += fdt_len; + ret = fdt_setprop_placeholder(fdt, parent, pname, len, &p); vvdprintf ("%s: +setprop: In fdt-parent-node(%s), add fdto-prop(%s), " @@ -726,6 +729,13 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, if (ret) return ret; + if (fdt_len > 0) { + p = (char *)p + fdt_len; + len -= fdt_len; + vvdprintf("%s: fdto-prop(%s): Copy only new values\n", + __func__, pname); + } + memcpy(p, value, len); } -- cgit v1.2.3-59-g8ed1b