[systemd] systemd-204-7

Harald Hoyer harald at fedoraproject.org
Fri Jun 14 13:10:34 UTC 2013


commit f9af8840e99c7a673bdf89f8bc34be02bd27dffa
Author: Harald Hoyer <harald at redhat.com>
Date:   Fri Jun 14 15:09:57 2013 +0200

    systemd-204-7
    
    - fix duplicate message ID bug
    Resolves: rhbz#974132

 0001-journal-letting-interleaved-seqnums-go.patch |   74 +++++++++++++++++++++
 systemd.spec                                      |    7 ++-
 2 files changed, 80 insertions(+), 1 deletions(-)
---
diff --git a/0001-journal-letting-interleaved-seqnums-go.patch b/0001-journal-letting-interleaved-seqnums-go.patch
new file mode 100644
index 0000000..cfed248
--- /dev/null
+++ b/0001-journal-letting-interleaved-seqnums-go.patch
@@ -0,0 +1,74 @@
+From 53113dc8254cae9a27e321e539d2d876677e61b9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 7 Jun 2013 22:01:03 -0400
+Subject: [PATCH] journal: letting (interleaved) seqnums go
+
+In the following scenario:
+  server creates system.journal
+  server creates user-1000.journal
+both journals share the same seqnum_id.
+Then
+  server writes to user-1000.journal first,
+  and server writes to system.journal a bit later,
+and everything is fine.
+The server then terminates (crash, reboot, rsyslog testing,
+whatever), and user-1000.journal has entries which end with
+a lower seqnum than system.journal. Now
+  server is restarted
+  server opens user-1000.journal and writes entries to it...
+BAM! duplicate seqnums for the same seqnum_id.
+
+Now, we usually don't see that happen, because system.journal
+is closed last, and opened first. Since usually at least one
+message is written during boot and lands in the system.journal,
+the seqnum is initialized from it, and is set to a number higher
+than than anything found in user journals. Nevertheless, if
+system.journal is corrupted and is rotated, it can happen that
+an entry is written to the user journal with a seqnum that is
+a duplicate with an entry found in the corrupted system.journal~.
+When browsing the journal, journalctl can fall into a loop
+where it tries to follow the seqnums, and tries to go the
+next location by seqnum, and is transported back in time to
+to the older duplicate seqnum. There is not way to find
+out the maximum seqnum used in a multiple files, without
+actually looking at all of them. But we don't want to do
+that because it would be slow, and actually it isn't really
+possible, because a file might e.g. be temporarily unaccessible.
+
+Fix the problem by using different seqnum series for user
+journals. Using the same seqnum series for rotated journals
+is still fine, because we know that nothing will write
+to the rotated journal anymore.
+
+Likely related:
+https://bugs.freedesktop.org/show_bug.cgi?id=64566
+https://bugs.freedesktop.org/show_bug.cgi?id=59856
+https://bugs.freedesktop.org/show_bug.cgi?id=64296
+https://bugs.archlinux.org/task/35581
+https://bugzilla.novell.com/show_bug.cgi?id=817778
+
+Possibly related:
+https://bugs.freedesktop.org/show_bug.cgi?id=64293
+
+Conflicts:
+	src/journal/journald-server.c
+---
+ src/journal/journald-server.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index cc52b8a..cde63c8 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -280,7 +280,7 @@ static JournalFile* find_journal(Server *s, uid_t uid) {
+                 journal_file_close(f);
+         }
+ 
+-        r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, s->system_journal, &f);
++        r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &f);
+         free(p);
+ 
+         if (r < 0)
+-- 
+1.8.2.1
+
diff --git a/systemd.spec b/systemd.spec
index 68e9f9a..678dfb4 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -13,7 +13,7 @@
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
 Version:        204
-Release:        6%{?gitcommit:.git%{gitcommit}}%{?dist}
+Release:        7%{?gitcommit:.git%{gitcommit}}%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
@@ -35,6 +35,7 @@ Source4:        listen.conf
 # Prevent accidental removal of the systemd package
 Source6:        yum-protect-systemd.conf
 
+Patch1:         0001-journal-letting-interleaved-seqnums-go.patch
 # kernel-install patch for grubby, drop if grubby is obsolete
 Patch1000:      kernel-install-grubby.patch
 
@@ -756,6 +757,10 @@ fi
 %{_libdir}/pkgconfig/gudev-1.0*
 
 %changelog
+* Fri Jun 14 2013 Harald Hoyer <harald at redhat.com> 204-7
+- fix duplicate message ID bug
+Resolves: rhbz#974132
+
 * Thu Jun 06 2013 Harald Hoyer <harald at redhat.com> 204-6
 - introduce 99-default-disable.preset
 


More information about the scm-commits mailing list