chiark / gitweb /
Fix for SIGSEGV in systemd-bootchart on short-living processes
authorIgor Zhbanov <i.zhbanov@samsung.com>
Tue, 15 Oct 2013 10:35:13 +0000 (14:35 +0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 15 Oct 2013 13:40:34 +0000 (09:40 -0400)
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.

src/bootchart/store.c

index f8c97c2324020d88e337ea19d0f99d7ffab9f0a3..7f86cfe976c77c7e23621f825582f8960b8aa582 100644 (file)
@@ -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);