summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2023-02-28 11:31:00 +0400
committerDavid Gibson <david@gibson.dropbear.id.au>2023-03-01 18:43:15 +1100
commit083ab26da83bf5d14df5733e3b9954a0881f9ecc (patch)
tree3843b7ceaf95f6fa78f5fc70cd9c4327211950da
parent6f8b28f496093156ae126b434ed753094943da03 (diff)
downloaddevice-tree-compiler-083ab26da83bf5d14df5733e3b9954a0881f9ecc.tar.gz
tests: fix leaks spotted by ASAN
Always allocate from open_blob_rw(), to simplify memory management. The fixes are not exhaustive. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--tests/appendprop2.c1
-rw-r--r--tests/appendprop_addrrange.c2
-rw-r--r--tests/check_path.c1
-rw-r--r--tests/del_node.c7
-rw-r--r--tests/del_property.c8
-rw-r--r--tests/overlay.c1
-rw-r--r--tests/set_name.c8
-rw-r--r--tests/setprop.c1
-rw-r--r--tests/tests.h2
-rw-r--r--tests/testutils.c15
10 files changed, 25 insertions, 21 deletions
diff --git a/tests/appendprop2.c b/tests/appendprop2.c
index a0c1f6f..a96c88a 100644
--- a/tests/appendprop2.c
+++ b/tests/appendprop2.c
@@ -36,6 +36,7 @@ int main(int argc, char *argv[])
buf = xmalloc(SPACE);
CHECK(fdt_open_into(fdt, buf, SPACE));
+ free(fdt);
fdt = buf;
CHECK(fdt_appendprop(fdt, 0, "prop-bytes", bytes, sizeof(bytes)));
diff --git a/tests/appendprop_addrrange.c b/tests/appendprop_addrrange.c
index 538afcf..543a799 100644
--- a/tests/appendprop_addrrange.c
+++ b/tests/appendprop_addrrange.c
@@ -36,7 +36,7 @@ int main(int argc, char *argv[])
err = fdt_open_into(fdt, buf, 0x1000);
if (err)
FAIL("fdt_open_into(): %s", fdt_strerror(err));
-
+ free(fdt);
fdt = buf;
/* Set up */
diff --git a/tests/check_path.c b/tests/check_path.c
index cc9757a..c3ae15d 100644
--- a/tests/check_path.c
+++ b/tests/check_path.c
@@ -32,6 +32,7 @@ static void *open_dt(char *path)
* Resize our DTs to 4k so that we have room to operate on
*/
CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE));
+ free(dt);
return copy;
}
diff --git a/tests/del_node.c b/tests/del_node.c
index 10846df..c450b2c 100644
--- a/tests/del_node.c
+++ b/tests/del_node.c
@@ -18,15 +18,16 @@
int main(int argc, char *argv[])
{
- void *fdt;
+ void *fdt, *blob;
int subnode1_offset, subnode2_offset, subsubnode2_offset;
int err;
int oldsize, delsize, newsize;
test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
+ blob = load_blob_arg(argc, argv);
- fdt = open_blob_rw(fdt);
+ fdt = open_blob_rw(blob);
+ free(blob);
oldsize = fdt_totalsize(fdt);
diff --git a/tests/del_property.c b/tests/del_property.c
index 37e8303..27a700b 100644
--- a/tests/del_property.c
+++ b/tests/del_property.c
@@ -18,16 +18,17 @@
int main(int argc, char *argv[])
{
- void *fdt;
+ void *fdt, *blob;
const uint32_t *intp;
const char *strp;
int err, lenerr;
int oldsize, delsize, newsize;
test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
+ blob = load_blob_arg(argc, argv);
- fdt = open_blob_rw(fdt);
+ fdt = open_blob_rw(blob);
+ free(blob);
oldsize = fdt_totalsize(fdt);
@@ -73,5 +74,6 @@ int main(int argc, char *argv[])
if (newsize >= oldsize)
FAIL("Tree failed to shrink after deletions");
+ free(fdt);
PASS();
}
diff --git a/tests/overlay.c b/tests/overlay.c
index f3dd310..2d27918 100644
--- a/tests/overlay.c
+++ b/tests/overlay.c
@@ -186,6 +186,7 @@ static void *open_dt(char *path)
* Resize our DTs to 4k so that we have room to operate on
*/
CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE));
+ free(dt);
return copy;
}
diff --git a/tests/set_name.c b/tests/set_name.c
index 5020305..ab674e5 100644
--- a/tests/set_name.c
+++ b/tests/set_name.c
@@ -69,15 +69,17 @@ static void check_set_name(void *fdt, const char *path, const char *newname)
int main(int argc, char *argv[])
{
- void *fdt;
+ void *fdt, *blob;
test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
- fdt = open_blob_rw(fdt);
+ blob = load_blob_arg(argc, argv);
+ fdt = open_blob_rw(blob);
+ free(blob);
check_set_name(fdt, "/subnode@1", "subnode@17");
check_set_name(fdt, "/subnode@2/subsubnode@0", "fred@0");
check_set_name(fdt, "/subnode@17/subsubnode", "something@0");
+ free(fdt);
PASS();
}
diff --git a/tests/setprop.c b/tests/setprop.c
index fa3938d..c2d1365 100644
--- a/tests/setprop.c
+++ b/tests/setprop.c
@@ -36,6 +36,7 @@ int main(int argc, char *argv[])
if (err)
FAIL("fdt_open_into(): %s", fdt_strerror(err));
+ free(fdt);
fdt = buf;
intp = check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
diff --git a/tests/tests.h b/tests/tests.h
index bf8f23c..7c1b6c0 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -123,7 +123,7 @@ void vg_prepare_blob(void *fdt, size_t bufsize);
void *load_blob(const char *filename);
void *load_blob_arg(int argc, char *argv[]);
void save_blob(const char *filename, void *blob);
-void *open_blob_rw(void *blob);
+void *open_blob_rw(const void *blob);
#include "util.h"
diff --git a/tests/testutils.c b/tests/testutils.c
index ca343e0..4c85111 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -340,19 +340,14 @@ void save_blob(const char *filename, void *fdt)
free(tmp);
}
-void *open_blob_rw(void *blob)
+void *open_blob_rw(const void *blob)
{
int err;
- void *buf = blob;
+ void *buf;
+ int newsize = fdt_totalsize(blob) + 8;
- err = fdt_open_into(blob, buf, fdt_totalsize(blob));
- if (err == -FDT_ERR_NOSPACE) {
- /* Ran out of space converting to v17 */
- int newsize = fdt_totalsize(blob) + 8;
-
- buf = xmalloc(newsize);
- err = fdt_open_into(blob, buf, newsize);
- }
+ buf = xmalloc(newsize);
+ err = fdt_open_into(blob, buf, newsize);
if (err)
FAIL("fdt_open_into(): %s", fdt_strerror(err));
return buf;