mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 00:57:02 +02:00
BUG/MEDIUM: stream: Be sure to support splicing at the mux level to enable it
Despite the addition of the mux layer, no change have been made on how to enable the TCP splicing on process_stream(). We still check if transport layer on both sides support the splicing, but we don't check the muxes support. So it is possible to start to splice data with an unencrypted H2 connection on a side and an H1 connection on the other. This leads to a freeze of the stream until a client or server timeout is reached. This patch fixed a part of the issue #356. It must be backported as far as 1.8.
This commit is contained in:
parent
9fa40c46df
commit
276c1e0533
12
src/stream.c
12
src/stream.c
@ -2321,8 +2321,10 @@ struct task *process_stream(struct task *t, void *context, unsigned short state)
|
||||
if (!(req->flags & (CF_KERN_SPLICING|CF_SHUTR)) &&
|
||||
req->to_forward &&
|
||||
(global.tune.options & GTUNE_USE_SPLICE) &&
|
||||
(objt_cs(si_f->end) && __objt_cs(si_f->end)->conn->xprt && __objt_cs(si_f->end)->conn->xprt->rcv_pipe) &&
|
||||
(objt_cs(si_b->end) && __objt_cs(si_b->end)->conn->xprt && __objt_cs(si_b->end)->conn->xprt->snd_pipe) &&
|
||||
(objt_cs(si_f->end) && __objt_cs(si_f->end)->conn->xprt && __objt_cs(si_f->end)->conn->xprt->rcv_pipe &&
|
||||
__objt_cs(si_f->end)->conn->mux && __objt_cs(si_f->end)->conn->mux->rcv_pipe) &&
|
||||
(objt_cs(si_b->end) && __objt_cs(si_b->end)->conn->xprt && __objt_cs(si_b->end)->conn->xprt->snd_pipe &&
|
||||
__objt_cs(si_b->end)->conn->mux && __objt_cs(si_b->end)->conn->mux->snd_pipe) &&
|
||||
(pipes_used < global.maxpipes) &&
|
||||
(((sess->fe->options2|s->be->options2) & PR_O2_SPLIC_REQ) ||
|
||||
(((sess->fe->options2|s->be->options2) & PR_O2_SPLIC_AUT) &&
|
||||
@ -2508,8 +2510,10 @@ struct task *process_stream(struct task *t, void *context, unsigned short state)
|
||||
if (!(res->flags & (CF_KERN_SPLICING|CF_SHUTR)) &&
|
||||
res->to_forward &&
|
||||
(global.tune.options & GTUNE_USE_SPLICE) &&
|
||||
(objt_cs(si_f->end) && __objt_cs(si_f->end)->conn->xprt && __objt_cs(si_f->end)->conn->xprt->snd_pipe) &&
|
||||
(objt_cs(si_b->end) && __objt_cs(si_b->end)->conn->xprt && __objt_cs(si_b->end)->conn->xprt->rcv_pipe) &&
|
||||
(objt_cs(si_f->end) && __objt_cs(si_f->end)->conn->xprt && __objt_cs(si_f->end)->conn->xprt->snd_pipe &&
|
||||
__objt_cs(si_f->end)->conn->mux && __objt_cs(si_f->end)->conn->mux->snd_pipe) &&
|
||||
(objt_cs(si_b->end) && __objt_cs(si_b->end)->conn->xprt && __objt_cs(si_b->end)->conn->xprt->rcv_pipe &&
|
||||
__objt_cs(si_b->end)->conn->mux && __objt_cs(si_b->end)->conn->mux->rcv_pipe) &&
|
||||
(pipes_used < global.maxpipes) &&
|
||||
(((sess->fe->options2|s->be->options2) & PR_O2_SPLIC_RTR) ||
|
||||
(((sess->fe->options2|s->be->options2) & PR_O2_SPLIC_AUT) &&
|
||||
|
Loading…
Reference in New Issue
Block a user