From 00acc36eb913d8041bed06cf054b81bf2d65b030 Mon Sep 17 00:00:00 2001 From: Rodrigo Campos Date: Fri, 12 Jan 2024 12:16:49 +0100 Subject: [PATCH] libct/dmz: Print execve errors This error code is using functions that are present in nolibc too. When using nolibc, the error is printed like: exec /runc.armel: errno=8 When using libc, as it's perror() implementation translates the errno to a message, it is printed like: exec /runc.armel: exec format error Note that when not using nolibc, the error is printed in the same way as before. Signed-off-by: Rodrigo Campos --- libcontainer/dmz/_dmz.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libcontainer/dmz/_dmz.c b/libcontainer/dmz/_dmz.c index 2855e60d5cd..52cc8c26386 100644 --- a/libcontainer/dmz/_dmz.c +++ b/libcontainer/dmz/_dmz.c @@ -1,5 +1,7 @@ #ifdef RUNC_USE_STDLIB # include +# include +# include #else # include "xstat.h" # include "nolibc/nolibc.h" @@ -11,5 +13,17 @@ int main(int argc, char **argv) { if (argc < 1) return 127; - return execve(argv[0], argv, environ); + int r = execve(argv[0], argv, environ); + if (r) { + char *prefix = "exec "; + int err_len = strlen(prefix) + strlen(argv[0]) + 1; + char err[err_len]; + + strcpy(err, prefix); + strcpy(err + strlen(prefix), argv[0]); + err[err_len - 1] = '\0'; + + perror(err); + } + return r; }