]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: stream: Properly handle destructive client connection upgrades
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 16 Jun 2022 14:24:16 +0000 (16:24 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 17 Jun 2022 11:25:02 +0000 (13:25 +0200)
commitb68f77d62602ba3d047ff715804001a77ed89feb
tree01072d68cb4905c32acf43abe0f2f376891535bc
parent9b3aa63df776bef42a929b7c585ae33a61a75f41
BUG/MEDIUM: stream: Properly handle destructive client connection upgrades

When the protocol is changed for a client connection at the stream level
(from TCP to H1/H2), there are two cases. The stream may be reused or
not. The first case, when the stream is reused is working. The second one is
buggy since the conn-stream refactoring and leads to a crash.

In this case, the new mux don't reuse the stream. It must be silently
aborted. However, its front stream connector is still referencing the
connection. So it must be detached. But it must be performed in two stages,
to be sure to not loose the context for the upgrade and to be able to
rollback on error. So now, before the upgrade, we prepare to detach the
stconn and it is finally detached if the upgrade succeeds. There is a trick
here. Because we pretend the stconn is detached but its state is preserved.

This patch must be backported to 2.6.
include/haproxy/stconn.h
src/stconn.c
src/stream.c