Hash table and rate limiter for the system socket weren't freed.
A side-effect was that the "Last message repeated..." notice didn't
get printed if rsyslog was shut down before the repetition was broken.
The hash table for the system socket was allocated twice. The other
one being in activateListeners().
This commit practically reverts: 34a77cde2423303da72ab773128a2ddcf41
The issue seems to be that the hash table is not initialized (to NULL)
rather then not being allocated.
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/ruleset.c:984: alloc_arg: "rulesetConstruct(ruleset_t **)" allocates memory that is stored into "pRuleset".
rsyslog-7.4.10/runtime/ruleset.c:729:1: alloc_fn: Storage is returned from allocation function "calloc(size_t, size_t)".
rsyslog-7.4.10/runtime/ruleset.c:729:1: var_assign: Assigning: "pThis" = "calloc(1UL, 56UL)".
rsyslog-7.4.10/runtime/ruleset.c:729:1: noescape: Resource "pThis" is not freed or pointed-to in function "rulesetInitialize(ruleset_t *)".
rsyslog-7.4.10/runtime/ruleset.c:726:1: noescape: "rulesetInitialize(ruleset_t *)" does not free or save its pointer parameter "pThis".
rsyslog-7.4.10/runtime/ruleset.c:729:1: var_assign: Assigning: "*ppThis" = "pThis".
rsyslog-7.4.10/runtime/ruleset.c:985: noescape: Resource "pRuleset" is not freed or pointed-to in function "rulesetSetName(ruleset_t *, uchar *)".
rsyslog-7.4.10/runtime/ruleset.c:638:43: noescape: "rulesetSetName(ruleset_t *, uchar *)" does not free or save its pointer parameter "pThis".
rsyslog-7.4.10/runtime/ruleset.c:1011: leaked_storage: Variable "pRuleset" going out of scope leaks the storage it points to.
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/ruleset.c:506: alloc_fn: Storage is returned from allocation function "newActive(batch_t *)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: alloc_fn: Storage is returned from allocation function "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: return_alloc_fn: Directly returning storage allocated by "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:506: var_assign: Assigning: "thenAct" = storage returned from "newActive(pBatch)".
rsyslog-7.4.10/runtime/ruleset.c:509: leaked_storage: Variable "thenAct" going out of scope leaks the storage it points to.
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/ruleset.c:326: alloc_fn: Storage is returned from allocation function "newActive(batch_t *)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: alloc_fn: Storage is returned from allocation function "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: return_alloc_fn: Directly returning storage allocated by "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:326: var_assign: Assigning: "newAct" = storage returned from "newActive(pBatch)".
rsyslog-7.4.10/runtime/ruleset.c:362: leaked_storage: Variable "newAct" going out of scope leaks the storage it points to.
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/ruleset.c:373: alloc_fn: Storage is returned from allocation function "newActive(batch_t *)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: alloc_fn: Storage is returned from allocation function "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:220:2: return_alloc_fn: Directly returning storage allocated by "malloc(size_t)".
rsyslog-7.4.10/runtime/ruleset.c:373: var_assign: Assigning: "newAct" = storage returned from "newActive(pBatch)".
rsyslog-7.4.10/runtime/ruleset.c:376: leaked_storage: Variable "newAct" going out of scope leaks the storage it points to.
Error: NULL_RETURNS (CWE-476):
rsyslog-7.4.10/runtime/queue.c:2126: returned_null: Function "malloc(size_t)" returns null (checked 140 out of 168 times).
rsyslog-7.4.10/action.c:1197: example_checked: Example 1: "malloc(batchNumMsgs(pBatch) * 1UL)" has its value checked in "(active = malloc(batchNumMsgs(pBatch) * 1UL)) == NULL".
rsyslog-7.4.10/grammar/lexer.l:302: example_checked: Example 2: "malloc(40UL)" has its value checked in "(bs = malloc(40UL)) == NULL".
rsyslog-7.4.10/grammar/rainerscript.c:2483: example_checked: Example 3: "malloc(8UL)" has its value checked in "(ar->arr = malloc(8UL)) == NULL".
rsyslog-7.4.10/plugins/imklog/bsd.c:221: example_checked: Example 4: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:968: example_checked: Example 5: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/runtime/queue.c:2126: var_assigned: Assigning: "pThis->mut" = null return value from "malloc(size_t)".
rsyslog-7.4.10/runtime/queue.c:2127: dereference: Dereferencing a pointer that might be null "pThis->mut" when calling "pthread_mutex_init(pthread_mutex_t *, pthread_mutexattr_t const *)".
Error: FORWARD_NULL (CWE-476):
rsyslog-7.4.10/runtime/prop.c:171: var_compare_op: Comparing "*ppThis" to null implies that "*ppThis" might be null.
rsyslog-7.4.10/runtime/prop.c:173: var_deref_model: Passing "ppThis" to function "CreateStringProp(prop_t **, uchar *, int)", which dereferences null "*ppThis".
rsyslog-7.4.10/runtime/prop.c:149:2: deref_parm_in_call: Function "SetString(prop_t *, uchar *, int)" dereferences "*ppThis".
rsyslog-7.4.10/runtime/prop.c:80:2: deref_parm: Directly dereferencing parameter "pThis".
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/prop.c:80:5: warning: Access to field 'len' results in a dereference of a null pointer (loaded from variable 'pThis')
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/nsd_gtls.c:120: open_fn: Returning handle opened by function "open(char const *, int, ...)".
rsyslog-7.4.10/runtime/nsd_gtls.c:120: var_assign: Assigning: "fd" = handle returned from "open((char *)pszFile, 0)".
rsyslog-7.4.10/runtime/nsd_gtls.c:126: noescape: Resource "fd" is not freed or pointed-to in function "fstat(int, struct stat *)".
rsyslog-7.4.10/runtime/nsd_gtls.c:139: noescape: Resource "fd" is not freed or pointed-to in function "read(int, void *, size_t)".
rsyslog-7.4.10/runtime/nsd_gtls.c:154: leaked_handle: Handle variable "fd" going out of scope leaks the handle.
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/net.c:1168:2: warning: Potential leak of memory pointed to by 'buf'
rsyslog-7.4.10/runtime/rsyslog.h:445:40: note: expanded from macro 'RETiRet'
Error: COMPILER_WARNING:
rsyslog-7.4.10/runtime/net.c: scope_hint: In function 'debugListenInfo'
rsyslog-7.4.10/runtime/net.c:1101: warning: dereferencing pointer 'ipv6' does break strict-aliasing rules
rsyslog-7.4.10/runtime/net.c:1100: note: initialized from here
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/net.c:876: alloc_arg: "parsAddrWithBits(rsParsObj *, struct NetAddr **, int *)" allocates memory that is stored into "uIP".
rsyslog-7.4.10/parse.c:419:2: alloc_fn: Storage is returned from allocation function "calloc(size_t, size_t)".
rsyslog-7.4.10/parse.c:419:2: var_assign: Assigning: "*pIP" = "calloc(1UL, 16UL)".
rsyslog-7.4.10/runtime/net.c:880: leaked_storage: Variable "uIP" going out of scope leaks the storage it points to.
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/net.c:876: alloc_arg: "parsAddrWithBits(rsParsObj *, struct NetAddr **, int *)" allocates memory that is stored into "uIP".
rsyslog-7.4.10/parse.c:419:2: alloc_fn: Storage is returned from allocation function "calloc(size_t, size_t)".
rsyslog-7.4.10/parse.c:419:2: var_assign: Assigning: "*pIP" = "calloc(1UL, 16UL)".
rsyslog-7.4.10/runtime/net.c:882: noescape: Resource "uIP" is not freed or pointed-to in function "AddAllowedSender(struct AllowedSenders **, struct AllowedSenders **, struct NetAddr *, uint8_t)".
rsyslog-7.4.10/runtime/net.c:619:27: noescape: "AddAllowedSender(struct AllowedSenders **, struct AllowedSenders **, struct NetAddr *, uint8_t)" does not free or save its pointer parameter "iAllow".
rsyslog-7.4.10/runtime/net.c:890: leaked_storage: Variable "uIP" going out of scope leaks the storage it points to.
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/net.c:771:2: warning: Potential leak of memory pointed to by 'allowIP.addr.NetAddr'
rsyslog-7.4.10/runtime/rsyslog.h:445:40: note: expanded from macro 'RETiRet'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/net.c:725:34: warning: Result of 'malloc' is converted to a pointer of type 'struct sockaddr', which is incompatible with sizeof operand type 'struct sockaddr_in'
rsyslog-7.4.10/runtime/debug.h:146:20: note: expanded from macro 'MALLOC'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/net.c:178:19: warning: Result of 'calloc' is converted to a pointer of type 'permittedPeerWildcard_t', which is incompatible with sizeof operand type 'permittedPeers_t'
rsyslog-7.4.10/runtime/rsyslog.h:441:34: note: expanded from macro 'CHKmalloc'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/msg.c:3102:23: warning: Result of 'malloc' is converted to a pointer of type 'uchar', which is incompatible with sizeof operand type 'char'
rsyslog-7.4.10/runtime/debug.h:146:20: note: expanded from macro 'MALLOC'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/msg.c:3280:23: warning: Result of 'malloc' is converted to a pointer of type 'uchar', which is incompatible with sizeof operand type 'char'
rsyslog-7.4.10/runtime/debug.h:146:20: note: expanded from macro 'MALLOC'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/msg.c:3334:19: warning: Result of 'malloc' is converted to a pointer of type 'uchar', which is incompatible with sizeof operand type 'char'
rsyslog-7.4.10/runtime/debug.h:146:20: note: expanded from macro 'MALLOC'
Error: DEADCODE (CWE-561):
rsyslog-7.4.10/runtime/msg.c:2602: cond_at_most: Condition "c >= 35", taking false branch. Now the value of "c" is at most 34.
rsyslog-7.4.10/runtime/msg.c:2602: cond_at_most: Condition "c >= 93", taking false branch. Now the value of "c" is at most 34.
rsyslog-7.4.10/runtime/msg.c:2602: cond_at_least: Condition "c >= 35", taking true branch. Now the value of "c" is at least 35.
rsyslog-7.4.10/runtime/msg.c:2602: cond_at_least: Condition "c <= 91", taking false branch. Now the value of "c" is at least 92.
rsyslog-7.4.10/runtime/msg.c:2602: cond_const: Condition "c >= 93", taking false branch. Now the value of "c" is equal to 92.
rsyslog-7.4.10/runtime/msg.c:2621: intervals: When switching on "c", the value of "c" must be in one of the following intervals: {(-inf,34], [92,92]}.
rsyslog-7.4.10/runtime/msg.c:2628: dead_error_condition: The switch value "c" cannot be "47".
rsyslog-7.4.10/runtime/msg.c:2628: dead_error_begin: Execution cannot reach this statement "case 47:".
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/modules.c:1086:26: warning: Result of 'malloc' is converted to a pointer of type 'uchar', which is incompatible with sizeof operand type 'char'
rsyslog-7.4.10/runtime/rsyslog.h:441:34: note: expanded from macro 'CHKmalloc'
Error: CLANG_WARNING:
rsyslog-7.4.10/runtime/modules.c:1109:26: warning: Result of 'malloc' is converted to a pointer of type 'uchar', which is incompatible with sizeof operand type 'char'
rsyslog-7.4.10/runtime/rsyslog.h:441:34: note: expanded from macro 'CHKmalloc'
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/runtime/modules.c:394: alloc_fn: Storage is returned from allocation function "malloc(size_t)".
rsyslog-7.4.10/runtime/modules.c:394: var_assign: Assigning: "pNew" = storage returned from "malloc(32UL)".
rsyslog-7.4.10/runtime/modules.c:406: leaked_storage: Variable "pNew" going out of scope leaks the storage it points to.
Error: NULL_RETURNS (CWE-476):
rsyslog-7.4.10/runtime/debug.c:698: returned_null: Function "calloc(size_t, size_t)" returns null (checked 107 out of 123 times).
rsyslog-7.4.10/action.c:333: example_checked: Example 1: "calloc(1UL, 264UL)" has its value checked in "(pThis = (action_t *)calloc(1UL, 264UL)) == NULL".
rsyslog-7.4.10/grammar/rainerscript.c:932: example_checked: Example 2: "calloc(params->nParams, 24UL)" has its value checked in "(vals = calloc(params->nParams, 24UL)) == NULL".
rsyslog-7.4.10/outchannel.c:47: example_checked: Example 3: "calloc(1UL, 48UL)" has its value checked in "(pOch = calloc(1UL, 48UL)) == NULL".
rsyslog-7.4.10/parse.c:75: example_checked: Example 4: "calloc(1UL, 16UL)" has its value checked in "(pThis = (rsParsObj *)calloc(1UL, 16UL)) == NULL".
rsyslog-7.4.10/plugins/imfile/imfile.c:496: example_checked: Example 5: "calloc(1UL, 40UL)" has its value checked in "(pModConf = calloc(1UL, 40UL)) == NULL".
rsyslog-7.4.10/runtime/debug.c:698: var_assigned: Assigning: "pThrd" = null return value from "calloc(size_t, size_t)".
rsyslog-7.4.10/runtime/debug.c:699: dereference: Dereferencing a null pointer "pThrd".
Error: CPPCHECK_WARNING:
rsyslog-7.4.10/runtime/cfsysline.c:368: error[memleakOnRealloc]: Common realloc mistake: 'stringBuf' nulled but not freed upon failure
Error: NULL_RETURNS (CWE-476):
rsyslog-7.4.10/plugins/omsnmp/omsnmp.c:264: returned_null: Function "malloc(size_t)" returns null (checked 140 out of 168 times).
rsyslog-7.4.10/action.c:1197: example_checked: Example 1: "malloc(batchNumMsgs(pBatch) * 1UL)" has its value checked in "(active = malloc(batchNumMsgs(pBatch) * 1UL)) == NULL".
rsyslog-7.4.10/grammar/lexer.l:302: example_checked: Example 2: "malloc(40UL)" has its value checked in "(bs = malloc(40UL)) == NULL".
rsyslog-7.4.10/grammar/rainerscript.c:2483: example_checked: Example 3: "malloc(8UL)" has its value checked in "(ar->arr = malloc(8UL)) == NULL".
rsyslog-7.4.10/plugins/imklog/bsd.c:221: example_checked: Example 4: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:968: example_checked: Example 5: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/plugins/omsnmp/omsnmp.c:264: var_assigned: Assigning: "pdu->enterprise" = null return value from "malloc(size_t)".
rsyslog-7.4.10/plugins/omsnmp/omsnmp.c:265: dereference: Dereferencing a pointer that might be null "pdu->enterprise" when calling "memcpy(void * restrict, void const * restrict, size_t)".
Replace putenv() with setenv() which handles memory allocation by itself.
Error: CLANG_WARNING:
rsyslog-7.4.10/plugins/omsnmp/omsnmp.c:206:2: warning: Null pointer passed as an argument to a 'nonnull' parameter
Error: DEADCODE (CWE-561):
rsyslog-7.4.10/plugins/ommail/ommail.c:143: cond_null: Condition "(pNew = calloc(1UL, 16UL)) == NULL", taking true branch. Now the value of "pNew" is NULL.
rsyslog-7.4.10/plugins/ommail/ommail.c:153: null: At condition "pNew != NULL", the value of "pNew" must be NULL.
rsyslog-7.4.10/plugins/ommail/ommail.c:153: dead_error_condition: The condition "pNew != NULL" cannot be true.
rsyslog-7.4.10/plugins/ommail/ommail.c:154: dead_error_line: Execution cannot reach this statement "free(pNew);".
Error: RESOURCE_LEAK (CWE-772):
rsyslog-7.4.10/plugins/mmsnmptrapd/mmsnmptrapd.c:292: alloc_fn: Storage is returned from allocation function "malloc(size_t)".
rsyslog-7.4.10/plugins/mmsnmptrapd/mmsnmptrapd.c:292: var_assign: Assigning: "node" = storage returned from "malloc(24UL)".
rsyslog-7.4.10/plugins/mmsnmptrapd/mmsnmptrapd.c:303: leaked_storage: Variable "node" going out of scope leaks the storage it points to.
Error: OVERRUN (CWE-119):
rsyslog-7.4.10/plugins/mmcount/mmcount.c:264: cond_at_most: Checking "pMsg->iSeverity <= 8" implies that the value of "pMsg->iSeverity" may be up to 8 on the true branch.
rsyslog-7.4.10/plugins/mmcount/mmcount.c:265: overrun-local: Overrunning array "pData->severity" of 8 4-byte elements at element index 8 (byte offset 32) using index "pMsg->iSeverity" (which evaluates to 8).
Error: NULL_RETURNS (CWE-476):
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:1336: returned_null: Function "malloc(size_t)" returns null (checked 140 out of 168 times).
rsyslog-7.4.10/action.c:1197: example_checked: Example 1: "malloc(batchNumMsgs(pBatch) * 1UL)" has its value checked in "(active = malloc(batchNumMsgs(pBatch) * 1UL)) == NULL".
rsyslog-7.4.10/grammar/lexer.l:302: example_checked: Example 2: "malloc(40UL)" has its value checked in "(bs = malloc(40UL)) == NULL".
rsyslog-7.4.10/grammar/rainerscript.c:2483: example_checked: Example 3: "malloc(8UL)" has its value checked in "(ar->arr = malloc(8UL)) == NULL".
rsyslog-7.4.10/plugins/imklog/bsd.c:221: example_checked: Example 4: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:968: example_checked: Example 5: "malloc(1UL * (iMaxLine + 1))" has its value checked in "(pRcv = (uchar *)malloc(1UL * (iMaxLine + 1))) == NULL".
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:1336: var_assigned: Assigning: "pReadfds" = null return value from "malloc(size_t)".
rsyslog-7.4.10/plugins/imuxsock/imuxsock.c:1355: dereference: Dereferencing a pointer that might be null "pReadfds" when calling "memset(void *, int, size_t)".