Skip to content

execing command in container: error stream protocol error: invalid exit code value 4294967295 #34

@113xiaoji

Description

@113xiaoji

When using crictl to execute the exec command, there is an intermittent error reported:

execing command in container: error stream protocol error: invalid exit code value 4294967295

The relevant Go code snippet is as follows:

		return pidMonitor.pidPoller.Add(pidFD, func() error {
			execPid := e.Pid()

			status := 256

			event, err := execExitStore.GetExitedEvent(e.traceEventID)

			if err == nil && event.Pid == uint32(execPid) {
				status = int(event.ExitCode)
			}
			execExitStore.DeleteExitedEvent(e.traceEventID)

			e.SetExited(status)
			return nil
		})

When event, err := execExitStore.GetExitedEvent(e.traceEventID) encounters an error, the status is set to 256. The setExited method then calls unix.WaitStatus(status).ExitStatus(), as shown here:

func (e *execProcess) setExited(status int) {
    e.status = unix.WaitStatus(status).ExitStatus()
    e.exited = time.Now()

    if e.parent.platform != nil {
       e.parent.platform.ShutdownConsole(context.Background(), e.console)
    }
    close(e.waitBlock)
}

According to the source code, this will return -1:

func (w WaitStatus) ExitStatus() int {
	if !w.Exited() {
		return -1
	}
	return int(w>>shift) & 0xFF
}

As a result, the error message is generated:

execing command in container: error stream protocol error: invalid exit code value 4294967295

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions