From: Vladimír Čunát Date: Tue, 3 Nov 2020 11:34:04 +0000 (+0100) Subject: daemon/worker: allow dropping even on non-XDP X-Git-Tag: v5.2.0~1^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1bd702919e16af3bfc9a08c7f9ff658b35d88a28;p=thirdparty%2Fknot-resolver.git daemon/worker: allow dropping even on non-XDP During testing it was sending me SERVFAIL, which was weird. There's no use case so far, but if it was decided to drop the answer, it should really happen regardless of the transport. --- diff --git a/daemon/worker.c b/daemon/worker.c index 2b13ef24f..17292a93a 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1265,8 +1265,6 @@ static int xdp_push(struct qr_task *task, const uv_handle_t *src_handle) { #if ENABLE_XDP struct request_ctx *ctx = task->ctx; - if (unlikely(ctx->req.answer == NULL)) /* meant to be dropped */ - return kr_ok(); knot_xdp_msg_t msg; const struct sockaddr *ip_from = &ctx->source.dst_addr.ip; const struct sockaddr *ip_to = &ctx->source.addr.ip; @@ -1307,6 +1305,11 @@ static int qr_task_finalize(struct qr_task *task, int state) return state == KR_STATE_DONE ? kr_ok() : kr_error(EIO); } + if (unlikely(ctx->req.answer == NULL)) { /* meant to be dropped */ + (void) qr_task_on_send(task, NULL, kr_ok()); + return kr_ok(); + } + if (session_flags(source_session)->closing || ctx->source.addr.ip.sa_family == AF_UNSPEC) return kr_error(EINVAL);