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 <andrewprecious388@gmail.com>
Reviewed-by: Anthony PERARD <anthony.perard@vates.tech>
This commit is contained in:
Andrew Mbugua authored and Anthony PERARD committed 2026-10-12 17:31:39 +02:00
1 parent 292fb23a92
commit 1771ba8450
1 file changed
+4 -4
+4 -4
View File
@@ -181,10 +181,6 @@ int main(int argc, char **argv)
} }
} }
if (!log_dir) {
log_dir = strdup(XEN_LOG_DIR "/console");
}
if (geteuid() != 0) { if (geteuid() != 0) {
fprintf(stderr, "%s requires root to run.\n", argv[0]); fprintf(stderr, "%s requires root to run.\n", argv[0]);
exit(EPERM); exit(EPERM);
@@ -201,6 +197,10 @@ int main(int argc, char **argv)
daemonize(pidfile ? pidfile : XEN_RUN_DIR "/xenconsoled.pid"); daemonize(pidfile ? pidfile : XEN_RUN_DIR "/xenconsoled.pid");
} }
if (!log_dir) {
log_dir = strdup(XEN_LOG_DIR "/console");
}
if (!xen_setup()) if (!xen_setup())
exit(1); exit(1);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.