5b1d59566da80b443a743c8858a96324c8a0d1b4
[openwrt/staging/blocktrron.git] /
1 From e710c34469af4378c2db6fa0b0be88313adcb68f Mon Sep 17 00:00:00 2001
2 From: Alin Nastac <alin.nastac@gmail.com>
3 Date: Mon, 30 Sep 2019 15:30:26 +0100
4 Subject: [PATCH] Fix crash when negative SRV response over TCP gets stored in
5 LRU cache entry.
6
7 Patch extended to receive side of pipe by SRK.
8 ---
9 src/cache.c | 8 ++++++--
10 1 file changed, 6 insertions(+), 2 deletions(-)
11
12 --- a/src/cache.c
13 +++ b/src/cache.c
14 @@ -665,7 +665,11 @@ void cache_end_insert(void)
15 if (flags & (F_IPV4 | F_IPV6 | F_DNSKEY | F_DS | F_SRV))
16 read_write(daemon->pipe_to_parent, (unsigned char *)&new_chain->addr, sizeof(new_chain->addr), 0);
17 if (flags & F_SRV)
18 - blockdata_write(new_chain->addr.srv.target, new_chain->addr.srv.targetlen, daemon->pipe_to_parent);
19 + {
20 + /* A negative SRV entry is possible and has no data, obviously. */
21 + if (!(flags & F_NEG))
22 + blockdata_write(new_chain->addr.srv.target, new_chain->addr.srv.targetlen, daemon->pipe_to_parent);
23 + }
24 #ifdef HAVE_DNSSEC
25 if (flags & F_DNSKEY)
26 {
27 @@ -737,7 +741,7 @@ int cache_recv_insert(time_t now, int fd
28 if (!read_write(fd, (unsigned char *)&addr, sizeof(addr), 1))
29 return 0;
30
31 - if (flags & F_SRV && !(addr.srv.target = blockdata_read(fd, addr.srv.targetlen)))
32 + if ((flags & F_SRV) && !(flags & F_NEG) && !(addr.srv.target = blockdata_read(fd, addr.srv.targetlen)))
33 return 0;
34
35 #ifdef HAVE_DNSSEC