Check DNS query via TCP doesn't have QR bit set.

This commit is contained in:
Simon Kelley committed 2026-04-05 22:50:43 +01:00
1 parent 14f53171ca
commit a6069da373
1 file changed
+5 -5
+5 -5
View File
@@ -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);