mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MINOR: quic: Unitialized mux context upon Client Hello message receipt.
If we let the connection packet handler task (quic_conn_io_cb) process the first client Initial packet which contain the TLS Client Hello message before the mux context is initialized, quic_mux_transport_params_update() makes haproxy crash. ->start xprt callback already wakes up this task and is called after all the connection contexts are initialized. So, this patch do not wakes up quic_conn_io_cb() if the mux context is not initialized (this was already the case for the connection context (conn_ctx)).
This commit is contained in:
parent
0eb60c5b4d
commit
01abc4612b
@ -741,7 +741,7 @@ static int qc_init(struct connection *conn, struct proxy *prx,
|
|||||||
LIST_INIT(&qcc->buf_wait.list);
|
LIST_INIT(&qcc->buf_wait.list);
|
||||||
MT_LIST_INIT(&qcc->qcs_rxbuf_wlist);
|
MT_LIST_INIT(&qcc->qcs_rxbuf_wlist);
|
||||||
|
|
||||||
conn->ctx = qcc;
|
HA_ATOMIC_STORE(&conn->ctx, qcc);
|
||||||
|
|
||||||
if (t)
|
if (t)
|
||||||
task_queue(t);
|
task_queue(t);
|
||||||
|
@ -3441,8 +3441,13 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char **buf, const unsigned char *end,
|
|||||||
|
|
||||||
|
|
||||||
TRACE_PROTO("New packet", QUIC_EV_CONN_LPKT, qc->conn, pkt);
|
TRACE_PROTO("New packet", QUIC_EV_CONN_LPKT, qc->conn, pkt);
|
||||||
if (conn_ctx)
|
/* Wake up the connection packet handler task from here only if all
|
||||||
/* Wake the tasklet of the QUIC connection packet handler. */
|
* the contexts have been initialized, especially the mux context
|
||||||
|
* conn_ctx->conn->ctx. Note that this is ->start xprt callback which
|
||||||
|
* will start it if these contexts for the connection are not already
|
||||||
|
* initialized.
|
||||||
|
*/
|
||||||
|
if (conn_ctx && HA_ATOMIC_LOAD(&conn_ctx->conn->ctx))
|
||||||
tasklet_wakeup(conn_ctx->wait_event.tasklet);
|
tasklet_wakeup(conn_ctx->wait_event.tasklet);
|
||||||
|
|
||||||
TRACE_LEAVE(QUIC_EV_CONN_LPKT, qc->conn, pkt);
|
TRACE_LEAVE(QUIC_EV_CONN_LPKT, qc->conn, pkt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user