]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #588: Unbound 1.13.2 crashes due to p->pc is NULL in
authorGeorge Thessalonikefs <george@nlnetlabs.nl>
Tue, 25 Jan 2022 16:15:37 +0000 (17:15 +0100)
committerGeorge Thessalonikefs <george@nlnetlabs.nl>
Tue, 25 Jan 2022 16:15:37 +0000 (17:15 +0100)
  serviced_udp_callback.

doc/Changelog
services/outside_network.c

index 2a48e872afa319ab528df49807735e2aceaa7400..9f2887e53adc0521a47b34091379798d89c7e727 100644 (file)
@@ -1,3 +1,7 @@
+25 January 2022: George
+       - Fix #588: Unbound 1.13.2 crashes due to p->pc is NULL in
+         serviced_udp_callback.
+
 25 January 2022: Wouter
        - Fix #610: Undefine-shift in sldns_str2wire_hip_buf.
 
index d11431169497a9c7ade44322a603232606dae25d..df1a0ca218a1bcf1e6e631ce9383f33739bc5a01 100644 (file)
@@ -3102,7 +3102,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
        struct timeval now = *sq->outnet->now_tv;
 #ifdef USE_DNSTAP
        struct pending* p = (struct pending*)sq->pending;
-       struct port_if* pi = p->pc->pif;
 #endif
 
        sq->pending = NULL; /* removed after callback */
@@ -3144,14 +3143,16 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
        /*
         * sending src (local service)/dst (upstream) addresses over DNSTAP
         */
-       if(error == NETEVENT_NOERROR && outnet->dtenv &&
-          (outnet->dtenv->log_resolver_response_messages ||
-           outnet->dtenv->log_forwarder_response_messages)) {
+       if(error == NETEVENT_NOERROR && outnet->dtenv && p->pc &&
+               (outnet->dtenv->log_resolver_response_messages ||
+               outnet->dtenv->log_forwarder_response_messages)) {
                log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen);
-               log_addr(VERB_ALGO, "to local addr", &pi->addr, pi->addrlen);
-               dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &pi->addr, c->type,
-                 sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen,
-                 &sq->last_sent_time, sq->outnet->now_tv, c->buffer);
+               log_addr(VERB_ALGO, "to local addr", &p->pc->pif->addr,
+                       p->pc->pif->addrlen);
+               dt_msg_send_outside_response(outnet->dtenv, &sq->addr,
+                       &p->pc->pif->addr, c->type, sq->zone, sq->zonelen,
+                       sq->qbuf, sq->qbuflen, &sq->last_sent_time,
+                       sq->outnet->now_tv, c->buffer);
        }
 #endif
        if( (sq->status == serviced_query_UDP_EDNS