[systemd-devel] journalctl segfault in gcrypt code

Lennart Poettering lennart at poettering.net
Mon Oct 15 16:01:04 PDT 2012


On Mon, 15.10.12 23:02, Zbigniew Jędrzejewski-Szmek (zbyszek at in.waw.pl) wrote:

> 
> On Mon, Oct 15, 2012 at 10:01:31PM +0200, Lennart Poettering wrote:
> > On Sat, 13.10.12 17:59, Zbigniew Jędrzejewski-Szmek (zbyszek at in.waw.pl) wrote:
> > 
> > > Hi,
> > > 
> > > I'm having trouble debugging the problem below. Maybe somebody has an
> > > idea...  When I run journalctl, on a specific (large) set of journal
> > > logs, it segfaults. Always in the same place.
> > 
> > Hmm, I have not see this so far. Have you tried valgrind on this?
> Yeah, but it didn't say anything useful.
> 
> ==32666== Invalid write of size 1
> ==32666==    at 0x5076B12: md_close (md.c:771)
> ==32666==    by 0x41282D: journal_file_close (journal-file.c:109)
> ==32666==    by 0x4110FE: sd_journal_close (sd-journal.c:1620)
> ==32666==    by 0x406DEA: main (journalctl.c:990)
> ==32666==  Address 0x402d000 is not stack'd, malloc'd or (recently) free'd
> ==32666== 
> ==32666== 
> ==32666== Process terminating with default action of signal 11 (SIGSEGV)
> ==32666==  Access not within mapped region at address 0x402D000
> ==32666==    at 0x5076B12: md_close (md.c:771)
> ==32666==    by 0x41282D: journal_file_close (journal-file.c:109)
> ==32666==    by 0x4110FE: sd_journal_close (sd-journal.c:1620)
> ==32666==    by 0x406DEA: main (journalctl.c:990)
> ==32666==  If you believe this happened as a result of a stack
> ==32666==  overflow in your program's main thread (unlikely but
> ==32666==  possible), you can try to increase the size of the
> ==32666==  main thread stack using the --main-stacksize= flag.
> ==32666==  The main thread stack size used in this run was 8388608.
> --32666-- Caught __NR_exit; running __libc_freeres()
> --32666-- Discarding syms at 0x33981230-0x3398887c in /usr/lib64/libnss_files-2.16.90.so due to munmap()
> ==32666== 
> ==32666== HEAP SUMMARY:
> ==32666==     in use at exit: 17,860,820 bytes in 57 blocks
> ==32666==   total heap usage: 73,740 allocs, 73,683 frees, 33,511,230,790 bytes allocated
> 
> When I compile with --disable-gcrypt, everything seems to work fine
> (no valgrind warnings). So the problem seems related to gcrypt,
> but I can't see anything wrong by looking at the code.

I wonder if valgrind actually tracks mmap()s properly. I wonder if the
mmap_cache is mistakingly unmapping a map it shoudln't. It might be
worth loking for munmap() invocations in mmap-cache.c and printing the
range unmapped and comparing that with the address valgrind mentions as
freed.

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list