Hi Steven, On 7.05.21 г. 16:38, Steven Rostedt wrote:
From: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> When I loaded two trace.dat files (host and guest), but the mapping of which host thread is associated to which guest vCPU was missing from the file, it caused a SEGFAULT. That's because in fillTaskGraph(), the lamGetPidCPU() calls ksmodule_get_cpu_front() which returns a negative number and does not set index. But the next line checks data[index] where index is some random number, and the application crashes. By checking the return of ksmodule_get_cpu_front(), and if it is negative do not reference data[index] and just let eFront be nullptr, the application shows no mapping, but at least it does not crash. Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> --- You can reproduce this with: http://rostedt.org/private/trace-no-map.tar.bz2 diff --git a/src/KsPlotTools.cpp b/src/KsPlotTools.cpp index 225dc34..abef5f8 100644 --- a/src/KsPlotTools.cpp +++ b/src/KsPlotTools.cpp @@ -1280,7 +1280,7 @@ void Graph::fillTaskGraph(int sd, int pid) false, _collectionPtr, &index);
I wonder why this fails? Is it because "pid" is negative? The fix below is appropriate, however we should detect negative PIDs and abort plotting much earlier.
Thanks! Yordan
- if (index >= 0) + if (cpuFront >= 0 && index >= 0) eFront = _histoPtr->data[index];cpuBack = ksmodel_get_cpu_back(_histoPtr, bin,