From efb261a95c5a81ddb148f205d74eab3714155f0d Mon Sep 17 00:00:00 2001 From: Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> Date: Mon, 29 May 2023 19:24:00 +0200 Subject: Fix some memory errors triggered by allocation failures (#1995) Some low hanging fruits found using nallocfuzz. See: https://github.com/catenacyber/nallocfuzz See: https://github.com/google/oss-fuzz/pull/9902 Most of these errors are quite trivial to fix; the only exception is the stuff in the uthash. If the insertion fails (because of an allocation failure), we need to avoid some memory leaks. But the only way to check if the `HASH_ADD_*` failed, is to perform a new lookup: a bit costly, but we don't use that code in any critical data-path. --- src/lib/ndpi_utils.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/lib/ndpi_utils.c') diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c index dfdca923a..0199d6424 100644 --- a/src/lib/ndpi_utils.c +++ b/src/lib/ndpi_utils.c @@ -2288,6 +2288,7 @@ int ndpi_hash_add_entry(ndpi_str_hash **h, char *key, u_int8_t key_len, void *va { struct ndpi_str_hash_private **h_priv = (struct ndpi_str_hash_private **)h; struct ndpi_str_hash_private *new = ndpi_calloc(1, sizeof(*new)); + struct ndpi_str_hash_private *found; unsigned int hash_value; if (new == NULL) @@ -2299,6 +2300,14 @@ int ndpi_hash_add_entry(ndpi_str_hash **h, char *key, u_int8_t key_len, void *va new->hash = hash_value; new->value = value; HASH_ADD_INT(*h_priv, hash, new); + + HASH_FIND_INT(*h_priv, &hash_value, found); + if (found == NULL) /* The insertion failed (because of a memory allocation error) */ + { + ndpi_free(new); + return 1; + } + return 0; } -- cgit v1.2.3