From 44932b6c417e472d25039ec3d7b8bf14e07629bc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 26 Feb 2026 00:18:44 +0100 Subject: [PATCH] BUG/MEDIUM: mux-h2: make sure to always report pending errors to the stream Some stream parsing errors that do not affect the connection result in the parsed block not being transferred from the rx buffer to the channel and not being reported upstream in rcv_buf(), causing the stconn to time out. Let's detect this condition, and propagate term flags anyway since no more progress will be made otherwise. This should be backported at least till 3.2, probably even 2.8. --- src/mux_h2.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mux_h2.c b/src/mux_h2.c index b3a984b27..c6e8c993e 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -7884,7 +7884,13 @@ static size_t h2_rcv_buf(struct stconn *sc, struct buffer *buf, size_t count, in /* tell the stream layer whether there are data left or not */ if (h2s_rxbuf_cnt(h2s)) { + /* Note that parsing errors can also arrive here, we may need + * to propagate errors upstream otherwise no new activity will + * unblock them. + */ se_fl_set(h2s->sd, SE_FL_RCV_MORE | SE_FL_WANT_ROOM); + if (h2s_htx && h2s_htx->flags & HTX_FL_PARSING_ERROR) + h2s_propagate_term_flags(h2c, h2s); BUG_ON_HOT(!buf->data); } else {