diff --git a/src/cmd/isulad-shim/common.c b/src/cmd/isulad-shim/common.c index 2a1b9c532e53546996c7e4487ef1dfd64cfd92e2..abbc67cffc6665ca1fd5939899ee88fb67454906 100644 --- a/src/cmd/isulad-shim/common.c +++ b/src/cmd/isulad-shim/common.c @@ -108,10 +108,11 @@ bool file_exists(const char *f) int cmd_combined_output(const char *binary, const char *params[], void *output, int *output_len) { int ret = SHIM_ERR; + int status = 0; int exec_fd[2] = { -1, -1 }; int stdio[2] = { -1, -1 }; pid_t pid = 0; - char exec_buff[BUFSIZ + 1] = { 0 }; + char exec_buff[BUFSIZ] = { 0 }; ssize_t nread; if (pipe2(exec_fd, O_CLOEXEC) != 0) { @@ -135,23 +136,24 @@ int cmd_combined_output(const char *binary, const char *params[], void *output, dup2(stdio[1], 2); execvp(binary, (char * const *)params); (void)dprintf(exec_fd[1], "fork/exec error: %s", strerror(errno)); + _exit(EXIT_FAILURE); } // parent close(exec_fd[1]); close(stdio[1]); - nread = read_nointr(exec_fd[0], exec_buff, sizeof(exec_buff)); + nread = read_nointr(exec_fd[0], exec_buff, BUFSIZ - 1); if (nread > 0) { ret = SHIM_ERR; goto out; } - *output_len = read_nointr(stdio[0], output, 8191); + *output_len = read_nointr(stdio[0], output, BUFSIZ - 1); close(stdio[0]); close(exec_fd[0]); - int status = 0; wait(&status); ret = SHIM_OK; + out: if (ret != SHIM_OK && pid != 0) { kill(pid, 9); diff --git a/src/cmd/isulad-shim/main.c b/src/cmd/isulad-shim/main.c index 7b0b0521b6467ee28051aff21b0e863ceffde2be..bda2305ee9bf3a84d4e4bbe7de63255742cbcfe6 100644 --- a/src/cmd/isulad-shim/main.c +++ b/src/cmd/isulad-shim/main.c @@ -34,7 +34,7 @@ void signal_routine(int sig) switch (sig) { case SIGALRM: write_message(g_log_fd, ERR_MSG, "runtime timeout"); - exit(1); + exit(EXIT_FAILURE); default: break; } diff --git a/src/cmd/isulad-shim/process.c b/src/cmd/isulad-shim/process.c index 5f929b768bd22eb7a54a5c3fa447160426de1639..0861c5aede9328ab7ce003ef1280055fa0190b3b 100644 --- a/src/cmd/isulad-shim/process.c +++ b/src/cmd/isulad-shim/process.c @@ -58,9 +58,8 @@ static shim_client_process_state* load_process() p_state = shim_client_process_state_parse_file("process.json", NULL, &err); if (p_state == NULL) { write_message(g_log_fd, ERR_MSG, "parse process state failed"); - goto out; } -out: + if (err != NULL) { free(err); } @@ -156,6 +155,7 @@ static int add_io_dispatch(int epfd, io_thread_t *io_thd, int from, int to) ret = epoll_ctl(epfd, EPOLL_CTL_ADD, from, &ev); if (ret != SHIM_OK) { + free(fn); write_message(g_log_fd, ERR_MSG, "add fd %d to epoll loop failed:%d", from, SHIM_SYS_ERR(errno)); pthread_mutex_unlock(&(ioc->mutex)); return SHIM_ERR; @@ -417,13 +417,13 @@ static void* task_console_accept(void *data) conn_fd = accept(ac->listen_fd, NULL, NULL); if (conn_fd < 0) { write_message(g_log_fd, ERR_MSG, "accept from fd %d failed:%d", ac->listen_fd, SHIM_SYS_ERR(errno)); - exit(EXIT_FAILURE); + goto out; } recv_fd = receive_fd(conn_fd); if (check_fd(recv_fd) != true) { write_message(g_log_fd, ERR_MSG, "check console fd failed"); - exit(EXIT_FAILURE); + goto out; } // do console io copy @@ -431,18 +431,19 @@ static void* task_console_accept(void *data) // p.state.stdin---->runtime.console ret = connect_to_isulad(ac->p, stdid_in, ac->p->state->isulad_stdin, recv_fd); if (ret != SHIM_OK) { - exit(EXIT_FAILURE); + goto out; } // p.state.stdout<------runtime.console ret = connect_to_isulad(ac->p, stdid_out, ac->p->state->isulad_stdout, recv_fd); if (ret != SHIM_OK) { - exit(EXIT_FAILURE); + goto out; } // if the terminal is used, we do not need to active the io copy of stderr pipe destory_io_thread(ac->p, stdid_err); +out: // release listen socket close_fd(&ac->listen_fd); if (ac->p->console_sock_path != NULL) { @@ -451,6 +452,9 @@ static void* task_console_accept(void *data) ac->p->console_sock_path = NULL; } free(ac); + if (ret != SHIM_OK) { + exit(EXIT_FAILURE); + } return NULL; } @@ -513,7 +517,8 @@ static int console_init(process_t *p) fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { - return SHIM_SYS_ERR(errno); + write_message(g_log_fd, ERR_MSG, "create socket failed:%d", SHIM_SYS_ERR(errno)); + goto failure; } (void)memset(&addr, 0, sizeof(addr)); @@ -556,6 +561,7 @@ failure: if (ac != NULL) { free(ac); } + unlink(p->console_sock_path); return SHIM_ERR; } @@ -628,12 +634,7 @@ static int open_terminal_io(process_t *p) } // begin listen and accept fd from p->console_sock_path - ret = console_init(p); - if (ret != SHIM_OK) { - write_message(g_log_fd, ERR_MSG, "init console failed:%d", ret); - return SHIM_ERR; - } - return SHIM_OK; + return console_init(p); } @@ -821,7 +822,7 @@ static void process_kill_all(process_t *p) return; } -void process_delete(process_t *p) +static void process_delete(process_t *p) { if (p->state->exec) { return; diff --git a/src/cmd/isulad-shim/process.h b/src/cmd/isulad-shim/process.h index 71eca2e97571537fdf58822d31f3b8f76a7069b7..a3671d94d5e63b4c63ea56b342941ece7dde7ba0 100644 --- a/src/cmd/isulad-shim/process.h +++ b/src/cmd/isulad-shim/process.h @@ -90,7 +90,6 @@ int open_io(process_t *p); int process_io_init(process_t *p); int create_process(process_t *p); int process_signal_handle_routine(process_t *p); -void process_delete(process_t *p); #ifdef __cplusplus } diff --git a/src/services/execution/events/collector.c b/src/services/execution/events/collector.c index 0e7dc73e3c024b792303703881d5a08da0606ca7..b4270b0f2c7626956199f6bec74013345005ea18 100644 --- a/src/services/execution/events/collector.c +++ b/src/services/execution/events/collector.c @@ -180,9 +180,9 @@ static void supplement_msg_for_events_handler(const struct monitord_msg *msg, st static int supplement_operator_for_container_msg(const struct monitord_msg *msg, struct isulad_events_format *format_msg) { -#define OPERATOR_MAX_LEN 50 +#define CONTAINER_OPERATOR_MAX_LEN 300 int nret = 0; - char opt[OPERATOR_MAX_LEN] = {0x00}; + char opt[CONTAINER_OPERATOR_MAX_LEN] = {0x00}; if (strlen(msg->args) != 0) { nret = snprintf(opt, sizeof(opt), "container %s: %s", isulad_event_sta2str(msg->value), msg->args); @@ -403,10 +403,10 @@ out: static int supplement_msg_for_image(struct monitord_msg *msg, struct isulad_events_format *format_msg) { -#define OPERATOR_MAX_LEN 50 +#define IMAGE_OPERATOR_MAX_LEN 50 int ret = 0; int nret = 0; - char opt[OPERATOR_MAX_LEN] = {0x00}; + char opt[IMAGE_OPERATOR_MAX_LEN] = {0x00}; format_msg->id = util_strdup_s(msg->name); @@ -672,17 +672,17 @@ static int event_copy(const struct isulad_events_format *src, struct isulad_even } if (src->annotations_len != 0) { - util_free_array(dest->annotations); + util_free_array_by_len(dest->annotations, dest->annotations_len); dest->annotations = (char **)util_common_calloc_s(src->annotations_len * sizeof(char *)); if (dest->annotations == NULL) { ERROR("Out of memory"); return -1; } - if (dest->annotations) - for (i = 0; i < src->annotations_len; i++) { - dest->annotations[i] = util_strdup_s(src->annotations[i]); - } + for (i = 0; i < src->annotations_len; i++) { + dest->annotations[i] = util_strdup_s(src->annotations[i]); + } + dest->annotations_len = src->annotations_len; }