Skip to content

Commit 3ba2df9

Browse files
djdongjink8s-infra-cherrypick-robot
authored andcommitted
fix panic due to nil dereference cgroups v2
Signed-off-by: Jin Dong <[email protected]>
1 parent 961cac9 commit 3ba2df9

1 file changed

Lines changed: 26 additions & 33 deletions

File tree

cmd/containerd-shim-runc-v2/runc/container.go

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,9 @@ func NewContainer(ctx context.Context, platform stdio.Platform, r *task.CreateTa
146146
}
147147
pid := p.Pid()
148148
if pid > 0 {
149-
var cg interface{}
150-
if cgroups.Mode() == cgroups.Unified {
151-
g, err := cgroupsv2.PidGroupPath(pid)
152-
if err != nil {
153-
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
154-
return container, nil
155-
}
156-
cg, err = cgroupsv2.Load(g)
157-
if err != nil {
158-
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
159-
}
160-
} else {
161-
cg, err = cgroup1.Load(cgroup1.PidPath(pid))
162-
if err != nil {
163-
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", pid)
164-
}
149+
if cg, err := loadProcessCgroup(ctx, pid); err == nil {
150+
container.cgroup = cg
165151
}
166-
container.cgroup = cg
167152
}
168153
return container, nil
169154
}
@@ -367,23 +352,9 @@ func (c *Container) Start(ctx context.Context, r *task.StartRequest) (process.Pr
367352
return p, err
368353
}
369354
if c.Cgroup() == nil && p.Pid() > 0 {
370-
var cg interface{}
371-
if cgroups.Mode() == cgroups.Unified {
372-
g, err := cgroupsv2.PidGroupPath(p.Pid())
373-
if err != nil {
374-
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", p.Pid())
375-
}
376-
cg, err = cgroupsv2.Load(g)
377-
if err != nil {
378-
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", p.Pid())
379-
}
380-
} else {
381-
cg, err = cgroup1.Load(cgroup1.PidPath(p.Pid()))
382-
if err != nil {
383-
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", p.Pid())
384-
}
355+
if cg, err := loadProcessCgroup(ctx, p.Pid()); err == nil {
356+
c.cgroup = cg
385357
}
386-
c.cgroup = cg
387358
}
388359
return p, nil
389360
}
@@ -512,3 +483,25 @@ func (c *Container) HasPid(pid int) bool {
512483
}
513484
return false
514485
}
486+
487+
func loadProcessCgroup(ctx context.Context, pid int) (cg interface{}, err error) {
488+
if cgroups.Mode() == cgroups.Unified {
489+
g, err := cgroupsv2.PidGroupPath(pid)
490+
if err != nil {
491+
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
492+
return nil, err
493+
}
494+
cg, err = cgroupsv2.Load(g)
495+
if err != nil {
496+
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
497+
return nil, err
498+
}
499+
} else {
500+
cg, err = cgroup1.Load(cgroup1.PidPath(pid))
501+
if err != nil {
502+
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", pid)
503+
return nil, err
504+
}
505+
}
506+
return cg, nil
507+
}

0 commit comments

Comments
 (0)