fix panic due to nil dereference cgroups v2
Signed-off-by: Jin Dong <djdongjin95@gmail.com>
This commit is contained in:
parent
961cac9aa0
commit
3ba2df924a
@ -146,24 +146,9 @@ func NewContainer(ctx context.Context, platform stdio.Platform, r *task.CreateTa
|
|||||||
}
|
}
|
||||||
pid := p.Pid()
|
pid := p.Pid()
|
||||||
if pid > 0 {
|
if pid > 0 {
|
||||||
var cg interface{}
|
if cg, err := loadProcessCgroup(ctx, pid); err == nil {
|
||||||
if cgroups.Mode() == cgroups.Unified {
|
container.cgroup = cg
|
||||||
g, err := cgroupsv2.PidGroupPath(pid)
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
|
|
||||||
return container, nil
|
|
||||||
}
|
|
||||||
cg, err = cgroupsv2.Load(g)
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cg, err = cgroup1.Load(cgroup1.PidPath(pid))
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", pid)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
container.cgroup = cg
|
|
||||||
}
|
}
|
||||||
return container, nil
|
return container, nil
|
||||||
}
|
}
|
||||||
@ -367,23 +352,9 @@ func (c *Container) Start(ctx context.Context, r *task.StartRequest) (process.Pr
|
|||||||
return p, err
|
return p, err
|
||||||
}
|
}
|
||||||
if c.Cgroup() == nil && p.Pid() > 0 {
|
if c.Cgroup() == nil && p.Pid() > 0 {
|
||||||
var cg interface{}
|
if cg, err := loadProcessCgroup(ctx, p.Pid()); err == nil {
|
||||||
if cgroups.Mode() == cgroups.Unified {
|
c.cgroup = cg
|
||||||
g, err := cgroupsv2.PidGroupPath(p.Pid())
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", p.Pid())
|
|
||||||
}
|
|
||||||
cg, err = cgroupsv2.Load(g)
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", p.Pid())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cg, err = cgroup1.Load(cgroup1.PidPath(p.Pid()))
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", p.Pid())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
c.cgroup = cg
|
|
||||||
}
|
}
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
@ -512,3 +483,25 @@ func (c *Container) HasPid(pid int) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadProcessCgroup(ctx context.Context, pid int) (cg interface{}, err error) {
|
||||||
|
if cgroups.Mode() == cgroups.Unified {
|
||||||
|
g, err := cgroupsv2.PidGroupPath(pid)
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cg, err = cgroupsv2.Load(g)
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cg, err = cgroup1.Load(cgroup1.PidPath(pid))
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithError(err).Errorf("loading cgroup for %d", pid)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cg, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user