aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Huth <thuth@redhat.com>2022-11-25 09:30:54 +0100
committerThomas Huth <thuth@redhat.com>2022-12-03 21:56:13 +0100
commit0f0a9e4e5c38c45ca7e6ac09cb36db21d42ec6dd (patch)
tree2cb91990acc36aa50b15a38390b749b2767d559e
parentc4ffd91aba1c3d878e99a3e7ba8aad4826728ece (diff)
downloadqemu-0f0a9e4e5c38c45ca7e6ac09cb36db21d42ec6dd.zip
qemu-0f0a9e4e5c38c45ca7e6ac09cb36db21d42ec6dd.tar.gz
qemu-0f0a9e4e5c38c45ca7e6ac09cb36db21d42ec6dd.tar.bz2
tests/qtest/migration-test: Fix unlink error and memory leaks
When running the migration test compiled with Clang from Fedora 37 and sanitizers enabled, there is an error complaining about unlink(): ../tests/qtest/migration-test.c:1072:12: runtime error: null pointer passed as argument 1, which is declared to never be null /usr/include/unistd.h:858:48: note: nonnull attribute specified here SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../tests/qtest/migration-test.c:1072:12 in (test program exited with status code 1) TAP parsing error: Too few tests run (expected 33, got 20) The data->clientcert and data->clientkey pointers can indeed be unset in some tests, so we have to check them before calling unlink() with those. While we're at it, I also noticed that the code is only freeing some but not all of the allocated strings in this function, and indeed, valgrind is also complaining about memory leaks here. So let's call g_free() on all allocated strings to avoid leaking memory here. Message-Id: <20221125083054.117504-1-thuth@redhat.com> Tested-by: Bin Meng <bmeng@tinylab.org> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
-rw-r--r--tests/qtest/migration-test.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
index 442998d..dbde726 100644
--- a/tests/qtest/migration-test.c
+++ b/tests/qtest/migration-test.c
@@ -1066,15 +1066,27 @@ test_migrate_tls_x509_finish(QTestState *from,
TestMigrateTLSX509Data *data = opaque;
test_tls_cleanup(data->keyfile);
+ g_free(data->keyfile);
+
unlink(data->cacert);
+ g_free(data->cacert);
unlink(data->servercert);
+ g_free(data->servercert);
unlink(data->serverkey);
- unlink(data->clientcert);
- unlink(data->clientkey);
- rmdir(data->workdir);
+ g_free(data->serverkey);
+ if (data->clientcert) {
+ unlink(data->clientcert);
+ g_free(data->clientcert);
+ }
+ if (data->clientkey) {
+ unlink(data->clientkey);
+ g_free(data->clientkey);
+ }
+
+ rmdir(data->workdir);
g_free(data->workdir);
- g_free(data->keyfile);
+
g_free(data);
}
#endif /* CONFIG_TASN1 */