]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DEBUG: stream-int: Check CS_FL_WANT_ROOM is not set with an empty input buffer
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 21 Feb 2022 15:12:00 +0000 (16:12 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 21 Feb 2022 15:29:00 +0000 (16:29 +0100)
In si_cs_recv(), the mux must never set CS_FL_WANT_ROOM flag on the
conn-stream if the input buffer is empty and nothing was copied. It is
important because, there is nothing the app layer can do in this case to
make some room. If this happens, this will most probably lead to a ping-pong
loop between the mux and the stream.

With this BUG_ON(), it will be easier to spot such bugs.

src/stream_interface.c

index b78c3bc48e5117fbb6c8a19eff9f6bc304d15309..c32d566c5f69ed5afca9127f8a0d080f9ace59a1 100644 (file)
@@ -1377,6 +1377,11 @@ int si_cs_recv(struct conn_stream *cs)
                ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, cur_flags);
 
                if (cs->flags & CS_FL_WANT_ROOM) {
+                       /* CS_FL_WANT_ROOM must not be reported if the channel's
+                        * buffer is empty.
+                        */
+                       BUG_ON(c_empty(ic));
+
                        si_rx_room_blk(si);
                        /* Add READ_PARTIAL because some data are pending but
                         * cannot be xferred to the channel