summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go
diff options
context:
space:
mode:
authorBin Lu <bin.lu@arm.com>2020-02-20 01:12:03 -0500
committerBin Lu <bin.lu@arm.com>2020-02-20 06:43:27 +0000
commitde68e1d8c437e6234f5e413d7cad6f892a4452d3 (patch)
tree6405221512939b3868cb2d512365cf3a86306cb6 /pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go
parentec5630527bc4473081048d2d13d1dcfadc6c7cdd (diff)
Code Clean:Move getUserRegisters into dieArchSetup() and other small changes.
Consistent with QEMU, getUserRegisters() should be an arch-specific function. So, it should be called in dieArchSetup(). With this patch and the pagetable/pcid patch, the kvm modules on Arm64 can be built successfully. Signed-off-by: Bin Lu <bin.lu@arm.com>
Diffstat (limited to 'pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go')
-rw-r--r--pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go b/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go
index a63a6a071..99cac665d 100644
--- a/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go
+++ b/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go
@@ -31,6 +31,12 @@ import (
//
//go:nosplit
func dieArchSetup(c *vCPU, context *arch.SignalContext64, guestRegs *userRegs) {
+ // Reload all registers to have an accurate stack trace when we return
+ // to host mode. This means that the stack should be unwound correctly.
+ if errno := c.getUserRegisters(&c.dieState.guestRegs); errno != 0 {
+ throw(c.dieState.message)
+ }
+
// If the vCPU is in user mode, we set the stack to the stored stack
// value in the vCPU itself. We don't want to unwind the user stack.
if guestRegs.RFLAGS&ring0.UserFlagsSet == ring0.UserFlagsSet {