diff options
author | Nicolas Lacasse <nlacasse@google.com> | 2020-08-21 15:04:24 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-08-21 15:06:09 -0700 |
commit | 5f33fdf37e6386975323ca2bab0dccd51d82df65 (patch) | |
tree | 46a6de1218e453dd4902e143b6cbea4fee5fb937 /pkg/sentry/kernel/auth/context.go | |
parent | 5ec3d4ed3e3cda8944e851ef845f6d275999858a (diff) |
Pass overlay credentials via context in copy up.
Some VFS operations (those which operate on FDs) get their credentials via the
context instead of via an explicit creds param. For these cases, we must pass
the overlay credentials on the context.
PiperOrigin-RevId: 327881259
Diffstat (limited to 'pkg/sentry/kernel/auth/context.go')
-rw-r--r-- | pkg/sentry/kernel/auth/context.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/pkg/sentry/kernel/auth/context.go b/pkg/sentry/kernel/auth/context.go index ef5723127..c08d47787 100644 --- a/pkg/sentry/kernel/auth/context.go +++ b/pkg/sentry/kernel/auth/context.go @@ -34,3 +34,23 @@ func CredentialsFromContext(ctx context.Context) *Credentials { } return NewAnonymousCredentials() } + +// ContextWithCredentials returns a copy of ctx carrying creds. +func ContextWithCredentials(ctx context.Context, creds *Credentials) context.Context { + return &authContext{ctx, creds} +} + +type authContext struct { + context.Context + creds *Credentials +} + +// Value implements context.Context. +func (ac *authContext) Value(key interface{}) interface{} { + switch key { + case CtxCredentials: + return ac.creds + default: + return ac.Context.Value(key) + } +} |