From 783d2675eff73d1937bf8f78b368b1004c2d28c5 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 30 Dec 2011 22:15:58 +0100 Subject: [PATCH] journal: fix a few bad memory accesses and leaks --- src/journal/journal-rate-limit.c | 2 ++ src/journal/journald.c | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/journal/journal-rate-limit.c b/src/journal/journal-rate-limit.c index f69ab277..243ff2a3 100644 --- a/src/journal/journal-rate-limit.c +++ b/src/journal/journal-rate-limit.c @@ -111,6 +111,8 @@ void journal_rate_limit_free(JournalRateLimit *r) { while (r->lru) journal_rate_limit_group_free(r->lru); + + free(r); } static bool journal_rate_limit_group_expired(JournalRateLimitGroup *g, usec_t ts) { diff --git a/src/journal/journald.c b/src/journal/journald.c index b290b5d2..8d6b3ab4 100644 --- a/src/journal/journald.c +++ b/src/journal/journald.c @@ -378,11 +378,22 @@ static char *shortened_cgroup_path(pid_t pid) { if (streq(init_path, "/")) init_path[0] = 0; - if (startswith(process_path, init_path)) - path = process_path + strlen(init_path); - else + if (startswith(process_path, init_path)) { + char *p; + + p = strdup(process_path + strlen(init_path)); + if (!p) { + free(process_path); + free(init_path); + return NULL; + } + path = p; + } else { path = process_path; + process_path = NULL; + } + free(process_path); free(init_path); return path; @@ -544,7 +555,7 @@ static void dispatch_message(Server *s, struct timeval *tv, int priority) { int rl; - char *path, *c; + char *path = NULL, *c; assert(s); assert(iovec || n == 0); @@ -1828,6 +1839,8 @@ static void server_done(Server *s) { if (s->rate_limit) journal_rate_limit_free(s->rate_limit); + + free(s->buffer); } int main(int argc, char *argv[]) { -- 2.39.5