Prevent freeing a possible invalid pointer from journald
@@ -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))
