From: Christopher Faulet Date: Mon, 16 Oct 2023 17:30:02 +0000 (+0200) Subject: BUG/MEDIUM: mux-h2: Don't report an error on shutr if a shutw is pending X-Git-Tag: v2.9-dev8~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1fdfa4f9ba047aad76e1c7b4e894edf966f0a724;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: mux-h2: Don't report an error on shutr if a shutw is pending If a shutw is blocked because the mux is full or busy, we must defer the shutr. In this case, the H2 stream is not in H2_SS_CLOSED state because the shutw is also deferred. If the shutr is performed, this will lead to a error. Concretly, when the mux is unblocked, a RST_STREAM is sent while in some cases, an empty DATA frame with ES flag set could be sent. This patch should be backported to all stable versions. --- diff --git a/src/mux_h2.c b/src/mux_h2.c index 67501738d7..a8f7792e94 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4663,6 +4663,9 @@ static void h2_do_shutr(struct h2s *h2s) TRACE_ENTER(H2_EV_STRM_SHUT, h2c->conn, h2s); + if (h2s->flags & H2_SF_WANT_SHUTW) + goto add_to_list; + /* a connstream may require us to immediately kill the whole connection * for example because of a "tcp-request content reject" rule that is * normally used to limit abuse. In this case we schedule a goaway to