From 42ca19f57176c4b89fc318b5612e644f66ff8d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 9 Oct 2013 22:13:13 -0400 Subject: [PATCH] journald: remove rotated file from hashmap when rotation fails Before, when the user journal file was rotated, journal_file_rotate could close the old file and fail to open the new file. In that case, we would leave the old (deallocated) file in the hashmap. On subsequent accesses, we could retrieve this stale entry, leading to a segfault. When journal_file_rotate fails with the file pointer set to 0, old file is certainly gone, and cannot be used anymore. https://bugzilla.redhat.com/show_bug.cgi?id=890463 --- src/journal/journald-server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 8007b05..2ae0591 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -321,8 +321,10 @@ void server_rotate(Server *s) { if (r < 0) if (f) log_error("Failed to rotate %s: %s", f->path, strerror(-r)); - else + else { log_error("Failed to create user journal: %s", strerror(-r)); + hashmap_remove(s->user_journals, k); + } else { hashmap_replace(s->user_journals, k, f); server_fix_perms(s, f, PTR_TO_UINT32(k));