diff options
author | Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | 2018-09-19 07:37:53 +0100 |
---|---|---|
committer | Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | 2018-09-19 07:43:02 +0100 |
commit | 687168ccd9154b1fb7a470fa8f42ce64a135f51d (patch) | |
tree | 9680d3435e683eb31bcf3e5d48d597d03aea4c4b /package/network/services/dnsmasq/patches | |
parent | e8cbfedc7229348230c3f970b2376776cb0c113e (diff) | |
download | upstream-687168ccd9154b1fb7a470fa8f42ce64a135f51d.tar.gz upstream-687168ccd9154b1fb7a470fa8f42ce64a135f51d.tar.bz2 upstream-687168ccd9154b1fb7a470fa8f42ce64a135f51d.zip |
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 <ldir@darbyshire-bryant.me.uk>
Diffstat (limited to 'package/network/services/dnsmasq/patches')
-rw-r--r-- | package/network/services/dnsmasq/patches/0001-Handle-memory-allocation-failure-in-make_non_termina.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/package/network/services/dnsmasq/patches/0001-Handle-memory-allocation-failure-in-make_non_termina.patch b/package/network/services/dnsmasq/patches/0001-Handle-memory-allocation-failure-in-make_non_termina.patch new file mode 100644 index 0000000000..0590f47d9a --- /dev/null +++ b/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 <simon@thekelleys.org.uk> +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 <ldir@darbyshire-bryant.me.uk> +--- + 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); ++ } + } + } + |