]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rohash: fix potential bad shift 952/head
authorVictor Julien <victor@inliniac.net>
Wed, 23 Apr 2014 09:00:02 +0000 (11:00 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 23 Apr 2014 09:59:39 +0000 (11:59 +0200)
Fix issue detected byCoverity:

*** CID 1197756:  Bad bit shift operation  (BAD_SHIFT)
/src/util-rohash.c: 74 in ROHashInit()
68         }
69         if (hash_bits < 4 || hash_bits > 32) {
70             SCLogError(SC_ERR_HASH_TABLE_INIT, "invalid hash_bits setting, valid range is 4-32");
71             return NULL;
72         }
73
>>>     CID 1197756:  Bad bit shift operation  (BAD_SHIFT)
>>>     In expression "1U << hash_bits", left shifting by more than 31 bits has undefined behavior.  The shift amount, "hash_bits", is as much as 32.
74         uint32_t size = hashsize(hash_bits) * sizeof(ROHashTableOffsets);
75
76         ROHashTable *table = SCMalloc(sizeof(ROHashTable) + size);
77         if (unlikely(table == NULL)) {
78             SCLogError(SC_ERR_HASH_TABLE_INIT, "failed to alloc memory");
79             return NULL;

This was only a potential issue as ROHashInit was only called with
hash_bits 16 in the code.

Bug #1170.

src/util-rohash.c

index ce1e13cb3be3597a4cb4545bac37242955261bc7..c2b32b46076731d796c645a2661f02666557c274 100644 (file)
@@ -56,7 +56,7 @@ typedef struct ROHashTableOffsets_ {
 
 /** \brief initialize a new rohash
  *
- *  \param hash_bits hash size as 2^hash_bits, so power of 2
+ *  \param hash_bits hash size as 2^hash_bits, so power of 2, max 31
  *  \param item_size size of the data to store
  *
  *  \retval table ptr or NULL on error
@@ -66,8 +66,8 @@ ROHashTable *ROHashInit(uint8_t hash_bits, uint16_t item_size) {
         SCLogError(SC_ERR_HASH_TABLE_INIT, "data size must be multiple of 4");
         return NULL;
     }
-    if (hash_bits < 4 || hash_bits > 32) {
-        SCLogError(SC_ERR_HASH_TABLE_INIT, "invalid hash_bits setting, valid range is 4-32");
+    if (hash_bits < 4 || hash_bits > 31) {
+        SCLogError(SC_ERR_HASH_TABLE_INIT, "invalid hash_bits setting, valid range is 4-31");
         return NULL;
     }