From b32f895bcddc528ec431e682efbe76d168e0f325 Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Mon, 2 Feb 2026 13:28:48 +0100 Subject: [PATCH] container: fix exit code return do not return a negative value without an error. Closes: https://github.com/containers/crun/issues/1977 Signed-off-by: Giuseppe Scrivano --- src/libcrun/container.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/libcrun/container.c b/src/libcrun/container.c index e895787bfb..a15bcf46f3 100644 --- a/src/libcrun/container.c +++ b/src/libcrun/container.c @@ -3274,20 +3274,20 @@ libcrun_container_create (libcrun_context_t *context, libcrun_container_t *conta waitpid_ignore_stopped (ret, NULL, 0); ret = TEMP_FAILURE_RETRY (read (pipefd0, &exit_code, sizeof (exit_code))); - if (UNLIKELY (ret < 0)) - return crun_make_error (err, errno, "waiting for container to be ready"); - if (ret > 0) - { - if (exit_code != 0) - { - libcrun_debug ("Exit code is `%d`, deleting container", exit_code); - libcrun_error_t tmp_err = NULL; - libcrun_container_delete (context, def, context->id, true, &tmp_err); - crun_error_release (&tmp_err); - } - return -exit_code; - } - return 1; + if (UNLIKELY (ret <= 0)) + return crun_make_error (err, ret < 0 ? errno : 0, "waiting for container to be ready"); + + if (ret != sizeof (exit_code) || exit_code < 0) + return crun_make_error (err, 0, "internal error: read invalid exit code"); + + if (exit_code == 0) + return 0; + + libcrun_debug ("Exit code is `%d`, deleting container", exit_code); + libcrun_error_t tmp_err = NULL; + libcrun_container_delete (context, def, context->id, true, &tmp_err); + crun_error_release (&tmp_err); + return crun_make_error (err, 0, "error creating container"); } /* forked process. */