mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-19 08:42:22 +00:00
This patch is to fix buffer overflow, return value not unified and variable type not matched issues. And add some judge logic to improve code quality. Changes: 1. Handle the fd properly in the failing case. 2. Fix buffer overflow issues and null pointer access issues. 3. Fix the format issue in log_sys.c. 4. Remove the useless branch and adjust the function logic. 5. Add some checks for the string length before using strcpy/strcat/memcpy. 6. Fix strncpy null-terminated issues. 7. Change the return value to unify the return type. Signed-off-by: CHEN Gang <gang.c.chen@intel.com> Signed-off-by: xiaojin2 <xiaojing.liu@intel.com> Reviewed-by: Zhi Jin <zhi.jin@intel.com> Reviewed-by: Liu Xinwu <xinwu.liu@intel.com> Acked-by: Zhang Di <di.zhang@intel.com>
50 lines
904 B
C
50 lines
904 B
C
/*
|
|
* Copyright (C) <2018> Intel Corporation
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <systemd/sd-journal.h>
|
|
#include "log_sys.h"
|
|
|
|
void do_log(const int level,
|
|
#ifdef DEBUG_ACRN_CRASHLOG
|
|
const char *func, const int line,
|
|
#endif
|
|
...)
|
|
{
|
|
va_list args;
|
|
char *fmt;
|
|
char log[MAX_LOG_LEN];
|
|
int n = 0;
|
|
#ifdef DEBUG_ACRN_CRASHLOG
|
|
const char header_fmt[] = "<%-20s%5d>: ";
|
|
#endif
|
|
|
|
if (level > LOG_LEVEL)
|
|
return;
|
|
|
|
#ifdef DEBUG_ACRN_CRASHLOG
|
|
va_start(args, line);
|
|
#else
|
|
va_start(args, level);
|
|
#endif
|
|
fmt = va_arg(args, char *);
|
|
if (!fmt)
|
|
return;
|
|
|
|
#ifdef DEBUG_ACRN_CRASHLOG
|
|
/* header */
|
|
n = snprintf(log, sizeof(log), header_fmt, func, line);
|
|
if (n < 0 || (size_t)n >= sizeof(log))
|
|
n = 0;
|
|
#endif
|
|
/* msg */
|
|
vsnprintf(log + n, sizeof(log) - n, fmt, args);
|
|
log[sizeof(log) - 1] = 0;
|
|
va_end(args);
|
|
|
|
sd_journal_print(level, "%s", log);
|
|
}
|