[rtems commit] libfdt: Remove undefined behaviour setting empty properties

Sebastian Huber sebh at rtems.org
Thu Jul 19 05:07:41 UTC 2018


Module:    rtems
Branch:    master
Commit:    6dbbd277d900c2d8fc1be7b0c60e82843c554418
Changeset: http://git.rtems.org/rtems/commit/?id=6dbbd277d900c2d8fc1be7b0c60e82843c554418

Author:    David Gibson <david at gibson.dropbear.id.au>
Date:      Fri Feb 24 10:51:05 2017 +1100

libfdt: Remove undefined behaviour setting empty properties

The standard way of setting an empty property using libfdt is:
    fdt_setprop(fdt, nodeoffset, propname, NULL, 0);
However, the implementation of this includes an unconditional:
     memcpy(prop->data, NULL, 0);
Which although it will be a no-op (which is what we want) on many platforms
is technically undefined behaviour.  Correct this, so that when passing
a 0 length, passing a NULL pointer as the value to fdt_setprop() is
definitely safe.  This should quiet static checkers which complain about
this.

Signed-off-by: David Gibson <david at gibson.dropbear.id.au>

---

 cpukit/dtc/libfdt/fdt_rw.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/cpukit/dtc/libfdt/fdt_rw.c b/cpukit/dtc/libfdt/fdt_rw.c
index 2eed4f5..3fd5847 100644
--- a/cpukit/dtc/libfdt/fdt_rw.c
+++ b/cpukit/dtc/libfdt/fdt_rw.c
@@ -283,7 +283,8 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name,
 	if (err)
 		return err;
 
-	memcpy(prop->data, val, len);
+	if (len)
+		memcpy(prop->data, val, len);
 	return 0;
 }
 




More information about the vc mailing list