From: W.C.A. Wijngaards Date: Mon, 11 Oct 2021 15:00:20 +0000 (+0200) Subject: - Fix chaos replies to have truncation for short message lengths, X-Git-Tag: release-1.14.0rc1~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=09afdb7669f4c86cf1437a0d101316ef8b2b101d;p=thirdparty%2Funbound.git - Fix chaos replies to have truncation for short message lengths, or long reply strings. --- diff --git a/daemon/worker.c b/daemon/worker.c index 93215a237..b438700af 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -789,6 +789,14 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns, int i; unsigned int rd = LDNS_RD_WIRE(sldns_buffer_begin(pkt)); unsigned int cd = LDNS_CD_WIRE(sldns_buffer_begin(pkt)); + size_t udpsize = edns->udp_size; + edns->edns_version = EDNS_ADVERTISED_VERSION; + edns->udp_size = EDNS_ADVERTISED_SIZE; + edns->bits &= EDNS_DO; + if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL, + LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) + edns->opt_list = NULL; sldns_buffer_clear(pkt); sldns_buffer_skip(pkt, (ssize_t)sizeof(uint16_t)); /* skip id */ sldns_buffer_write_u16(pkt, (uint16_t)(BIT_QR|BIT_RA)); @@ -804,6 +812,12 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns, for(i=0; i255) len=255; /* cap size of TXT record */ + if(sldns_buffer_position(pkt)+2+2+2+4+2+1+len+ + calc_edns_field_size(edns) > udpsize) { + sldns_buffer_write_u16_at(pkt, 6, i); /* ANCOUNT */ + LDNS_TC_SET(sldns_buffer_begin(pkt)); + break; + } sldns_buffer_write_u16(pkt, 0xc00c); /* compr ptr to query */ sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_TXT); sldns_buffer_write_u16(pkt, LDNS_RR_CLASS_CH); @@ -813,13 +827,6 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns, sldns_buffer_write(pkt, str[i], len); } sldns_buffer_flip(pkt); - edns->edns_version = EDNS_ADVERTISED_VERSION; - edns->udp_size = EDNS_ADVERTISED_SIZE; - edns->bits &= EDNS_DO; - if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL, - LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad, - worker->env.now_tv)) - edns->opt_list = NULL; if(sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+calc_edns_field_size(edns)) attach_edns_record(pkt, edns); diff --git a/doc/Changelog b/doc/Changelog index 9d0651485..6e7abc812 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +11 October 2021: Wouter + - Fix chaos replies to have truncation for short message lengths, + or long reply strings. + 4 October 2021: Wouter - Fix to add example.conf note for outbound-msg-retry.