summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/kernel/task_resources.go
diff options
context:
space:
mode:
authorJamie Liu <jamieliu@google.com>2018-08-31 13:57:02 -0700
committerShentubot <shentubot@google.com>2018-08-31 13:58:04 -0700
commit098046ba193b839d69c059f7a0e68c89409b4237 (patch)
tree22a6bfcdbb4d440ef067c8df4643ef26f7255be1 /pkg/sentry/kernel/task_resources.go
parentb1c1afa3ccc499df3fd15814d2b6cf9005bc2ab1 (diff)
Disintegrate kernel.TaskResources.
This allows us to call kernel.FDMap.DecRef without holding mutexes cleanly. PiperOrigin-RevId: 211139657 Change-Id: Ie59d5210fb9282e1950e2e40323df7264a01bcec
Diffstat (limited to 'pkg/sentry/kernel/task_resources.go')
-rw-r--r--pkg/sentry/kernel/task_resources.go132
1 files changed, 0 insertions, 132 deletions
diff --git a/pkg/sentry/kernel/task_resources.go b/pkg/sentry/kernel/task_resources.go
deleted file mode 100644
index 0832bf989..000000000
--- a/pkg/sentry/kernel/task_resources.go
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2018 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package kernel
-
-import (
- "gvisor.googlesource.com/gvisor/pkg/abi/linux"
- "gvisor.googlesource.com/gvisor/pkg/sentry/fs"
-)
-
-// TaskResources is the subset of a task's data provided by its creator that is
-// not provided by the loader.
-//
-// +stateify savable
-type TaskResources struct {
- // SignalMask is the set of signals whose delivery is currently blocked.
- //
- // FIXME: Determine if we also need RealSignalMask
- SignalMask linux.SignalSet
-
- // FSContext is the filesystem context.
- *FSContext
-
- // FDMap provides access to files to the task.
- *FDMap
-
- // Tracks abstract sockets that are in use.
- AbstractSockets *AbstractSocketNamespace
-}
-
-// newTaskResources returns a new TaskResources, taking an additional reference
-// on fdm.
-func newTaskResources(fdm *FDMap, fc *FSContext) *TaskResources {
- fdm.IncRef()
- return &TaskResources{
- FDMap: fdm,
- FSContext: fc,
- AbstractSockets: NewAbstractSocketNamespace(),
- }
-}
-
-// release releases all resources held by the TaskResources. release is called
-// by the task when it exits.
-func (tr *TaskResources) release() {
- tr.FDMap.DecRef()
- tr.FDMap = nil
- tr.FSContext.DecRef()
- tr.FSContext = nil
- tr.AbstractSockets = nil
-}
-
-// Fork returns a duplicate of tr.
-//
-// FIXME: Preconditions: When tr is owned by a Task, that task's
-// signal mutex must be locked, or Fork must be called by the task's goroutine.
-func (tr *TaskResources) Fork(shareFiles bool, shareFSContext bool) *TaskResources {
- var fdmap *FDMap
- if shareFiles {
- fdmap = tr.FDMap
- fdmap.IncRef()
- } else {
- fdmap = tr.FDMap.Fork()
- }
-
- var fsc *FSContext
- if shareFSContext {
- fsc = tr.FSContext
- fsc.IncRef()
- } else {
- fsc = tr.FSContext.Fork()
- }
-
- return &TaskResources{
- SignalMask: tr.SignalMask,
- FDMap: fdmap,
- FSContext: fsc,
- AbstractSockets: tr.AbstractSockets,
- }
-}
-
-// FDMap returns t's FDMap.
-//
-// Preconditions: The caller must be running on the task goroutine, or t.mu
-// must be locked.
-func (t *Task) FDMap() *FDMap {
- return t.tr.FDMap
-}
-
-// FSContext returns t's FSContext.
-//
-// Preconditions: The caller must be running on the task goroutine, or t.mu
-// must be locked.
-func (t *Task) FSContext() *FSContext {
- return t.tr.FSContext
-}
-
-// MountNamespace returns t's MountNamespace. MountNamespace does not take an additional
-// reference on the returned MountNamespace.
-func (t *Task) MountNamespace() *fs.MountNamespace {
- return t.k.mounts
-}
-
-// AbstractSockets returns t's AbstractSocketNamespace.
-func (t *Task) AbstractSockets() *AbstractSocketNamespace {
- return t.tr.AbstractSockets
-}
-
-// IsChrooted returns true if the root directory of t's FSContext is not the
-// root directory of t's MountNamespace.
-//
-// Preconditions: The caller must be running on the task goroutine, or t.mu
-// must be locked.
-func (t *Task) IsChrooted() bool {
- realRoot := t.k.mounts.Root()
- defer realRoot.DecRef()
- root := t.tr.FSContext.RootDirectory()
- if root != nil {
- defer root.DecRef()
- }
- return root != realRoot
-}