From 42d768790c419debf0fa9b244676268b5f4ec7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 14 Jan 2017 22:00:48 -0500 Subject: [PATCH 1/8] udev: fix variable assignment gcc doesn't like &, even though &sbuf and buf are the same things afaiu. Follow-up for e20a917105b. --- src/udev/udev-event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index be7c7367ff..deffefd60b 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -213,7 +213,7 @@ subst: _s = s; _l = l; /* temporarily use sbuf */ - s = &sbuf; + s = sbuf; l = UTIL_PATH_SIZE; } From 6fefc0eded00974e5b2862bd5efc7ef975c6a318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 11:51:48 -0500 Subject: [PATCH 2/8] cryptsetup: fix unitialized variable CID #1368416. Coverity web interface is back, yay! --- src/cryptsetup/cryptsetup.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c index bff5664f0f..cefd1b85df 100644 --- a/src/cryptsetup/cryptsetup.c +++ b/src/cryptsetup/cryptsetup.c @@ -750,6 +750,7 @@ int main(int argc, char *argv[]) { } else { log_error("Unknown verb %s.", argv[1]); + r = -EINVAL; goto finish; } From e50412ef194475b2c36bd91803ddede657627b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 11:55:46 -0500 Subject: [PATCH 3/8] journalctl: fix memleak This is harmless, it would only happen if --verify-key is used multiple times. But let's fix it for correctness. CID ##1368415. --- src/journal/journalctl.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 73204b3753..2a5f2b37e8 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -683,11 +683,12 @@ static int parse_argv(int argc, char *argv[]) { case ARG_VERIFY_KEY: arg_action = ACTION_VERIFY; - arg_verify_key = strdup(optarg); - if (!arg_verify_key) - return -ENOMEM; - arg_merge = false; + r = free_and_strdup(&arg_verify_key, optarg); + if (r < 0) + return r; string_erase(optarg); + + arg_merge = false; break; case ARG_INTERVAL: @@ -888,7 +889,7 @@ static int parse_argv(int argc, char *argv[]) { * to users, and automatically turn --unit= into --user-unit= if combined with --user. */ r = strv_extend_strv(&arg_user_units, arg_system_units, true); if (r < 0) - return -ENOMEM; + return r; arg_system_units = strv_free(arg_system_units); } From c05347807f27e79730a6938a78370b59877b2338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 12:41:34 -0500 Subject: [PATCH 4/8] process-util: rename char *r to ans and add comment Add a comment about the return value and rename r to ans. r is nowadays reserved for the integer return value, and char *r is confusing. --- src/basic/process-util.c | 58 ++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/basic/process-util.c b/src/basic/process-util.c index d5e7edb589..eead8b00da 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -104,7 +104,7 @@ int get_process_comm(pid_t pid, char **name) { int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line) { _cleanup_fclose_ FILE *f = NULL; bool space = false; - char *r = NULL, *k; + char *k, *ans = NULL; const char *p; int c; @@ -118,7 +118,7 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * * command line that resolves to the empty string will return the "comm" name of the process instead. * * Returns -ESRCH if the process doesn't exist, and -ENOENT if the process has no command line (and - * comm_fallback is false). */ + * comm_fallback is false). Returns 0 and sets *line otherwise. */ p = procfs_file_alloca(pid, "cmdline"); @@ -132,11 +132,11 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * if (max_length == 1) { /* If there's only room for one byte, return the empty string */ - r = new0(char, 1); - if (!r) + ans = new0(char, 1); + if (!ans) return -ENOMEM; - *line = r; + *line = ans; return 0; } else if (max_length == 0) { @@ -144,36 +144,36 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * while ((c = getc(f)) != EOF) { - if (!GREEDY_REALLOC(r, allocated, len+3)) { - free(r); + if (!GREEDY_REALLOC(ans, allocated, len+3)) { + free(ans); return -ENOMEM; } if (isprint(c)) { if (space) { - r[len++] = ' '; + ans[len++] = ' '; space = false; } - r[len++] = c; + ans[len++] = c; } else if (len > 0) space = true; } if (len > 0) - r[len] = 0; + ans[len] = '\0'; else - r = mfree(r); + ans = mfree(ans); } else { bool dotdotdot = false; size_t left; - r = new(char, max_length); - if (!r) + ans = new(char, max_length); + if (!ans) return -ENOMEM; - k = r; + k = ans; left = max_length; while ((c = getc(f)) != EOF) { @@ -197,20 +197,20 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * *(k++) = (char) c; left--; - } else if (k > r) + } else if (k > ans) space = true; } if (dotdotdot) { if (max_length <= 4) { - k = r; + k = ans; left = max_length; } else { - k = r + max_length - 4; + k = ans + max_length - 4; left = 4; /* Eat up final spaces */ - while (k > r && isspace(k[-1])) { + while (k > ans && isspace(k[-1])) { k--; left++; } @@ -223,11 +223,11 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * } /* Kernel threads have no argv[] */ - if (isempty(r)) { + if (isempty(ans)) { _cleanup_free_ char *t = NULL; int h; - free(r); + free(ans); if (!comm_fallback) return -ENOENT; @@ -237,22 +237,22 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * return h; if (max_length == 0) - r = strjoin("[", t, "]"); + ans = strjoin("[", t, "]"); else { size_t l; l = strlen(t); if (l + 3 <= max_length) - r = strjoin("[", t, "]"); + ans = strjoin("[", t, "]"); else if (max_length <= 6) { - r = new(char, max_length); - if (!r) + ans = new(char, max_length); + if (!ans) return -ENOMEM; - memcpy(r, "[...]", max_length-1); - r[max_length-1] = 0; + memcpy(ans, "[...]", max_length-1); + ans[max_length-1] = 0; } else { char *e; @@ -264,14 +264,14 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * e--; *e = 0; - r = strjoin("[", t, "...]"); + ans = strjoin("[", t, "...]"); } } - if (!r) + if (!ans) return -ENOMEM; } - *line = r; + *line = ans; return 0; } From 43479f8d21a770cdb4870087fcec446b3d845cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 13:27:37 -0500 Subject: [PATCH 5/8] systemctl: uninitalized variable CID #1368270. Easily reproduced with COLUMNS=50 ./systemctl --no-pager. --- src/systemctl/systemctl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 8955d5f51f..9c0ee37520 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -472,7 +472,8 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) { id_len += incr; desc_len += MIN(extra_len - incr, max_desc_len - desc_len); } - } + } else + desc_len = 0; } else { id_len = max_id_len; desc_len = max_desc_len; From a9bd056ad9b3ac8c930a667842b16df97ba8fc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 13:38:43 -0500 Subject: [PATCH 6/8] systemctl: fix alignment with units in not-found state A fixed value (6 and later 5) was added back in 4deb3b93911, and not updated when load_len was added later on. Also the other 5 with 1 + 1 + 1 + 1 + 1 to make it easier to see that this is about the column separators. --- src/systemctl/systemctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 9c0ee37520..41e8d6075a 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -450,7 +450,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) { unsigned basic_len; id_len = MIN(max_id_len, 25u); /* as much as it needs, but at most 25 for now */ - basic_len = circle_len + 5 + id_len + 5 + active_len + sub_len; + basic_len = circle_len + 1 + id_len + 1 + load_len + 1 + active_len + 1 + sub_len + 1; if (job_count) basic_len += job_len + 1; From 402a81c7742ee8b66f93f9eb1e7cb6227b6768e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 13:42:53 -0500 Subject: [PATCH 7/8] shared/install-printf: fix memleak instance might be "", and that string would be leaked. CID #1368264. --- src/shared/install-printf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c index 823fb61cda..c10ed3d311 100644 --- a/src/shared/install-printf.c +++ b/src/shared/install-printf.c @@ -93,9 +93,9 @@ static int specifier_instance(char specifier, void *data, void *userdata, char * return r; if (isempty(instance)) { - instance = strdup(i->default_instance ?: ""); - if (!instance) - return -ENOMEM; + r = free_and_strdup(&instance, i->default_instance ?: ""); + if (r < 0) + return r; } *ret = instance; From e0489532fd5969be6e261a558cae91005820fc0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Jan 2017 16:57:57 -0500 Subject: [PATCH 8/8] nspawn: fix memleak CID #1368262: fn is allocated with new, so it should be freed. --- src/nspawn/nspawn.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 6396a69c5c..78ae2f4a0f 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -3470,8 +3470,8 @@ static int run(int master, } static int load_root_hash(const char *image) { - _cleanup_free_ char *text = NULL; - char *fn, *n, *e; + _cleanup_free_ char *text = NULL, *fn = NULL; + char *n, *e; void *k; size_t l; int r;