diff options
-rw-r--r-- | pkg/sentry/platform/kvm/bluepill_amd64.s | 20 | ||||
-rw-r--r-- | pkg/sentry/platform/kvm/machine.go | 5 |
2 files changed, 5 insertions, 20 deletions
diff --git a/pkg/sentry/platform/kvm/bluepill_amd64.s b/pkg/sentry/platform/kvm/bluepill_amd64.s index 2bc34a435..13b58d2c4 100644 --- a/pkg/sentry/platform/kvm/bluepill_amd64.s +++ b/pkg/sentry/platform/kvm/bluepill_amd64.s @@ -14,16 +14,6 @@ #include "textflag.h" -// VCPU_CPU is the location of the CPU in the vCPU struct. -// -// This is guaranteed to be zero. -#define VCPU_CPU 0x0 - -// CPU_SELF is the self reference in ring0's percpu. -// -// This is guaranteed to be zero. -#define CPU_SELF 0x0 - // Context offsets. // // Only limited use of the context is done in the assembly stub below, most is @@ -39,18 +29,8 @@ // See bluepill.go. TEXT ·bluepill(SB),NOSPLIT,$0 -begin: MOVQ vcpu+0(FP), AX - LEAQ VCPU_CPU(AX), BX BYTE CLI; -check_vcpu: - MOVQ CPU_SELF(GS), CX - CMPQ BX, CX - JE right_vCPU -wrong_vcpu: - CALL ·redpill(SB) - JMP begin -right_vCPU: RET // sighandler: see bluepill.go for documentation. diff --git a/pkg/sentry/platform/kvm/machine.go b/pkg/sentry/platform/kvm/machine.go index 6c54712d1..1c8a1dd6f 100644 --- a/pkg/sentry/platform/kvm/machine.go +++ b/pkg/sentry/platform/kvm/machine.go @@ -339,6 +339,11 @@ func (m *machine) Destroy() { // Get gets an available vCPU. // // This will return with the OS thread locked. +// +// It is guaranteed that if any OS thread TID is in guest, m.vCPUs[TID] points +// to the vCPU in which the OS thread TID is running. So if Get() returns with +// the corrent context in guest, the vCPU of it must be the same as what +// Get() returns. func (m *machine) Get() *vCPU { m.mu.RLock() runtime.LockOSThread() |