diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-07-30 18:29:08 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-07-30 18:29:08 +0000 |
commit | 24c382940aa216e50c3c9ebeb97235fc114cdb94 (patch) | |
tree | 4f4f33d5d2ff6f7c20892b919921accc3a933f6d /pkg/sentry/kernel/task_context.go | |
parent | 3d4eebfac23658dcb2ae23de9f7ba2426383a111 (diff) | |
parent | e511c0e05f82c2918501ce1487bf39f8c994dec5 (diff) |
Merge e511c0e0 (automated)
Diffstat (limited to 'pkg/sentry/kernel/task_context.go')
-rw-r--r-- | pkg/sentry/kernel/task_context.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/pkg/sentry/kernel/task_context.go b/pkg/sentry/kernel/task_context.go index 54b1676b0..8639d379f 100644 --- a/pkg/sentry/kernel/task_context.go +++ b/pkg/sentry/kernel/task_context.go @@ -140,15 +140,22 @@ func (t *Task) Stack() *arch.Stack { // * wd: Working directory to lookup filename under // * maxTraversals: maximum number of symlinks to follow // * filename: path to binary to load +// * file: an open fs.File object of the binary to load. If set, +// file will be loaded and not filename. // * argv: Binary argv // * envv: Binary envv // * fs: Binary FeatureSet -func (k *Kernel) LoadTaskImage(ctx context.Context, mounts *fs.MountNamespace, root, wd *fs.Dirent, maxTraversals *uint, filename string, argv, envv []string, fs *cpuid.FeatureSet) (*TaskContext, *syserr.Error) { +func (k *Kernel) LoadTaskImage(ctx context.Context, mounts *fs.MountNamespace, root, wd *fs.Dirent, maxTraversals *uint, filename string, file *fs.File, argv, envv []string, fs *cpuid.FeatureSet) (*TaskContext, *syserr.Error) { + // If File is not nil, we should load that instead of resolving filename. + if file != nil { + filename = file.MappedName(ctx) + } + // Prepare a new user address space to load into. m := mm.NewMemoryManager(k, k) defer m.DecUsers(ctx) - os, ac, name, err := loader.Load(ctx, m, mounts, root, wd, maxTraversals, fs, filename, argv, envv, k.extraAuxv, k.vdso) + os, ac, name, err := loader.Load(ctx, m, mounts, root, wd, maxTraversals, fs, filename, file, argv, envv, k.extraAuxv, k.vdso) if err != nil { return nil, err } |