Check return value of vsnprintf() 69/249369/2
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 10 Dec 2020 23:17:19 +0000 (08:17 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 11 Dec 2020 01:50:31 +0000 (10:50 +0900)
Change-Id: I6609f8bac28ec162e23867d01766a9857153e65b
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launchpad-process-pool/src/launchpad_log.c
src/launchpad-process-pool/src/launchpad_logger.c
src/lib/common/src/launchpad_common.c

index 6c28d01..fc5d698 100644 (file)
@@ -33,13 +33,18 @@ int _log_print(const char *tag, const char *format, ...)
 {
        char formatted_buf[LAUNCHPAD_LOG_MAX_STRING_SIZE];
        va_list ap;
+       int ret;
 
        if (!__logger)
                return 0;
 
        va_start(ap, format);
-       vsnprintf(formatted_buf, sizeof(formatted_buf), format, ap);
+       ret = vsnprintf(formatted_buf, sizeof(formatted_buf), format, ap);
        va_end(ap);
+       if (ret < 0 || ret >= sizeof(formatted_buf)) {
+               _E("vsnprintf() is failed. result(%d)", ret);
+               return -1;
+       }
 
        return _logger_print(__logger, tag, formatted_buf);
 }
index 529b00c..3dd37a4 100644 (file)
@@ -178,6 +178,7 @@ int _logger_print(logger_h handle, const char *tag, const char *format, ...)
        ssize_t ret;
        va_list ap;
        off_t offset;
+       int bytes;
 
        if (!handle || !tag || !format) {
                _E("Invalid parameter");
@@ -196,8 +197,12 @@ int _logger_print(logger_h handle, const char *tag, const char *format, ...)
                _E("lseek() is failed. errno(%d)", errno);
 
        va_start(ap, format);
-       vsnprintf(format_buf, sizeof(format_buf), format, ap);
+       bytes = vsnprintf(format_buf, sizeof(format_buf), format, ap);
        va_end(ap);
+       if (bytes < 0 || bytes >= sizeof(format_buf)) {
+               _E("vsnprintf() is failed. result(%d)", bytes);
+               return -1;
+       }
 
        snprintf(buf, sizeof(buf),
                        "[%6d] %04d-%02d-%02d %02d:%02d:%02d %-16s %-100s\n",
index 05d8bef..6e370ef 100644 (file)
@@ -1441,16 +1441,20 @@ int _send_message_to_logger(const char *tag, const char *format, ...)
        int ret;
        int fd;
 
+       va_start(ap, format);
+       ret = vsnprintf(fmt, sizeof(fmt), format, ap);
+       va_end(ap);
+       if (ret < 0 || ret >= sizeof(fmt)) {
+               _E("vsnprintf() is failed. result(%d)", ret);
+               return -1;
+       }
+
        snprintf(buf, sizeof(buf), "%s/daemons/%u/.launchpad-logger-sock",
                        SOCKET_PATH, getuid());
        fd = __create_client_socket(buf);
        if (fd < 0)
                return -1;
 
-       va_start(ap, format);
-       vsnprintf(fmt, sizeof(fmt), format, ap);
-       va_end(ap);
-
        snprintf(buf, sizeof(buf), "%s: %s", tag, fmt);
        ret = __send_raw(fd, 0, (unsigned char *)buf, strlen(buf) + 1);
        if (ret < 0) {
@@ -1467,10 +1471,15 @@ void _print_hwc_log(const char *format, ...)
 {
        char buf[1024];
        va_list ap;
+       int ret;
 
        va_start(ap, format);
-       vsnprintf(buf, sizeof(buf), format, ap);
+       ret = vsnprintf(buf, sizeof(buf), format, ap);
        va_end(ap);
+       if (ret < 0 || ret >= sizeof(buf)) {
+               _E("vsnprintf() is failed. result(%d)", ret);
+               return;
+       }
 
        prctl(PR_TASK_PERF_USER_TRACE, buf, strlen(buf));
 }