Amaury Denoyelle
4075ed06e6
BUG/MEDIUM: mux-quic: fix nb_hreq decrement
nb_hreq is a counter on qcc for active HTTP requests. It is incremented for each qcs where a full HTTP request was received. It is decremented when the stream is closed locally : - on HTTP response fully transmitted - on stream reset A bug will occur if a stream is resetted without having processed a full HTTP request. nb_hreq will be decremented whereas it was not incremented. This will lead to a crash when building with DEBUG_STRICT=2. If BUG_ON_HOT are not active, nb_hreq counter will wrap which may break the timeout logic for the connection. This bug was triggered on haproxy.org. It can be reproduced by simulating the reception of a STOP_SENDING frame instead of a STREAM one by patching qc_handle_strm_frm() : + if (quic_stream_is_bidi(strm_frm->id)) + qcc_recv_stop_sending(qc->qcc, strm_frm->id, 0); + //ret = qcc_recv(qc->qcc, strm_frm->id, strm_frm->len, + // strm_frm->offset.key, strm_frm->fin, + // (char *)strm_frm->data); To fix this bug, a qcs is now flagged with a new QC_SF_HREQ_RECV. This is set when the full HTTP request is received. When the stream is closed locally, nb_hreq will be decremented only if this flag was set. This must be backported up to 2.6. (cherry picked from commit afb7b9d8e5a70a741bbb890945fa9ff51dad027d) Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)
Description
Languages
Shell
100%