Bill Parker created BIT-1415:
--------------------------------

             Summary: Lack of Sanity Checking in file patricia.c in Bro-2.3.2
                 Key: BIT-1415
                 URL: https://bro-tracker.atlassian.net/browse/BIT-1415
             Project: Bro Issue Tracker
          Issue Type: Patch
          Components: bro-aux
    Affects Versions: 2.3
         Environment: Unix/Linux/Windows (lack of sanity checking)
            Reporter: Bill Parker
         Attachments: patricia.c.patch

Hello All,

   In reviewing source code in Bro-2.3.2, I found several instances of missing 
sanity checks
for calls to calloc() in file 'patricia.c' in directory 
'aux/broctl/aux/pysubnettree', where calls
to calloc() are not checked for a return value of NULL, indicating failure.  
The patch file below corrects/addresses these issues:

--- patricia.c.orig     2015-06-05 13:25:12.749964570 -0700
+++ patricia.c  2015-06-05 13:36:05.432917217 -0700
@@ -265,7 +265,10 @@
                        //prefix4_t size incorrect on NT
                        prefix = calloc(1, sizeof (prefix_t));
 #endif /* NT */
-
+                       if (prefix == NULL) {   /* we tried to allocate memory 
again, and failed... */
+                           fprintf(stderr, "Unable to allocate memory for 
prefix...\n");
+                           return (prefix);    /* can we return NULL here? */
+                       }
                        dynamic_allocated++;
                }
                memcpy (&prefix->add.sin, dest, 4);
@@ -396,6 +399,10 @@
 New_Patricia (int maxbits)
 {
     patricia_tree_t *patricia = calloc(1, sizeof *patricia);
+    if (patricia == NULL) { /* oops, calloc() failed, now what? */
+       fprintf(stderr, "Unable to allocate memory in New_Patricia...\n");
+       return (patricia);  /* can we return NULL here? */
+    }
 
     patricia->maxbits = maxbits;
     patricia->head = NULL;
@@ -665,6 +672,10 @@
 
     if (patricia->head == NULL) {
        node = calloc(1, sizeof *node);
+       if (node == NULL) { /* oops, memory allocation failed...    */
+           fprintf(stderr, "Unable to allocate memory for 
patricia_lookup...\n");
+           return NULL;    /* can we return NULL here???   */
+       }
        node->bit = prefix->bitlen;
        node->prefix = Ref_Prefix (prefix);
        node->parent = NULL;
@@ -776,6 +787,11 @@
     }
 
     new_node = calloc(1, sizeof *new_node);
+    if (new_node == NULL) { /* oops, unable to allocate memory for new_node */
+       fprintf(stderr, "Unable to allocate memory for new_node in 
patricia_lookup...\n");
+       free(node);
+       return (NULL);  /* can we return NULL here? */
+    }
     new_node->bit = prefix->bitlen;
     new_node->prefix = Ref_Prefix (prefix);
     new_node->parent = NULL;
@@ -828,6 +844,12 @@
     }
     else {
         glue = calloc(1, sizeof *glue);
+       if (glue == NULL) {   /* oops, unable to allocate memory for glue...  */
+           fprintf(stderr, "Unable to allocate memory for glue in 
patricia_lookup...\n");
+           free(new_node);
+           free(node);
+           return (glue);  /* can we return NULL here? */
+       }
         glue->bit = differ_bit;
         glue->prefix = NULL;
         glue->parent = node->parent;





--
This message was sent by Atlassian JIRA
(v6.5-OD-05-041#65001)
_______________________________________________
bro-dev mailing list
bro-dev@bro.org
http://mailman.icsi.berkeley.edu/mailman/listinfo/bro-dev

Reply via email to