From a7428ababa1526a68b661c3f24d47934a08c8617 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:14:38 +0200 Subject: [PATCH 1/6] logit: fix minor (possible) memory leak Signed-off-by: Joachim Wiberg --- src/logit.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/logit.c b/src/logit.c index 8ebdd21f..02f46a74 100644 --- a/src/logit.c +++ b/src/logit.c @@ -164,7 +164,7 @@ static int parse_prio(char *arg, int *fac, int *lvl) } if (found == -1) - return 1; + goto notfound; *fac = found; prio = ptr; @@ -179,11 +179,15 @@ static int parse_prio(char *arg, int *fac, int *lvl) } } - if (found == -1) + if (found == -1) { + notfound: + if (duparg) + free(duparg); return 1; + } *lvl = found; - if (duparg != arg) + if (duparg) free(duparg); return 0; From 61be1ef880dbb8f5226f755ebc4e281b8ee749c8 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:15:25 +0200 Subject: [PATCH 2/6] Follow-up to b4b7ee1, also set process name -> "init" Signed-off-by: Joachim Wiberg --- src/finit.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/finit.c b/src/finit.c index 86aa7119..06c88f13 100644 --- a/src/finit.c +++ b/src/finit.c @@ -38,6 +38,7 @@ #ifdef HAVE_SYS_SYSMACROS_H #include #endif +#include #ifdef _LIBITE_LITE # include #else @@ -626,6 +627,7 @@ int main(int argc, char *argv[]) /* * Clear command line arguments for ps display, issue #442 */ + prctl(PR_SET_NAME, "init", 0, 0, 0); for (int i = 1; i < argc; i++) memset(argv[i], 0, strlen(argv[i])); From 4525aec118c299ca75c0e793f82fec6f57868148 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:17:09 +0200 Subject: [PATCH 3/6] libsystemd: fix socket leak in sd_notify() Signed-off-by: Joachim Wiberg --- libsystemd/sd-daemon.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libsystemd/sd-daemon.c b/libsystemd/sd-daemon.c index c58ab7fd..94c72304 100644 --- a/libsystemd/sd-daemon.c +++ b/libsystemd/sd-daemon.c @@ -78,10 +78,9 @@ int sd_notify(int unset_environment, const char *state) unsetenv("NOTIFY_SOCKET"); written = write(sd, state, len); - if (written != (ssize_t) len) { - close(sd); + close(sd); + if (written != (ssize_t) len) return written < 0 ? -errno : -EPROTO; - } return 1; } From 80b075052300ce79a210c6fef7256efc9daf521c Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:45:44 +0200 Subject: [PATCH 4/6] Simplify if-if-else-if-else in service_start() Coverity Scan gets very confused and think we are leaking sd in the systemd notify case. Signed-off-by: Joachim Wiberg --- src/service.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/service.c b/src/service.c index 6b35519f..8bb75810 100644 --- a/src/service.c +++ b/src/service.c @@ -698,8 +698,7 @@ static int service_start(svc_t *svc) close(fd); result = -1; goto fail; - } - if (pid > 1) { + } else if (pid > 0) { struct sockaddr_un sun; size_t len; @@ -734,7 +733,7 @@ static int service_start(svc_t *svc) default: break; } - } else if (pid == 0) { + } else { /* pid == 0 */ char str[strlen(NOTIFY_PATH) + 32]; char *args[MAX_NUM_SVC_ARGS + 1]; int status; @@ -885,8 +884,6 @@ static int service_start(svc_t *svc) syslog(LOG_ERR, "failed starting %s, exit code %d: %s", svc_ident(svc, NULL, 0), status, strerror(errno)); _exit(status); - } else if (debug) { - dbg("Starting PID %d: %s", svc->pid, cmdline); } if (!svc_is_sysv(svc)) From eadd01da1f2877f8169da108f5897f84e596edd9 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:46:57 +0200 Subject: [PATCH 5/6] Fix double-close, found by Coverity Scan Signed-off-by: Joachim Wiberg --- src/service.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/service.c b/src/service.c index 8bb75810..673d8799 100644 --- a/src/service.c +++ b/src/service.c @@ -721,12 +721,12 @@ static int service_start(svc_t *svc) } /* fallthrough */ case SVC_NOTIFY_S6: - close(fd); /* client-end of pipefd for s6 notify */ + if (svc->notify == SVC_NOTIFY_S6) + close(fd); /* client-end of pipefd for s6 notify */ + result = uev_io_init(ctx, &svc->notify_watcher, service_notify_cb, svc, sd, UEV_READ); if (result < 0) { err(1, "%s: failed setting up notify callback", svc_ident(svc, NULL, 0)); - if (svc->notify == SVC_NOTIFY_S6) - close(fd); close(sd); break; } From 0bef874cf3b4dfece898d6cf271f2a829decdf41 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 6 Jul 2025 15:49:01 +0200 Subject: [PATCH 6/6] logit: fix evaluation order violation, found by Coverity Scan Signed-off-by: Joachim Wiberg --- src/logit.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/logit.c b/src/logit.c index 02f46a74..b9d6d781 100644 --- a/src/logit.c +++ b/src/logit.c @@ -124,7 +124,9 @@ static int parse_level(char **buf, int default_level) static int do_log(int level, char *msg) { - syslog(parse_level(&msg, level), "%s", msg); + level = parse_level(&msg, level); + syslog(level, "%s", msg); + return 0; }