From 083ab26da83bf5d14df5733e3b9954a0881f9ecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Tue, 28 Feb 2023 11:31:00 +0400 Subject: tests: fix leaks spotted by ASAN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Always allocate from open_blob_rw(), to simplify memory management. The fixes are not exhaustive. Signed-off-by: Marc-André Lureau Signed-off-by: David Gibson --- tests/appendprop2.c | 1 + tests/appendprop_addrrange.c | 2 +- tests/check_path.c | 1 + tests/del_node.c | 7 ++++--- tests/del_property.c | 8 +++++--- tests/overlay.c | 1 + tests/set_name.c | 8 +++++--- tests/setprop.c | 1 + tests/tests.h | 2 +- tests/testutils.c | 15 +++++---------- 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; -- cgit v1.1