]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: Fixup of NULL calls to XSTRDUP
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 22 Nov 2015 00:47:32 +0000 (16:47 -0800)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 23 Nov 2015 21:31:04 +0000 (13:31 -0800)
There are a few situations where XSTRDUP can be called with a NULL
This fix makes this impossible to happen

Ticket: CM-8039
Reviewed-by: CCR-3849
Testing: Rip no longer crashes

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/distribute.c
lib/if_rmap.c

index 525177e17b3247a25177159b687c71920e56c1d2..fdd028d813ea12f2a205655035c3d929a3b20073 100644 (file)
@@ -69,10 +69,12 @@ distribute_lookup (const char *ifname)
   struct distribute *dist;
 
   /* temporary reference */
-  key.ifname = XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname);
+  key.ifname = (ifname) ? XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname) : NULL;
 
   dist = hash_lookup (disthash, &key);
-  XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
+
+  if (key.ifname)
+    XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
 
   return dist;
 }
@@ -110,11 +112,13 @@ distribute_get (const char *ifname)
   struct distribute *ret;
 
   /* temporary reference */
-  key.ifname = XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname);
+  key.ifname = (ifname) ? XSTRDUP(MTYPE_DISTRIBUTE_IFNAME, ifname) : NULL;
   
   ret = hash_get (disthash, &key, (void * (*) (void *))distribute_hash_alloc);
 
-  XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
+  if (key.ifname)
+    XFREE(MTYPE_DISTRIBUTE_IFNAME, key.ifname);
+
   return ret;
 }
 
index 26a6d8c55bcfb1224c136fd909fbe2b8f5e72cdf..f2d76c69d61d2d314c3edcbd96f0530c18f36569 100644 (file)
@@ -64,11 +64,13 @@ if_rmap_lookup (const char *ifname)
   struct if_rmap *if_rmap;
 
   /* temporary copy */
-  key.ifname = XSTRDUP (MTYPE_IF_RMAP_NAME, ifname);
+  key.ifname = (ifname) ? XSTRDUP (MTYPE_IF_RMAP_NAME, ifname) : NULL;
 
   if_rmap = hash_lookup (ifrmaphash, &key);
   
-  XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
+  if (key.ifname)
+    XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
+
   return if_rmap;
 }
 
@@ -103,9 +105,10 @@ if_rmap_get (const char *ifname)
   struct if_rmap *ret;
 
   /* temporary copy */
-  key.ifname = XSTRDUP (MTYPE_IF_RMAP_NAME, ifname);
+  key.ifname = (ifname) ? XSTRDUP (MTYPE_IF_RMAP_NAME, ifname) : NULL;
 
   ret = hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
+
   if (key.ifname)
     XFREE(MTYPE_IF_RMAP_NAME, key.ifname);