summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lacasse <nlacasse@google.com>2018-10-01 13:54:57 -0700
committerShentubot <shentubot@google.com>2018-10-01 13:56:07 -0700
commit07aa040842cfd31a0c6e851900173d02dd01c7fe (patch)
tree142b8d794bcbc17ba418ab3275d590e00059a98b
parenta2ad8fef136b31989bfcd2f40003f6113aebaf1d (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.go4
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,