merge #4930 into opencontainers/runc:main

Kir Kolyshkin (2):
  libct: refactor setnsProcess.start
  libct: close child fds on prepareCgroupFD error

LGTMs: lifubang cyphar
This commit is contained in:
Aleksa Sarai
2025-10-16 09:36:26 +11:00
+18 -11
View File
@@ -352,21 +352,21 @@ func (p *setnsProcess) prepareCgroupFD() (*os.File, error) {
return fd, nil return fd, nil
} }
func (p *setnsProcess) start() (retErr error) { // startWithCgroupFD starts a process via clone3 with CLONE_INTO_CGROUP,
defer p.comm.closeParent() // with a fallback if it fails (e.g. not available).
func (p *setnsProcess) startWithCgroupFD() error {
// Close the child side of the pipes.
defer p.comm.closeChild()
fd, err := p.prepareCgroupFD() fd, err := p.prepareCgroupFD()
if err != nil { if err != nil {
return err return err
} }
if fd != nil {
// Get the "before" value of oom kill count. defer fd.Close()
oom, _ := p.manager.OOMKillCount() }
err = p.startWithCPUAffinity() err = p.startWithCPUAffinity()
if fd != nil {
fd.Close()
}
if err != nil && p.cmd.SysProcAttr.UseCgroupFD { if err != nil && p.cmd.SysProcAttr.UseCgroupFD {
logrus.Debugf("exec with CLONE_INTO_CGROUP failed: %v; retrying without", err) logrus.Debugf("exec with CLONE_INTO_CGROUP failed: %v; retrying without", err)
// SysProcAttr.CgroupFD is never used when UseCgroupFD is unset. // SysProcAttr.CgroupFD is never used when UseCgroupFD is unset.
@@ -374,9 +374,16 @@ func (p *setnsProcess) start() (retErr error) {
err = p.startWithCPUAffinity() err = p.startWithCPUAffinity()
} }
// Close the child-side of the pipes (controlled by child). return err
p.comm.closeChild() }
if err != nil {
func (p *setnsProcess) start() (retErr error) {
defer p.comm.closeParent()
// Get the "before" value of oom kill count.
oom, _ := p.manager.OOMKillCount()
if err := p.startWithCgroupFD(); err != nil {
return fmt.Errorf("error starting setns process: %w", err) return fmt.Errorf("error starting setns process: %w", err)
} }