From 6699f816383d89f0ea12c323639249003a5f8b5c Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Tue, 15 Apr 2025 07:54:19 +0200 Subject: [PATCH] BUG/MINOR: http-ana: Properly detect client abort when forwarding the response During the response payload forwarding, if the back SC is closed, we try to figure out if it is because of a client abort or a server abort. However, the condition was not accurrate, especially when abortonclose option is set. Because of this issue, a server abort may be reported (SD-- in logs) instead of a client abort (CD-- in logs). The right way to detect a client abort when we try to forward the response is to test if the back SC was shut down (SC_FL_SHUT_DOWN flag set) AND aborted (SC_FL_ABRT_DONE flag set). When these both flags are set, it means the back connection underwent the shutdown, which should be converted to a client abort at this stage. This patch should be backported as far as 2.8. It should fix last strange SD report in the issue #2749. (cherry picked from commit c672b2a297158bcd673feab2fd366709f9fc3d4f) [ada: ctx adjt because COUNT_IF counters are still there in 3.1] Signed-off-by: Aurelien DARRAGON (cherry picked from commit d99407770db42ac27f488093e9b419cd0839e48f) Signed-off-by: Aurelien DARRAGON --- src/http_ana.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/http_ana.c b/src/http_ana.c index 3ed70a2..3507199 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -2159,8 +2159,7 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit * server abort. */ if (msg->msg_state < HTTP_MSG_ENDING && (s->scb->flags & (SC_FL_EOS|SC_FL_ABRT_DONE))) { - if ((s->scf->flags & SC_FL_ABRT_DONE) && - (s->scb->flags & SC_FL_SHUT_DONE)) + if ((s->scb->flags & (SC_FL_ABRT_DONE|SC_FL_SHUT_DONE)) == (SC_FL_ABRT_DONE|SC_FL_SHUT_DONE)) goto return_cli_abort; /* If we have some pending data, we continue the processing */ if (htx_is_empty(htx)) -- 1.7.10.4