Skip to content

Commit

Permalink
BUG/MEDIUM: stream: Prevent mux upgrades if client connection is no l…
Browse files Browse the repository at this point in the history
…onger ready

If an early error occurred on the client connection, we must prevent any
multiplexer upgrades. Indeed, it is unexpected for a mux to be initialized
with no xprt. On a normal workflow it is impossible. So it is not an
issue. But if a mux upgrade is performed at the stream level, an early error
on the connection may have already been handled by the previous mux and the
connection may be already fully closed. If the mux upgrade is still
performed, a crash can be experienced.

It is possible to have a crash with an implicit TCP>HTTP upgrade if there is no
data in the input buffer. But it is also possible to get a crash with an
explicit "switch-mode http" rule.

It must be backported to all stable versions. In 2.2, the patch must be
applied directly in stream_set_backend() function.
  • Loading branch information
capflam committed Aug 28, 2024
1 parent 4ef5251 commit e481240
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -1489,6 +1489,10 @@ int stream_set_http_mode(struct stream *s, const struct mux_proto_list *mux_prot
return 0;

conn = sc_conn(sc);

if (!sc_conn_ready(sc))
return 0;

if (conn) {
se_have_more_data(s->scf->sedesc);
/* Make sure we're unsubscribed, the the new
Expand Down

0 comments on commit e481240

Please sign in to comment.