From 81630df85439adab1836e83a7e645d67b1c0eb83 Mon Sep 17 00:00:00 2001 From: Kenfe-Mickael Laventure Date: Tue, 21 Feb 2017 11:07:57 -0800 Subject: [PATCH] Prevent freeing a possible invalid pointer from journald Signed-off-by: Kenfe-Mickael Laventure --- daemon/logger/journald/read.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/daemon/logger/journald/read.go b/daemon/logger/journald/read.go index 541fab7055..f73ab91839 100644 --- a/daemon/logger/journald/read.go +++ b/daemon/logger/journald/read.go @@ -237,7 +237,10 @@ drain: // free(NULL) is safe C.free(unsafe.Pointer(oldCursor)) - C.sd_journal_get_cursor(j, &cursor) + if C.sd_journal_get_cursor(j, &cursor) != 0 { + // ensure that we won't be freeing an address that's invalid + cursor = nil + } return cursor } @@ -272,7 +275,6 @@ func (s *journald) followJournal(logWatcher *logger.LogWatcher, config logger.Re s.readers.mu.Lock() delete(s.readers.readers, logWatcher) s.readers.mu.Unlock() - C.sd_journal_close(j) close(logWatcher.Msg) }() @@ -307,9 +309,9 @@ func (s *journald) readLogs(logWatcher *logger.LogWatcher, config logger.ReadCon following := false defer func(pfollowing *bool) { if !*pfollowing { - C.sd_journal_close(j) close(logWatcher.Msg) } + C.sd_journal_close(j) }(&following) // Remove limits on the size of data items that we'll retrieve. rc = C.sd_journal_set_data_threshold(j, C.size_t(0))