chiark / gitweb /
journal: fix access to munmapped memory in sd_journal_enumerate_unique
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 29 Dec 2013 00:33:23 +0000 (19:33 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 11 Jan 2014 15:07:22 +0000 (10:07 -0500)
commitae97089d49d1795a35a443b7b830ee666028e733
tree528eab7122f5a7b4bb0cf1ad220164b3c0438323
parent47917e4a4a8f1ee00bb7de3e83f7bfd849abf337
journal: fix access to munmapped memory in sd_journal_enumerate_unique

sd_j_e_u needs to keep a reference to an object while comparing it
with possibly duplicate objects in other files. Because the size of
mmap cache is limited, with enough files and object to compare to,
at some point the object being compared would be munmapped, resulting
in a segmentation fault.

Fix this issue by turning keep_always into a reference count that can
be increased and decreased. Other callers which set keep_always=true
are unmodified: their references are never released but are ignored
when the whole file is closed, which happens at some point. keep_always
is increased in sd_j_e_u and later on released.
src/journal/journal-file.c
src/journal/journal-file.h
src/journal/journal-verify.c
src/journal/mmap-cache.c
src/journal/mmap-cache.h
src/journal/sd-journal.c