dryang / rpms / systemd

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