summaryrefslogtreecommitdiffhomepage
path: root/pkg
diff options
context:
space:
mode:
authorAndrei Vagin <avagin@google.com>2019-10-31 12:27:46 -0700
committergVisor bot <gvisor-bot@google.com>2019-10-31 12:29:04 -0700
commitf7dbddaf77a6059c2f5a441d068a39219fe593bd (patch)
treea439fffea3b0963e2e7ab860ee661e29a4d1b30b /pkg
parent7dcfcd53e4f3f0e1384ac42eacf2622a57d1b37c (diff)
platform/kvm: calll sigtimedwait with zero timeout
sigtimedwait is used to check pending signals and it should not block. PiperOrigin-RevId: 277777269
Diffstat (limited to 'pkg')
-rw-r--r--pkg/sentry/platform/kvm/bluepill_unsafe.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/pkg/sentry/platform/kvm/bluepill_unsafe.go b/pkg/sentry/platform/kvm/bluepill_unsafe.go
index 3734bfb7a..ca011ef78 100644
--- a/pkg/sentry/platform/kvm/bluepill_unsafe.go
+++ b/pkg/sentry/platform/kvm/bluepill_unsafe.go
@@ -80,13 +80,17 @@ func bluepillHandler(context unsafe.Pointer) {
// interrupted KVM. Since we're in a signal handler
// currently, all signals are masked and the signal
// must have been delivered directly to this thread.
+ timeout := syscall.Timespec{}
sig, _, errno := syscall.RawSyscall6(
syscall.SYS_RT_SIGTIMEDWAIT,
uintptr(unsafe.Pointer(&bounceSignalMask)),
- 0, // siginfo.
- 0, // timeout.
- 8, // sigset size.
+ 0, // siginfo.
+ uintptr(unsafe.Pointer(&timeout)), // timeout.
+ 8, // sigset size.
0, 0)
+ if errno == syscall.EAGAIN {
+ continue
+ }
if errno != 0 {
throw("error waiting for pending signal")
}