From c60d95ca4f8dcd42731aadcabca990dad2176063 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Wed, 17 Mar 2021 10:05:47 +0100 Subject: [PATCH 1/9] journal-gatewayd: use automatic cleanup --- src/journal-remote/journal-gatewayd.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c index 86df022b64..4cefe3918c 100644 --- a/src/journal-remote/journal-gatewayd.c +++ b/src/journal-remote/journal-gatewayd.c @@ -641,7 +641,7 @@ static int request_handler_redirect( struct MHD_Connection *connection, const char *target) { - char *page; + _cleanup_free_ char *page = NULL; _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL; assert(connection); @@ -651,10 +651,9 @@ static int request_handler_redirect( return respond_oom(connection); response = MHD_create_response_from_buffer(strlen(page), page, MHD_RESPMEM_MUST_FREE); - if (!response) { - free(page); + if (!response) return respond_oom(connection); - } + TAKE_PTR(page); if (MHD_add_response_header(response, "Content-Type", "text/html") == MHD_NO || MHD_add_response_header(response, "Location", target) == MHD_NO) From a6f575a1e88dbc01559091c3cc069f4800e32fe7 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Wed, 17 Mar 2021 10:22:15 +0100 Subject: [PATCH 2/9] journal-upload: cleanup CURL* on error --- src/journal-remote/journal-upload.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index e56e336b4f..9a7a4e92a4 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -71,6 +71,8 @@ static void close_fd_input(Uploader *u); } \ } while (0) +DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(CURL*, curl_easy_cleanup, NULL); + static size_t output_callback(char *buf, size_t size, size_t nmemb, @@ -202,7 +204,7 @@ int start_upload(Uploader *u, } if (!u->easy) { - CURL *curl; + _cleanup_(curl_easy_cleanupp) CURL *curl = NULL; curl = curl_easy_init(); if (!curl) @@ -260,7 +262,7 @@ int start_upload(Uploader *u, easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1, LOG_WARNING, ); - u->easy = curl; + u->easy = TAKE_PTR(curl); } else { /* truncate the potential old error message */ u->error[0] = '\0'; From 3851069709dbfc4729d206c208f0f773f6fb8da5 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Wed, 17 Mar 2021 12:20:11 +0100 Subject: [PATCH 3/9] journal-upload: make the curl_slist cleanup actually work If h is NULL, it is pointless to call curl_slist_free_all() on it... --- src/journal-remote/journal-upload.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 9a7a4e92a4..af53f98d13 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -182,23 +182,25 @@ int start_upload(Uploader *u, assert(input_callback); if (!u->header) { - struct curl_slist *h; + struct curl_slist *h, *l; h = curl_slist_append(NULL, "Content-Type: application/vnd.fdo.journal"); if (!h) return log_oom(); - h = curl_slist_append(h, "Transfer-Encoding: chunked"); - if (!h) { + l = curl_slist_append(h, "Transfer-Encoding: chunked"); + if (!l) { curl_slist_free_all(h); return log_oom(); } + h = l; - h = curl_slist_append(h, "Accept: text/plain"); - if (!h) { + l = curl_slist_append(h, "Accept: text/plain"); + if (!l) { curl_slist_free_all(h); return log_oom(); } + h = l; u->header = h; } From c4a2d475f12b5d61118e4e54cb3b0663bdcdfbd0 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Wed, 17 Mar 2021 13:25:47 +0100 Subject: [PATCH 4/9] journal-upload: use _cleanup_ for curl_slist --- src/journal-remote/journal-upload.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index af53f98d13..a8f1f7e511 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -72,6 +72,7 @@ static void close_fd_input(Uploader *u); } while (0) DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(CURL*, curl_easy_cleanup, NULL); +DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct curl_slist*, curl_slist_free_all, NULL); static size_t output_callback(char *buf, size_t size, @@ -182,27 +183,24 @@ int start_upload(Uploader *u, assert(input_callback); if (!u->header) { - struct curl_slist *h, *l; + _cleanup_(curl_slist_free_allp) struct curl_slist *h = NULL; + struct curl_slist *l; h = curl_slist_append(NULL, "Content-Type: application/vnd.fdo.journal"); if (!h) return log_oom(); l = curl_slist_append(h, "Transfer-Encoding: chunked"); - if (!l) { - curl_slist_free_all(h); + if (!l) return log_oom(); - } h = l; l = curl_slist_append(h, "Accept: text/plain"); - if (!l) { - curl_slist_free_all(h); + if (!l) return log_oom(); - } h = l; - u->header = h; + u->header = TAKE_PTR(h); } if (!u->easy) { From 8f3e1b9d015addda9a03cb647164318be3a5d9bd Mon Sep 17 00:00:00 2001 From: David Tardon Date: Wed, 17 Mar 2021 14:42:06 +0100 Subject: [PATCH 5/9] systemctl-edit: don't leak the old value of contents --- src/systemctl/systemctl-edit.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c index 4186ec3aea..6a43b12d57 100644 --- a/src/systemctl/systemctl-edit.c +++ b/src/systemctl/systemctl-edit.c @@ -188,10 +188,12 @@ static int create_edit_temp_file(const char *new_path, const char *original_path fprintf(f, "\n\n### %s", *path); if (!isempty(contents)) { - contents = strreplace(strstrip(contents), "\n", "\n# "); - if (!contents) + _cleanup_free_ char *commented_contents = NULL; + + commented_contents = strreplace(strstrip(contents), "\n", "\n# "); + if (!commented_contents) return log_oom(); - fprintf(f, "\n# %s", contents); + fprintf(f, "\n# %s", commented_contents); } } From bc8334017615d8ae5809323c583b5ec4dea6bbd8 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 18 Mar 2021 13:13:04 +0100 Subject: [PATCH 6/9] resolved-dns-rr: don't leak s if base64_append fails --- src/resolve/resolved-dns-rr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 7e76e0c6cc..66ed24c817 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -820,8 +820,8 @@ static char *format_txt(DnsTxtItem *first) { } const char *dns_resource_record_to_string(DnsResourceRecord *rr) { - _cleanup_free_ char *t = NULL; - char *s, k[DNS_RESOURCE_KEY_STRING_MAX]; + _cleanup_free_ char *s = NULL, *t = NULL; + char k[DNS_RESOURCE_KEY_STRING_MAX]; int r; assert(rr); @@ -1171,7 +1171,7 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { } rr->to_string = s; - return s; + return TAKE_PTR(s); } ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out) { From 516a00e9cf491f6da336dd2e1f6fa3c2ed82712a Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 18 Mar 2021 13:14:32 +0100 Subject: [PATCH 7/9] resolved-dns-rr: avoid unnecessary reassignment --- src/resolve/resolved-dns-rr.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 66ed24c817..96024f6ca2 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -965,7 +965,6 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { case DNS_TYPE_DNSKEY: { _cleanup_free_ char *alg = NULL; - char *ss; uint16_t key_tag; key_tag = dnssec_keytag(rr, true); @@ -974,7 +973,7 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { if (r < 0) return NULL; - r = asprintf(&s, "%s %u %u %s", + r = asprintf(&t, "%s %u %u %s", k, rr->dnskey.flags, rr->dnskey.protocol, @@ -982,24 +981,22 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { if (r < 0) return NULL; - r = base64_append(&s, r, + r = base64_append(&t, r, rr->dnskey.key, rr->dnskey.key_size, 8, columns()); if (r < 0) return NULL; - r = asprintf(&ss, "%s\n" + r = asprintf(&s, "%s\n" " -- Flags:%s%s%s\n" " -- Key tag: %u", - s, + t, rr->dnskey.flags & DNSKEY_FLAG_SEP ? " SEP" : "", rr->dnskey.flags & DNSKEY_FLAG_REVOKE ? " REVOKE" : "", rr->dnskey.flags & DNSKEY_FLAG_ZONE_KEY ? " ZONE_KEY" : "", key_tag); if (r < 0) return NULL; - free(s); - s = ss; break; } From 037e5b154738373c88f4712e43697118e095a609 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 18 Mar 2021 12:50:27 +0100 Subject: [PATCH 8/9] resolved-dns-rr: use already existing variable --- src/resolve/resolved-dns-rr.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 96024f6ca2..ffb1605c4c 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -871,18 +871,15 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { return NULL; break; - case DNS_TYPE_A: { - _cleanup_free_ char *x = NULL; - - r = in_addr_to_string(AF_INET, (const union in_addr_union*) &rr->a.in_addr, &x); + case DNS_TYPE_A: + r = in_addr_to_string(AF_INET, (const union in_addr_union*) &rr->a.in_addr, &t); if (r < 0) return NULL; - s = strjoin(k, " ", x); + s = strjoin(k, " ", t); if (!s) return NULL; break; - } case DNS_TYPE_AAAA: r = in_addr_to_string(AF_INET6, (const union in_addr_union*) &rr->aaaa.in6_addr, &t); @@ -1120,18 +1117,16 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { break; } - case DNS_TYPE_CAA: { - _cleanup_free_ char *value; - - value = octescape(rr->caa.value, rr->caa.value_size); - if (!value) + case DNS_TYPE_CAA: + t = octescape(rr->caa.value, rr->caa.value_size); + if (!t) return NULL; r = asprintf(&s, "%s %u %s \"%s\"%s%s%s%.0u", k, rr->caa.flags, rr->caa.tag, - value, + t, rr->caa.flags ? "\n -- Flags:" : "", rr->caa.flags & CAA_FLAG_CRITICAL ? " critical" : "", rr->caa.flags & ~CAA_FLAG_CRITICAL ? " " : "", @@ -1140,7 +1135,6 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { return NULL; break; - } case DNS_TYPE_OPENPGPKEY: { r = asprintf(&s, "%s", k); From eba1eb9066e4f633733b0a0a8f817bad410b7e9d Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 18 Mar 2021 12:54:48 +0100 Subject: [PATCH 9/9] resolved-dns-rr: drop unneeded braces --- src/resolve/resolved-dns-rr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index ffb1605c4c..5b0e601e97 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -1136,7 +1136,7 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { break; - case DNS_TYPE_OPENPGPKEY: { + case DNS_TYPE_OPENPGPKEY: r = asprintf(&s, "%s", k); if (r < 0) return NULL; @@ -1147,7 +1147,6 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { if (r < 0) return NULL; break; - } default: t = hexmem(rr->generic.data, rr->generic.data_size);