[systemd-devel] [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living processes

Igor Zhbanov i.zhbanov at samsung.com
Tue Oct 15 03:35:13 PDT 2013


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 |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/bootchart/store.c b/src/bootchart/store.c
index f8c97c2..7f86cfe 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);
 
-- 
1.7.5.4



More information about the systemd-devel mailing list