From cef74951875622e97c85efb4ef673bd2f3777dab Mon Sep 17 00:00:00 2001 From: Michal Bloch Date: Mon, 11 Feb 2019 13:55:39 +0100 Subject: [PATCH] Fix miscellaneous SVACE issues Change-Id: Iefc042ccffa7114d96a2d796d23d74e7e27d2315 Signed-off-by: Michal Bloch --- src/logger/logger.c | 15 +++++++++++---- src/logutil/fd_info.c | 4 +++- src/logutil/logutil.c | 22 ++++++++++++---------- src/shared/logprint.c | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/logger/logger.c b/src/logger/logger.c index 498cbb4..127f405 100644 --- a/src/logger/logger.c +++ b/src/logger/logger.c @@ -822,7 +822,8 @@ static void check_if_fd_limit_reached(struct logger *server, int err) "DLOG", "\x1b[31m DLOG DAEMON FD LIMIT REACHED \x1b[0m" // make it stand out ); - buffer_append(&entry.header, buf); + if (buffer_append(&entry.header, buf)) + printf("ERROR: not enough memory either, please check platform settings as the daemon is seriously resource-starved!\n"); } static int reader_print_out_single_log(struct reader *reader, const struct logger_entry *logger_entry) @@ -1300,8 +1301,11 @@ cleanup: optopt = 0; if (retval) { - if (wr) - send_dlog_reply(wr->fd_entity.fd, DLOG_REQ_HANDLE_LOGUTIL, DLOG_REQ_RESULT_ERR, NULL, 0); + if (wr) { + int r = send_dlog_reply(wr->fd_entity.fd, DLOG_REQ_HANDLE_LOGUTIL, DLOG_REQ_RESULT_ERR, NULL, 0); + if (r < 0) + printf("ERROR: both parse_command_line() and send_dlog_reply() failed\n"); + } *rd = NULL; reader_free(reader); } else @@ -1565,9 +1569,12 @@ static int service_writer_pipe(struct logger *server, struct writer *wr, struct struct logger_entry_with_msg lem; parse_pipe_message(ple, &lem.header, ple->len); add_recv_timestamp(&lem.header); - buffer_append(&lem.header, wr->buf_ptr); + r = buffer_append(&lem.header, wr->buf_ptr); wr->readed -= ple->len; memmove(wr->buffer, wr->buffer + ple->len, sizeof wr->buffer - ple->len); + + if (r) + return r; } } else if (event->events & EPOLLHUP) return -EBADF; diff --git a/src/logutil/fd_info.c b/src/logutil/fd_info.c index acacf19..96a49c6 100644 --- a/src/logutil/fd_info.c +++ b/src/logutil/fd_info.c @@ -85,7 +85,9 @@ int fdi_push_log(struct fd_info *fdi, struct sort_vector *logs, struct log_file return -ENOMEM; if (IS_VECTOR_SIZE_SORTABLE(logs->size)) { - sort_vector_push(logs, temp, l_file); + const int r = sort_vector_push(logs, temp, l_file); + if (r) + return r; } else { logfile_write_with_rotation(temp, l_file, logs->sort_by); free(temp); diff --git a/src/logutil/logutil.c b/src/logutil/logutil.c index 56637c6..c7e299e 100644 --- a/src/logutil/logutil.c +++ b/src/logutil/logutil.c @@ -256,18 +256,18 @@ int parse_options(int argc, char **argv, struct log_file *l_file, struct sort_ve switch (option) { case 0: { /* tid filter */ int tid; - if (sscanf(optarg, "%d", &tid) == 1) - log_add_filter_tid(l_file->format, tid); - else + if (sscanf(optarg, "%d", &tid) != 1) err_arg_nondigit = 1; + else if (log_add_filter_tid(l_file->format, tid)) + goto enomem; break; } case 1: { /* pid filter */ int pid; - if (sscanf(optarg, "%d", &pid) == 1) - log_add_filter_pid(l_file->format, pid); - else + if (sscanf(optarg, "%d", &pid) != 1) err_arg_nondigit = 1; + else if (log_add_filter_pid(l_file->format, pid)) + goto enomem; break; } case 2: { /* version */ @@ -301,10 +301,8 @@ int parse_options(int argc, char **argv, struct log_file *l_file, struct sort_ve err_arg_nondigit = 1; break; case 'f': - if (logfile_set_path(l_file, optarg) < 0) { - ERR("Error: not enough memory\n"); - return -ENOMEM; - } + if (logfile_set_path(l_file, optarg) < 0) + goto enomem; break; case 'v': { const log_print_format format = log_format_from_string(optarg); @@ -348,6 +346,10 @@ int parse_options(int argc, char **argv, struct log_file *l_file, struct sort_ve list_add(filters, "*:D"); return 0; + +enomem: + ERR("Error: out of memory\n"); + return -ENOMEM; } int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, struct fd_ops *buffer_op, struct log_config *conf) diff --git a/src/shared/logprint.c b/src/shared/logprint.c index 2f6cd00..202abef 100644 --- a/src/shared/logprint.c +++ b/src/shared/logprint.c @@ -650,7 +650,7 @@ char *log_format_log_line( if (!tag || !strlen(tag)) tag = "DLOG_ERROR_NOTAG"; - msg = log_buffer_get_message(entry); + msg = log_buffer_get_message(entry) ?: "DLOG_ERROR_NOMSG"; /* * Get the current date/time in pretty form -- 2.7.4