From: Igor Zhbanov Date: Tue, 15 Oct 2013 10:35:13 +0000 (+0400) Subject: Fix for SIGSEGV in systemd-bootchart on short-living processes X-Git-Tag: v209~1876 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=306e6650221d88b29831bcdcef94447afb65df5c Fix for SIGSEGV in systemd-bootchart on short-living processes The function svg_ps_bars() dereferencess NULL pointer in the line endtime = ps->last->sampledata->sampletime; because of partially initialized ps_struct (ps->last == NULL). If some process terminates between scaning /proc directory in the log_sample() function and reading additional information from /proc/PID/... files, the files couldn't be read, the loop will be continued and partially initialized structure returned. --- diff --git a/src/bootchart/store.c b/src/bootchart/store.c index f8c97c232..7f86cfe97 100644 --- a/src/bootchart/store.c +++ b/src/bootchart/store.c @@ -275,7 +275,7 @@ schedstat_next: pscount++; /* mark our first sample */ - ps->first = ps->sample; + ps->first = ps->last = ps->sample; ps->sample->runtime = atoll(rt); ps->sample->waittime = atoll(wt);