diff --git a/pkg/sentry/platform/kvm/bluepill_amd64.go b/pkg/sentry/platform/kvm/bluepill_amd64.go index 0ba7a0d0f..c1be709a8 100644 --- a/pkg/sentry/platform/kvm/bluepill_amd64.go +++ b/pkg/sentry/platform/kvm/bluepill_amd64.go @@ -128,10 +128,11 @@ func (c *vCPU) KernelSyscall() { func (c *vCPU) KernelException(vector ring0.Vector) { regs := c.Registers() if vector == ring0.Vector(bounce) { - // These should not interrupt kernel execution; point the Rip - // to zero to ensure that we get a reasonable panic when we - // attempt to return and a full stack trace. - regs.Rip = 0 + // This go-routine was saved in hr3 and resumed in gr0 with the + // userspace flags. Let's adjust flags and skip the interrupt. + regs.Eflags &^= uint64(ring0.KernelFlagsClear) + regs.Eflags |= ring0.KernelFlagsSet + return } // See above. ring0.HaltAndWriteFSBase(regs) // escapes: no, reload host segment. diff --git a/pkg/sentry/platform/kvm/bluepill_unsafe.go b/pkg/sentry/platform/kvm/bluepill_unsafe.go index cc6949d6c..853b5789d 100644 --- a/pkg/sentry/platform/kvm/bluepill_unsafe.go +++ b/pkg/sentry/platform/kvm/bluepill_unsafe.go @@ -221,7 +221,6 @@ func bluepillHandler(context unsafe.Pointer) { c.die(bluepillArchContext(context), "entry failed") return default: - printHex([]byte("exitReason="), uint64(c.runData.exitReason)) bluepillArchHandleExit(c, context) return }