From: Libor Peltan Date: Mon, 18 Dec 2023 09:16:18 +0000 (+0100) Subject: ddns/quic: fixes in error handling and rare situations X-Git-Tag: v3.4.0~218^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0571f89677c1fedef623c506bdec3ea4f1b22ec2;p=thirdparty%2Fknot-dns.git ddns/quic: fixes in error handling and rare situations --- diff --git a/src/knot/events/handlers/update.c b/src/knot/events/handlers/update.c index 1e1e4a5b3d..558599da03 100644 --- a/src/knot/events/handlers/update.c +++ b/src/knot/events/handlers/update.c @@ -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); } diff --git a/src/knot/query/quic-requestor.c b/src/knot/query/quic-requestor.c index 0cfb8ec400..a026d4d338 100644 --- a/src/knot/query/quic-requestor.c +++ b/src/knot/query/quic-requestor.c @@ -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; diff --git a/src/knot/query/requestor.c b/src/knot/query/requestor.c index 436f009f74..0415492986 100644 --- a/src/knot/query/requestor.c +++ b/src/knot/query/requestor.c @@ -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);