Browse Source

dnsmasq: Handle memory allocation failure in make_non_terminals()

Backport upstream commit:

ea6cc33 Handle memory allocation failure in make_non_terminals()

Signed-off-by: Kevin Darbyshire-Bryant <[email protected]>
Kevin Darbyshire-Bryant 7 years ago
parent
commit
687168ccd9

+ 1 - 1
package/network/services/dnsmasq/Makefile

@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dnsmasq
 PKG_VERSION:=2.80test6
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/test-releases

+ 45 - 0
package/network/services/dnsmasq/patches/0001-Handle-memory-allocation-failure-in-make_non_termina.patch

@@ -0,0 +1,45 @@
+From ea6cc338042094f8023d224e53c244da158e6499 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <[email protected]>
+Date: Tue, 18 Sep 2018 23:21:17 +0100
+Subject: [PATCH] Handle memory allocation failure in make_non_terminals()
+
+Thanks to Kristian Evensen for spotting the problem.
+
+Signed-off-by: Kevin Darbyshire-Bryant <[email protected]>
+---
+ src/cache.c | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1360,7 +1360,7 @@ void cache_add_dhcp_entry(char *host_nam
+ static void make_non_terminals(struct crec *source)
+ {
+   char *name = cache_get_name(source);
+-  struct crec* crecp, *tmp, **up;
++  struct crec *crecp, *tmp, **up;
+   int type = F_HOSTS | F_CONFIG;
+ #ifdef HAVE_DHCP
+   if (source->flags & F_DHCP)
+@@ -1434,12 +1434,15 @@ static void make_non_terminals(struct cr
+ #endif
+ 	crecp = whine_malloc(sizeof(struct crec));
+ 
+-      *crecp = *source;
+-      crecp->flags &= ~(F_IPV4 | F_IPV6 | F_CNAME | F_DNSKEY | F_DS | F_REVERSE);
+-      crecp->flags |= F_NAMEP;
+-      crecp->name.namep = name;
+-
+-      cache_hash(crecp);
++      if (crecp)
++	{
++	  *crecp = *source;
++	  crecp->flags &= ~(F_IPV4 | F_IPV6 | F_CNAME | F_DNSKEY | F_DS | F_REVERSE);
++	  crecp->flags |= F_NAMEP;
++	  crecp->name.namep = name;
++	  
++	  cache_hash(crecp);
++	}
+     }
+ }
+