mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +00:00 
			
		
		
		
	Revert "Merge pull request 101888 from kolyshkin/update-runc-rc94"
This reverts commitb1b06fe0a4, reversing changes made to382a33986b.
This commit is contained in:
		
							
								
								
									
										91
									
								
								vendor/github.com/opencontainers/runc/libcontainer/process_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								vendor/github.com/opencontainers/runc/libcontainer/process_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -51,7 +51,7 @@ type parentProcess interface { | ||||
|  | ||||
| 	setExternalDescriptors(fds []string) | ||||
|  | ||||
| 	forwardChildLogs() chan error | ||||
| 	forwardChildLogs() | ||||
| } | ||||
|  | ||||
| type filePair struct { | ||||
| @@ -65,7 +65,6 @@ type setnsProcess struct { | ||||
| 	logFilePair     filePair | ||||
| 	cgroupPaths     map[string]string | ||||
| 	rootlessCgroups bool | ||||
| 	manager         cgroups.Manager | ||||
| 	intelRdtPath    string | ||||
| 	config          *initConfig | ||||
| 	fds             []string | ||||
| @@ -89,8 +88,6 @@ func (p *setnsProcess) signal(sig os.Signal) error { | ||||
|  | ||||
| func (p *setnsProcess) start() (retErr error) { | ||||
| 	defer p.messageSockPair.parent.Close() | ||||
| 	// get the "before" value of oom kill count | ||||
| 	oom, _ := p.manager.OOMKillCount() | ||||
| 	err := p.cmd.Start() | ||||
| 	// close the write-side of the pipes (controlled by child) | ||||
| 	p.messageSockPair.child.Close() | ||||
| @@ -98,34 +95,19 @@ func (p *setnsProcess) start() (retErr error) { | ||||
| 	if err != nil { | ||||
| 		return newSystemErrorWithCause(err, "starting setns process") | ||||
| 	} | ||||
|  | ||||
| 	waitInit := initWaiter(p.messageSockPair.parent) | ||||
| 	defer func() { | ||||
| 		if retErr != nil { | ||||
| 			if newOom, err := p.manager.OOMKillCount(); err == nil && newOom != oom { | ||||
| 				// Someone in this cgroup was killed, this _might_ be us. | ||||
| 				retErr = newSystemErrorWithCause(retErr, "possibly OOM-killed") | ||||
| 			} | ||||
| 			werr := <-waitInit | ||||
| 			if werr != nil { | ||||
| 				logrus.WithError(werr).Warn() | ||||
| 			} | ||||
| 			err := ignoreTerminateErrors(p.terminate()) | ||||
| 			if err != nil { | ||||
| 				logrus.WithError(err).Warn("unable to terminate setnsProcess") | ||||
| 			} | ||||
| 		} | ||||
| 	}() | ||||
|  | ||||
| 	if p.bootstrapData != nil { | ||||
| 		if _, err := io.Copy(p.messageSockPair.parent, p.bootstrapData); err != nil { | ||||
| 			return newSystemErrorWithCause(err, "copying bootstrap data to pipe") | ||||
| 		} | ||||
| 	} | ||||
| 	err = <-waitInit | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := p.execSetns(); err != nil { | ||||
| 		return newSystemErrorWithCause(err, "executing setns process") | ||||
| 	} | ||||
| @@ -262,8 +244,8 @@ func (p *setnsProcess) setExternalDescriptors(newFds []string) { | ||||
| 	p.fds = newFds | ||||
| } | ||||
|  | ||||
| func (p *setnsProcess) forwardChildLogs() chan error { | ||||
| 	return logs.ForwardLogs(p.logFilePair.parent) | ||||
| func (p *setnsProcess) forwardChildLogs() { | ||||
| 	go logs.ForwardLogs(p.logFilePair.parent) | ||||
| } | ||||
|  | ||||
| type initProcess struct { | ||||
| @@ -337,36 +319,9 @@ func (p *initProcess) start() (retErr error) { | ||||
| 		p.process.ops = nil | ||||
| 		return newSystemErrorWithCause(err, "starting init process command") | ||||
| 	} | ||||
|  | ||||
| 	waitInit := initWaiter(p.messageSockPair.parent) | ||||
| 	defer func() { | ||||
| 		if retErr != nil { | ||||
| 			// Find out if init is killed by the kernel's OOM killer. | ||||
| 			// Get the count before killing init as otherwise cgroup | ||||
| 			// might be removed by systemd. | ||||
| 			oom, err := p.manager.OOMKillCount() | ||||
| 			if err != nil { | ||||
| 				logrus.WithError(err).Warn("unable to get oom kill count") | ||||
| 			} else if oom > 0 { | ||||
| 				// Does not matter what the particular error was, | ||||
| 				// its cause is most probably OOM, so report that. | ||||
| 				const oomError = "container init was OOM-killed (memory limit too low?)" | ||||
|  | ||||
| 				if logrus.GetLevel() >= logrus.DebugLevel { | ||||
| 					// Only show the original error if debug is set, | ||||
| 					// as it is not generally very useful. | ||||
| 					retErr = newSystemErrorWithCause(retErr, oomError) | ||||
| 				} else { | ||||
| 					retErr = newSystemError(errors.New(oomError)) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			werr := <-waitInit | ||||
| 			if werr != nil { | ||||
| 				logrus.WithError(werr).Warn() | ||||
| 			} | ||||
|  | ||||
| 			// Terminate the process to ensure we can remove cgroups. | ||||
| 			// terminate the process to ensure we can remove cgroups | ||||
| 			if err := ignoreTerminateErrors(p.terminate()); err != nil { | ||||
| 				logrus.WithError(err).Warn("unable to terminate initProcess") | ||||
| 			} | ||||
| @@ -392,11 +347,6 @@ func (p *initProcess) start() (retErr error) { | ||||
| 	if _, err := io.Copy(p.messageSockPair.parent, p.bootstrapData); err != nil { | ||||
| 		return newSystemErrorWithCause(err, "copying bootstrap data to pipe") | ||||
| 	} | ||||
| 	err = <-waitInit | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	childPid, err := p.getChildPid() | ||||
| 	if err != nil { | ||||
| 		return newSystemErrorWithCause(err, "getting the final child's pid from pipe") | ||||
| @@ -448,7 +398,7 @@ func (p *initProcess) start() (retErr error) { | ||||
| 			// call prestart and CreateRuntime hooks | ||||
| 			if !p.config.Config.Namespaces.Contains(configs.NEWNS) { | ||||
| 				// Setup cgroup before the hook, so that the prestart and CreateRuntime hook could apply cgroup permissions. | ||||
| 				if err := p.manager.Set(p.config.Config.Cgroups.Resources); err != nil { | ||||
| 				if err := p.manager.Set(p.config.Config); err != nil { | ||||
| 					return newSystemErrorWithCause(err, "setting cgroup config for ready process") | ||||
| 				} | ||||
| 				if p.intelRdtManager != nil { | ||||
| @@ -504,7 +454,7 @@ func (p *initProcess) start() (retErr error) { | ||||
| 			sentRun = true | ||||
| 		case procHooks: | ||||
| 			// Setup cgroup before prestart hook, so that the prestart hook could apply cgroup permissions. | ||||
| 			if err := p.manager.Set(p.config.Config.Cgroups.Resources); err != nil { | ||||
| 			if err := p.manager.Set(p.config.Config); err != nil { | ||||
| 				return newSystemErrorWithCause(err, "setting cgroup config for procHooks process") | ||||
| 			} | ||||
| 			if p.intelRdtManager != nil { | ||||
| @@ -630,8 +580,8 @@ func (p *initProcess) setExternalDescriptors(newFds []string) { | ||||
| 	p.fds = newFds | ||||
| } | ||||
|  | ||||
| func (p *initProcess) forwardChildLogs() chan error { | ||||
| 	return logs.ForwardLogs(p.logFilePair.parent) | ||||
| func (p *initProcess) forwardChildLogs() { | ||||
| 	go logs.ForwardLogs(p.logFilePair.parent) | ||||
| } | ||||
|  | ||||
| func getPipeFds(pid int) ([]string, error) { | ||||
| @@ -699,28 +649,3 @@ func (p *Process) InitializeIO(rootuid, rootgid int) (i *IO, err error) { | ||||
| 	} | ||||
| 	return i, nil | ||||
| } | ||||
|  | ||||
| // initWaiter returns a channel to wait on for making sure | ||||
| // runc init has finished the initial setup. | ||||
| func initWaiter(r io.Reader) chan error { | ||||
| 	ch := make(chan error, 1) | ||||
| 	go func() { | ||||
| 		defer close(ch) | ||||
|  | ||||
| 		inited := make([]byte, 1) | ||||
| 		n, err := r.Read(inited) | ||||
| 		if err == nil { | ||||
| 			if n < 1 { | ||||
| 				err = errors.New("short read") | ||||
| 			} else if inited[0] != 0 { | ||||
| 				err = fmt.Errorf("unexpected %d != 0", inited[0]) | ||||
| 			} else { | ||||
| 				ch <- nil | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 		ch <- newSystemErrorWithCause(err, "waiting for init preliminary setup") | ||||
| 	}() | ||||
|  | ||||
| 	return ch | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user