summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fs/context.go
diff options
context:
space:
mode:
authorNicolas Lacasse <nlacasse@google.com>2019-08-02 11:21:50 -0700
committergVisor bot <gvisor-bot@google.com>2019-08-02 11:23:11 -0700
commitaaaefdf9cadf033fa281b612315c3227f5ab1c7a (patch)
treec595502de931176a803ae917095fc552f133ed3a /pkg/sentry/fs/context.go
parent6a1ac3407743adf7c0493ab9da97a1dff4e4b2ac (diff)
Remove kernel.mounts.
We can get the mount namespace from the CreateProcessArgs in all cases where we need it. This also gets rid of kernel.Destroy method, since the only thing it was doing was DecRefing the mounts. Removing the need to call kernel.SetRootMountNamespace also allowed for some more simplifications in the container fs setup code. PiperOrigin-RevId: 261357060
Diffstat (limited to 'pkg/sentry/fs/context.go')
-rw-r--r--pkg/sentry/fs/context.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/pkg/sentry/fs/context.go b/pkg/sentry/fs/context.go
index 51b4c7ee1..dd427de5d 100644
--- a/pkg/sentry/fs/context.go
+++ b/pkg/sentry/fs/context.go
@@ -112,3 +112,27 @@ func DirentCacheLimiterFromContext(ctx context.Context) *DirentCacheLimiter {
}
return nil
}
+
+type rootContext struct {
+ context.Context
+ root *Dirent
+}
+
+// WithRoot returns a copy of ctx with the given root.
+func WithRoot(ctx context.Context, root *Dirent) context.Context {
+ return &rootContext{
+ Context: ctx,
+ root: root,
+ }
+}
+
+// Value implements Context.Value.
+func (rc rootContext) Value(key interface{}) interface{} {
+ switch key {
+ case CtxRoot:
+ rc.root.IncRef()
+ return rc.root
+ default:
+ return rc.Context.Value(key)
+ }
+}