From 5bf15f5fdca99673eda8052d04e80c5c0d741ba8 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Tue, 10 Mar 2026 13:05:50 +0100 Subject: [PATCH] Fix memory leaks in prpc_sockpath and prpc_main_loop prpc_sockpath allocated home via ppath_home but never freed it before returning. prpc_main_loop had three early-return paths that leaked sockpath before the normal free at bind() success. Co-Authored-By: Claude Sonnet 4.6 --- pclsync/prpc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pclsync/prpc.c b/pclsync/prpc.c index 221be7a..fd41ecc 100644 --- a/pclsync/prpc.c +++ b/pclsync/prpc.c @@ -241,11 +241,13 @@ void prpc_main_loop() { char *sockpath = prpc_sockpath(); if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { pdbg_logf(D_ERROR, "Unix socket error failed to open %s", sockpath); + pmem_free(PMEM_SUBSYS_OTHER, sockpath); return; } if (fchmod(fd, 0600) == -1) { pdbg_logf(D_ERROR, "Failed to set socket permissions"); + pmem_free(PMEM_SUBSYS_OTHER, sockpath); return; } @@ -257,9 +259,10 @@ void prpc_main_loop() { if (bind(fd, (struct sockaddr *)&addr, strlen(sockpath) + sizeof(addr.sun_family)) == -1) { pdbg_logf(D_ERROR, "Unix socket bind error"); + pmem_free(PMEM_SUBSYS_OTHER, sockpath); return; } - + pmem_free(PMEM_SUBSYS_OTHER, sockpath); if (listen(fd, 5) == -1) { @@ -335,5 +338,6 @@ char *prpc_sockpath() { } snprintf(sockpath, len, "%s%s", home, subdir); + pmem_free(PMEM_SUBSYS_OTHER, home); return sockpath; }