untrusted comment: verify with openbsd-65-base.pub
RWSZaRmt1LEQT3wedoV4T9zhPhNcSRgiIxcMLQbgSQGPaf/XtaBIqfdClb4h58JkXdPNTDCIoyhhhMTz1edTYlkwr3ZQPo0zvAM=

OpenBSD 6.5 errata 013, October 5, 2019

Specially crafted queries may crash unwind and unbound.

Apply by doing:
   signify -Vep /etc/signify/openbsd-65-base.pub -x 013_unbound.patch.sig \
       -m - | (cd /usr/src && patch -p0)

And then rebuild and install unwind and unbound:

   cd /usr/src/sbin/unwind
   make obj
   make
   make install

   cd /usr/src/usr.sbin/unbound
   make -f Makefile.bsd-wrapper obj
   make -f Makefile.bsd-wrapper
   make -f Makefile.bsd-wrapper install

Index: sbin/unwind/libunbound/util/data/msgparse.c
===================================================================
RCS file: /cvs/src/sbin/unwind/libunbound/util/data/msgparse.c,v
retrieving revision 1.1
diff -u -p -r1.1 msgparse.c
--- sbin/unwind/libunbound/util/data/msgparse.c 23 Jan 2019 13:05:27 -0000      1.1
+++ sbin/unwind/libunbound/util/data/msgparse.c 3 Oct 2019 11:55:54 -0000
@@ -1061,18 +1061,18 @@ parse_edns_from_pkt(sldns_buffer* pkt, s
       size_t rdata_len;
       uint8_t* rdata_ptr;
       log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
+       memset(edns, 0, sizeof(*edns));
       if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 ||
               LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) {
               if(!skip_pkt_rrs(pkt, ((int)LDNS_ANCOUNT(sldns_buffer_begin(pkt)))+
                       ((int)LDNS_NSCOUNT(sldns_buffer_begin(pkt)))))
-                       return 0;
+                       return LDNS_RCODE_FORMERR;
       }
       /* check edns section is present */
       if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) {
               return LDNS_RCODE_FORMERR;
       }
       if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 0) {
-               memset(edns, 0, sizeof(*edns));
               edns->udp_size = 512;
               return 0;
       }
Index: usr.sbin/unbound/util/data/msgparse.c
===================================================================
RCS file: /cvs/src/usr.sbin/unbound/util/data/msgparse.c,v
retrieving revision 1.5
diff -u -p -r1.5 msgparse.c
--- usr.sbin/unbound/util/data/msgparse.c       17 Sep 2018 09:46:12 -0000      1.5
+++ usr.sbin/unbound/util/data/msgparse.c       3 Oct 2019 11:47:53 -0000
@@ -1061,18 +1061,18 @@ parse_edns_from_pkt(sldns_buffer* pkt, s
       size_t rdata_len;
       uint8_t* rdata_ptr;
       log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
+       memset(edns, 0, sizeof(*edns));
       if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 ||
               LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) {
               if(!skip_pkt_rrs(pkt, ((int)LDNS_ANCOUNT(sldns_buffer_begin(pkt)))+
                       ((int)LDNS_NSCOUNT(sldns_buffer_begin(pkt)))))
-                       return 0;
+                       return LDNS_RCODE_FORMERR;
       }
       /* check edns section is present */
       if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) {
               return LDNS_RCODE_FORMERR;
       }
       if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 0) {
-               memset(edns, 0, sizeof(*edns));
               edns->udp_size = 512;
               return 0;
       }