summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/control/proc.go
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 /pkg/sentry/control/proc.go
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
Diffstat (limited to 'pkg/sentry/control/proc.go')
-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,