Exec: use ErrorConmonRead

Before, we were using -1 as a bogus value in podman to signify something went wrong when reading from a conmon pipe. However, conmon uses negative values to indicate the runtime failed, and return the runtime's exit code.

instead, we should use a bogus value that is actually bogus. Define that value in the define package as MinInt32 (-1<< 31 - 1), which is outside of the range of possible pids (-1 << 31)

Signed-off-by: Peter Hunt <pehunt@redhat.com>
This commit is contained in:
Peter Hunt
2020-03-03 15:35:29 -05:00
parent 4b72f9e401
commit d3d97a25e8
3 changed files with 13 additions and 5 deletions

View File

@ -297,7 +297,9 @@ func (c *Container) Exec(tty, privileged bool, env map[string]string, cmd []stri
// Conmon will pass a non-zero exit code from the runtime as a pid here.
// we differentiate a pid with an exit code by sending it as negative, so reverse
// that change and return the exit code the runtime failed with.
if pid < 0 {
// Make sure the value is not ErrorConmonRead, as that is a podman set bogus value
// and not sent by conmon (and thus has no special meaning)
if pid < 0 && pid != define.ErrorConmonRead {
ec = -1 * pid
}
return ec, err