summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/kernel/task_start.go
diff options
context:
space:
mode:
authorLai Jiangshan <jiangshan.ljs@antfin.com>2021-06-22 09:45:32 +0800
committerLai Jiangshan <jiangshan.ljs@antfin.com>2021-06-22 12:50:52 +0800
commit49ada65f4c37a4384ce4f9dc0cf98317207d4472 (patch)
treead2ae9e8529d0e3147339e374c796201c1810105 /pkg/sentry/kernel/task_start.go
parent04a81bc33664b7f7b3da0666b9296e5aaf0f63e7 (diff)
Disconnect call-chain between sighandler() and bluepill().
When sentry is running in guest ring0, the goroutine stack is changing and it will not be the stack when bluepill() is called. If PMU interrupt hits when the CPU is in host ring 0, the perf handler will try to get the stack of the kernel and the userspace(sentry). It can travel back to sighandler() and try to continue to the stack of the goroutine with the outdated frame pointer if sentry has been running in the guest. The perf handler can't record correct addresses from the outdated and wrong frames. Those addresses are often irresolvable, and even if it is resolvable accidentally, it would be misleading names. To fix the problem, we just set the frame pointer(%RBP) to zero and disconnect the link when the zeroed frame pointer is saved in the frame in bluepillHandler(). Signed-off-by: Lai Jiangshan <jiangshan.ljs@antfin.com>
Diffstat (limited to 'pkg/sentry/kernel/task_start.go')
0 files changed, 0 insertions, 0 deletions