From: Thomas Huth <[email protected]>
In case realpath() fails, the code returns early in the function
qemu_maybe_daemonize(), without freeing the allocated memory. Add
a g_free() here to fix it.
And while we're at it, also free the memory in the qemu_unlink_pidfile()
function - it's not that important since QEMU is going to terminate anyway,
but some malloc sanitizers might still complain if we don't free it.
Fixes: dee2a4d4d2f ("vl: defuse PID file path resolve error")
Signed-off-by: Thomas Huth <[email protected]>
---
v2: Free memory in qemu_unlink_pidfile(), too
system/vl.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/system/vl.c b/system/vl.c
index d2f4044e5d8..a31b7f87230 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1633,6 +1633,8 @@ static void qemu_unlink_pidfile(Notifier *n, void *data)
upn = DO_UPCAST(struct UnlinkPidfileNotifier, notifier, n);
unlink(upn->pid_file_realpath);
+ g_free(upn->pid_file_realpath);
+ upn->pid_file_realpath = NULL;
}
static const QEMUOption *lookup_opt(int argc, char **argv,
@@ -2670,6 +2672,7 @@ static void qemu_maybe_daemonize(const char *pid_file)
warn_report("not removing PID file on exit: cannot resolve PID
"
"file path: %s: %s", pid_file, strerror(errno));
}
+ g_free(pid_file_realpath);
return;
}
--
2.54.0