From ed1a24686c9a9255290906a8c7bd1cedd7934cdc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 24 May 2023 09:08:41 +0000 Subject: [PATCH] misc-progs: setuid: Return exit code from called process This patch will return the exit code from the called process which has not been done before. This made it more difficult to catch any unsuccessful calls from the web UI. Partly Fixes: #12863 Tested-by: Jon Murphy Signed-off-by: Michael Tremer --- src/misc-progs/setuid.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/misc-progs/setuid.c b/src/misc-progs/setuid.c index 17b0e70667..9dc0a767b6 100644 --- a/src/misc-progs/setuid.c +++ b/src/misc-progs/setuid.c @@ -104,16 +104,20 @@ static int system_core(char* command, char** args, uid_t uid, gid_t gid, char *e } default: /* parent */ - do { - if (waitpid(pid, &status, 0) == -1) { - if (errno != EINTR) - return -1; - } else { - return status; - } - } while (1); - } + // Wait until the child process has finished + waitpid(pid, &status, 0); + + // The child was terminated by a signal + if (WIFSIGNALED(status)) + return 128 + WTERMSIG(status); + // Return the exit code if available + if (WIFEXITED(status)) + return WEXITSTATUS(status); + + // Something unexpected happened, exiting with error + return EXIT_FAILURE; + } } int run(char* command, char** argv) { -- 2.39.5