On Tue, 2012-05-22 at 08:40 +0200, Sjoerd Simons wrote: 
> On Mon, 2012-05-21 at 21:35 -0700, shawn wrote:
> > > If journal_file_open() failed, due to (e.g.) -ENOSPC on open()
> > > new_file might still be NULL.
> > > 
> > > On error, leave pointer to the old JournalFile (now closed),
> > > and require caller to check for error approiately.
> > > 
> > >   Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43020
> > >   Reported-by: Sjoerd Simons <sjo...@luon.net>
> 
> The bugzilla link seems wrong ? 
yes, I was looking at your patch, (via debian BTS) but I copied the url
wrong. (corrected patch attached) That is how I knew to forward it to
you. I read your patch, however there are many reasons other than ENOSPC
why open() could fail leaving a null pointer, and my patch takes care of
that. 
> 
> This actually remind me though, i did submit a patch for this issue to
> bugzilla (slightly different then your solution) more then a month ago.
> And a companion patch to not make the issue occur so easily, bugs filed
> here:
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=48688
> https://bugs.freedesktop.org/show_bug.cgi?id=48685
> 
> If the systemd bugzilla is just somewhat of a decoy i'm happy to repost
> the patches to the list ofcourse :)
Well the first patch I submitted to systemd bugzilla sure didn't get any
traction....


-- 
-Shawn Landden
>From 54a970dcf59b59ade587002925be027b71d81545 Mon Sep 17 00:00:00 2001
From: Shawn Landden <shawnland...@gmail.com>
Date: Mon, 21 May 2012 19:46:54 -0700
Subject: [PATCH] journal: fix dereferenced pointer in journal_file_rotate()

If journal_file_open() failed, due to (e.g.) -ENOSPC on open()
new_file might still be NULL.

On error, leave pointer to the old JournalFile (now closed),
and require caller to check for error approiately.

	Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48685
	Reported-by: Sjoerd Simons <sjo...@luon.net>
---
 src/journal/journal-file.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 5dd6e57..9f5f26e 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -1871,9 +1871,16 @@ int journal_file_rotate(JournalFile **f) {
         old_file->header->state = STATE_ARCHIVED;
 
         r = journal_file_open(old_file->path, old_file->flags, old_file->mode, old_file, &new_file);
-        journal_file_close(old_file);
+
+        if (r < 0) {
+                r = -errno;
+                goto finish;
+        }
 
         *f = new_file;
+
+finish:
+        journal_file_close(old_file);
         return r;
 }
 
-- 
1.7.9.5

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to