diff options
author | Andrei Vagin <avagin@google.com> | 2019-10-31 12:27:46 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-10-31 12:29:04 -0700 |
commit | f7dbddaf77a6059c2f5a441d068a39219fe593bd (patch) | |
tree | a439fffea3b0963e2e7ab860ee661e29a4d1b30b /pkg | |
parent | 7dcfcd53e4f3f0e1384ac42eacf2622a57d1b37c (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.go | 10 |
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") } |