From 2dc993722bb23e097c5567ed5a4c88f73d660503 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Apr 2018 17:58:15 +0200 Subject: [PATCH 1/4] uid-range: remove spurious newline --- src/shared/uid-range.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c index 3c46dcfad2..7542bdf15f 100644 --- a/src/shared/uid-range.c +++ b/src/shared/uid-range.c @@ -48,7 +48,6 @@ static void uid_range_coalesce(UidRange **p, unsigned *n) { } } } - } static int uid_range_compare(const void *a, const void *b) { From 43e948eea639c7072bc1aecf8522d9ba9d7c6b91 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Apr 2018 17:58:53 +0200 Subject: [PATCH 2/4] sysusers: fix memory leak when /etc/passwd contains multiple identical lines Fixes: #8718 --- src/sysusers/sysusers.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index b3c0546461..a0d9f454e4 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -97,8 +97,8 @@ static int load_user_database(void) { return r; while ((r = fgetpwent_sane(f, &pw)) > 0) { - char *n; int k, q; + char *n; n = strdup(pw->pw_name); if (!n) @@ -112,12 +112,12 @@ static int load_user_database(void) { q = hashmap_put(database_uid, UID_TO_PTR(pw->pw_uid), n); if (q < 0 && q != -EEXIST) { - if (k < 0) + if (k <= 0) free(n); return q; } - if (q < 0 && k < 0) + if (q <= 0 && k <= 0) free(n); } return r; @@ -159,12 +159,12 @@ static int load_group_database(void) { q = hashmap_put(database_gid, GID_TO_PTR(gr->gr_gid), n); if (q < 0 && q != -EEXIST) { - if (k < 0) + if (k <= 0) free(n); return q; } - if (q < 0 && k < 0) + if (q <= 0 && k <= 0) free(n); errno = 0; From c1a32819c2676a198ea36fb2ce5d9ba2cf2aa667 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Apr 2018 17:59:22 +0200 Subject: [PATCH 3/4] sysusers: clarify that we knowingly ignore process_items() return values --- src/sysusers/sysusers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index a0d9f454e4..35382f41b6 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1961,10 +1961,10 @@ int main(int argc, char *argv[]) { } ORDERED_HASHMAP_FOREACH(i, groups, iterator) - process_item(i); + (void) process_item(i); ORDERED_HASHMAP_FOREACH(i, users, iterator) - process_item(i); + (void) process_item(i); r = write_files(); if (r < 0) From d9bcc5a6a2ec95ea34b2b263e297332b74eea50f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Apr 2018 17:59:35 +0200 Subject: [PATCH 4/4] sysusers: fix minor memory leak --- src/sysusers/sysusers.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 35382f41b6..cf86c4f81d 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1986,6 +1986,8 @@ finish: free_database(database_user, database_uid); free_database(database_group, database_gid); + free(uid_range); + free(arg_root); return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;