diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-06-07 19:22:09 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-06-07 19:22:09 +0000 |
commit | b8aad3e30d056cf5a38482dbfae011ab9094e406 (patch) | |
tree | 3f93d2e7a751dbc631856ba23c733cf52cdb5e7a /pkg/sentry/kernel | |
parent | d9814449f2219ba14cb72051f2d9ffe288507f2f (diff) | |
parent | 7e4e71253ec7c06f2f4eaf387826f08a8b3373cb (diff) |
Merge release-20210601.0-17-g7e4e71253 (automated)
Diffstat (limited to 'pkg/sentry/kernel')
-rw-r--r-- | pkg/sentry/kernel/kernel.go | 4 | ||||
-rw-r--r-- | pkg/sentry/kernel/task_cgroup.go | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/pkg/sentry/kernel/kernel.go b/pkg/sentry/kernel/kernel.go index febe7fe50..c666be2cb 100644 --- a/pkg/sentry/kernel/kernel.go +++ b/pkg/sentry/kernel/kernel.go @@ -1861,7 +1861,9 @@ func (k *Kernel) PopulateNewCgroupHierarchy(root Cgroup) { return } t.mu.Lock() - t.enterCgroupLocked(root) + // A task can be in the cgroup if it has been created after the + // cgroup hierarchy was registered. + t.enterCgroupIfNotYetLocked(root) t.mu.Unlock() }) k.tasks.mu.RUnlock() diff --git a/pkg/sentry/kernel/task_cgroup.go b/pkg/sentry/kernel/task_cgroup.go index 25d2504fa..7c138e80f 100644 --- a/pkg/sentry/kernel/task_cgroup.go +++ b/pkg/sentry/kernel/task_cgroup.go @@ -85,6 +85,14 @@ func (t *Task) enterCgroupLocked(c Cgroup) { c.Enter(t) } +// +checklocks:t.mu +func (t *Task) enterCgroupIfNotYetLocked(c Cgroup) { + if _, ok := t.cgroups[c]; ok { + return + } + t.enterCgroupLocked(c) +} + // LeaveCgroups removes t out from all its cgroups. func (t *Task) LeaveCgroups() { t.mu.Lock() |