From 8d36cbd29d8db7091e13dd8d720b744c7399acf2 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 2 Aug 2023 13:20:47 +0200 Subject: [PATCH] lookup tables: fix static analyzer issue If something goes really wrong, a lookup table's name would not be set. That could lead to a NULL pointer access. HOWEVER, this would require serious bugs in config parameter parsing, as the lookup table name is a required parameter and the parser will error out if not set. So the bug is mostly cosmetic - but it does not hurt to handle this case, of course. Reference:https://github.com/rsyslog/rsyslog/commit/8d36cbd29d8db7091e13dd8d720b744c7399acf2 Conflict:NA --- runtime/lookup.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/runtime/lookup.c b/runtime/lookup.c index d9ee53b7ad..44085818c2 100644 --- a/runtime/lookup.c +++ b/runtime/lookup.c @@ -1037,11 +1037,18 @@ lookupTableDefProcessCnf(struct cnfobj *o) "param '%s'\n", modpblk.descr[i].name); } } + const uchar *const lu_name = lu->name; /* we need a const to keep TSAN happy :-( */ + const uchar *const lu_filename = lu->filename; /* we need a const to keep TSAN happy :-( */ + if(lu_name == NULL || lu_filename == NULL) { + iRet = RS_RET_INTERNAL_ERROR; + LogError(0, iRet, "internal error: lookup table name not set albeit being mandatory"); + ABORT_FINALIZE(iRet); + } #ifdef HAVE_PTHREAD_SETNAME_NP - thd_name_len = ustrlen(lu->name) + strlen(reloader_prefix) + 1; + thd_name_len = ustrlen(lu_name) + strlen(reloader_prefix) + 1; CHKmalloc(reloader_thd_name = malloc(thd_name_len)); strcpy(reloader_thd_name, reloader_prefix); - strcpy(reloader_thd_name + strlen(reloader_prefix), (char*) lu->name); + strcpy(reloader_thd_name + strlen(reloader_prefix), (char*) lu_name); reloader_thd_name[thd_name_len - 1] = '\0'; #if defined(__NetBSD__) pthread_setname_np(lu->reloader, "%s", reloader_thd_name); @@ -1051,9 +1058,9 @@ lookupTableDefProcessCnf(struct cnfobj *o) pthread_setname_np(lu->reloader, reloader_thd_name); #endif #endif - CHKiRet(lookupReadFile(lu->self, lu->name, lu->filename)); + CHKiRet(lookupReadFile(lu->self, lu_name, lu_filename)); LogMsg(0, RS_RET_OK, LOG_INFO, "lookup table '%s' loaded from file '%s'", - lu->name, lu->filename); + lu_name, lu->filename); finalize_it: #ifdef HAVE_PTHREAD_SETNAME_NP