diff --git a/src/forward.c b/src/forward.c index 85a8d08..1a7c586 100644 --- a/src/forward.c +++ b/src/forward.c @@ -2468,18 +2468,18 @@ void tcp_request(int confd, time_t now, struct iovec *bigbuff, !read_write(confd, (unsigned char *)daemon->packet, size, RW_READ)) break; - if (size < (int)sizeof(struct dns_header)) + /* header == query */ + header = (struct dns_header *)daemon->packet; + + if (size < (int)sizeof(struct dns_header) || (header->hb3 & HB3_QR)) continue; /* Make sure we have a buffer big enough for the largest answer. */ expand_buf(bigbuff, 65536 + MAXDNAME + RRFIXEDSZ); out_header = bigbuff->iov_base; - /* header == query */ - header = (struct dns_header *)daemon->packet; - /* Add edns0 pheader to query */ - size = add_edns0_config(header, size, ((unsigned char *) header) + daemon->edns_pktsz, &peer_addr, now, &cacheable); + size = add_edns0_config(header, size, ((unsigned char *) header) + daemon->packet_buff_sz, &peer_addr, now, &cacheable); /* Clear buffer to avoid risk of information disclosure. */ memset(bigbuff->iov_base, 0, bigbuff->iov_len);