diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c index 3de736529a0..d5a65d47d7b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c @@ -1563,7 +1563,12 @@ int exec_container(const char *command_file) { fds = open(ptsname(fdm), O_RDWR); // Creation of a child process - if (fork()) { + pid_t child_pid = fork(); + if (child_pid == -1) { + fprintf(ERRORFILE, "failed to fork process: %s\n", strerror(errno)); + exit_code = DOCKER_EXEC_FAILED; + goto cleanup; + } else if (child_pid != 0) { fd_set fd_in; // Parent @@ -2323,6 +2328,12 @@ int launch_container_as_user(const char *user, const char *app_id, } pid_t child_pid = fork(); + if (child_pid == -1) { + fprintf(ERRORFILE, "failed to fork process: %s\n", strerror(errno)); + exit_code = ERROR_FORKING_PROCESS; + goto cleanup; + } + if (child_pid != 0) { // parent exit_code = wait_and_write_exit_code(child_pid, exit_code_file); @@ -2971,7 +2982,10 @@ static int run_traffic_control(const char *opts[], char *command_file) { args[i] = 0; pid_t child_pid = fork(); - if (child_pid != 0) { + if (child_pid == -1) { + fprintf(ERRORFILE, "failed to fork process: %s\n", strerror(errno)); + return TRAFFIC_CONTROL_EXECUTION_FAILED; + } else if (child_pid != 0) { int exit_code = wait_and_get_exit_code(child_pid); if (exit_code != 0) { fprintf(LOGFILE, "failed to execute tc command!\n"); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/util.h b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/util.h index b984a2337a3..bf6e1446ce7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/util.h +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/util.h @@ -103,7 +103,8 @@ enum errorcodes { DOCKER_SERVICE_MODE_DISABLED = 75, ERROR_RUNC_SETUP_FAILED = 76, ERROR_RUNC_RUN_FAILED = 77, - ERROR_RUNC_REAP_LAYER_MOUNTS_FAILED = 78 + ERROR_RUNC_REAP_LAYER_MOUNTS_FAILED = 78, + ERROR_FORKING_PROCESS = 79 }; /* Macros for min/max. */ diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c index f35fd88bfbd..87af8ff7c0d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c @@ -1166,10 +1166,13 @@ static int check_privileges(const char *user) { } if (ret != 1) { - int child_pid = fork(); + pid_t child_pid = fork(); if (child_pid == 0) { execl("/usr/bin/sudo", "sudo", "-U", user, "-n", "-l", "docker", NULL); exit(INITIALIZE_USER_FAILED); + } else if (child_pid == -1) { + fprintf(ERRORFILE, "failed to fork process: %s\n", strerror(errno)); + exit(INITIALIZE_USER_FAILED); } else { while ((waitid = waitpid(child_pid, &statval, 0)) != child_pid) { if (waitid == -1 && errno != EINTR) {