From 1771ba84501cb62a9e9f9fc60db9bbe44c6d1c57 Mon Sep 17 00:00:00 2001 From: Andrew Mbugua Date: Fri, 14 Aug 2026 00:27:23 +0300 Subject: [PATCH] tools/console/daemon: fix log_dir memory leak in xenconsoled Valgrind reports that 21 bytes are "still reachable" from the (XEN_LOG_DIR "/console") allocation: HEAP SUMMARY: in use at exit: 21 bytes in 1 blocks total heap usage: 9 allocs, 8 frees, 4,799 bytes allocated Since the dynamic memory allocation for the default log directory path happens before the process forks into the background, the parent and intermediate processes exit during daemonize() with the memory still reachable. Move the strdup() allocation down below the daemonize() block. This ensures only the final background daemon allocates the default path, matching the lifetime of the free(log_dir) cleanup loop at the exit of main(). With this change, Valgrind reports a clean heap summary HEAP SUMMARY: in use at exit: 0 bytes in 0 blocks total heap usage: 8 allocs, 8 frees, 4,778 bytes allocated Signed-off-by: Andrew Mbugua Reviewed-by: Anthony PERARD --- tools/console/daemon/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/console/daemon/main.c b/tools/console/daemon/main.c index aac7233a48..798077ac2f 100644 --- a/tools/console/daemon/main.c +++ b/tools/console/daemon/main.c @@ -181,10 +181,6 @@ int main(int argc, char **argv) } } - if (!log_dir) { - log_dir = strdup(XEN_LOG_DIR "/console"); - } - if (geteuid() != 0) { fprintf(stderr, "%s requires root to run.\n", argv[0]); exit(EPERM); @@ -201,6 +197,10 @@ int main(int argc, char **argv) daemonize(pidfile ? pidfile : XEN_RUN_DIR "/xenconsoled.pid"); } + if (!log_dir) { + log_dir = strdup(XEN_LOG_DIR "/console"); + } + if (!xen_setup()) exit(1);