diff options
author | Andrei Vagin <avagin@google.com> | 2021-08-09 12:30:01 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-08-09 12:32:31 -0700 |
commit | 14d6cb4436f19d0500e98179c3215517f1a77b08 (patch) | |
tree | dacdececd2bd9aceb154eaa44e684920b7341ada /pkg/sentry/state/state_unsafe.go | |
parent | 34ec00c5e775479b15ae8ad69456cef02f0a545a (diff) |
platform/kvm: fix a race condition in vCPU.unlock()
Right now, it contains the code:
origState := atomic.LoadUint32(&c.state)
atomicbitops.AndUint32(&c.state, ^vCPUUser)
The problem here is that vCPU.bounce that is called from another thread can add
vCPUWaiter when origState has been read but vCPUUser isn't cleared yet. In this
case, vCPU.unlock doesn't notify other threads about changes and c.bounce will
be stuck in the futex_wait call.
PiperOrigin-RevId: 389697411
Diffstat (limited to 'pkg/sentry/state/state_unsafe.go')
0 files changed, 0 insertions, 0 deletions