]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
ddns/quic: fixes in error handling and rare situations
authorLibor Peltan <libor.peltan@nic.cz>
Mon, 18 Dec 2023 09:16:18 +0000 (10:16 +0100)
committerLibor Peltan <libor.peltan@nic.cz>
Mon, 18 Dec 2023 09:16:18 +0000 (10:16 +0100)
src/knot/events/handlers/update.c
src/knot/query/quic-requestor.c
src/knot/query/requestor.c

index 1e1e4a5b3dde1db9bce24c8b6d73e4b21d86671a..558599da03a7bf4f970e147915045aaa109c1341 100644 (file)
@@ -404,22 +404,13 @@ static void send_update_response(conf_t *conf, zone_t *zone, knot_request_t *req
        }
 }
 
-static void free_request(knot_request_t *req)
-{
-       close(req->fd);
-       knot_pkt_free(req->query);
-       knot_pkt_free(req->resp);
-       dnssec_binary_free(&req->sign.tsig_key.secret);
-       free(req);
-}
-
 static void send_update_responses(conf_t *conf, zone_t *zone, list_t *updates)
 {
        ptrnode_t *node, *nxt;
        WALK_LIST_DELSAFE(node, nxt, *updates) {
                knot_request_t *req = node->d;
                send_update_response(conf, zone, req);
-               free_request(req);
+               knot_request_free(req, NULL);
        }
        ptrlist_free(updates, NULL);
 }
index 0cfb8ec400ad48dd0e2d77359c5559e208fab4e2..a026d4d338ba7348aef99d862a0236a85c75f9e5 100644 (file)
@@ -63,6 +63,7 @@ static int quic_exchange(knot_quic_conn_t *conn, knot_quic_reply_t *r, int timeo
                int64_t quic_timeout_ms = knot_quic_conn_next_timeout(conn);
                quic_timeout_ms = MIN(quic_timeout_ms, timeout_remain);
                quic_timeout_ms = MIN(quic_timeout_ms, timeout_ms / 2);
+               quic_timeout_ms = MAX(quic_timeout_ms, 1);
 
                r->in_payload->iov_len = QUIC_BUF_SIZE;
 
index 436f009f746d849a1b691e12588989519f9bc2b2..041549298699e36456911fdafdd9809ecc5ff308 100644 (file)
@@ -282,6 +282,7 @@ void knot_request_free(knot_request_t *request, knot_mm_t *mm)
        }
        knot_pkt_free(request->query);
        knot_pkt_free(request->resp);
+       dnssec_binary_free(&request->sign.tsig_key.secret);
        tsig_cleanup(&request->tsig);
 
        mm_free(mm, request);