diff options
author | Nicolas Lacasse <nlacasse@google.com> | 2018-10-01 13:54:57 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-10-01 13:56:07 -0700 |
commit | 07aa040842cfd31a0c6e851900173d02dd01c7fe (patch) | |
tree | 142b8d794bcbc17ba418ab3275d590e00059a98b | |
parent | a2ad8fef136b31989bfcd2f40003f6113aebaf1d (diff) |
Fix possible panic in control.Processes.
There was a race where we checked task.Parent() != nil, and then later called
task.Parent() again, assuming that it is not nil. If the task is exiting, the
parent may have been set to nil in between the two calls, causing a panic.
This CL changes the code to only call task.Parent() once.
PiperOrigin-RevId: 215274456
Change-Id: Ib5a537312c917773265ec72016014f7bc59a5f59
-rw-r--r-- | pkg/sentry/control/proc.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/pkg/sentry/control/proc.go b/pkg/sentry/control/proc.go index 106055e86..faf1168bb 100644 --- a/pkg/sentry/control/proc.go +++ b/pkg/sentry/control/proc.go @@ -278,8 +278,8 @@ func Processes(k *kernel.Kernel, containerID string, out *[]*Process) error { } ppid := kernel.ThreadID(0) - if tg.Leader().Parent() != nil { - ppid = ts.Root.IDOfThreadGroup(tg.Leader().Parent().ThreadGroup()) + if p := tg.Leader().Parent(); p != nil { + ppid = ts.Root.IDOfThreadGroup(p.ThreadGroup()) } *out = append(*out, &Process{ UID: tg.Leader().Credentials().EffectiveKUID, |