diff --git a/src/quic_sock.c b/src/quic_sock.c index 875779d913..bb6cb6150d 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -178,7 +178,7 @@ void quic_sock_fd_iocb(int fd) struct rxbuf *rxbuf; struct buffer *buf; struct listener *l = objt_listener(fdtab[fd].owner); - struct quic_transport_params *params = &l->bind_conf->quic_params; + struct quic_transport_params *params; /* Source address */ struct sockaddr_storage saddr = {0}; size_t max_sz; @@ -186,11 +186,18 @@ void quic_sock_fd_iocb(int fd) BUG_ON(!l); + if (!l) + return; + if (!(fdtab[fd].state & FD_POLL_IN) || !fd_recv_ready(fd)) return; rxbuf = MT_LIST_POP(&l->rx.rxbuf_list, typeof(rxbuf), mt_list); buf = &rxbuf->buf; + if (!buf) + goto out; + + params = &l->bind_conf->quic_params; max_sz = params->max_udp_payload_size; if (b_contig_space(buf) < max_sz) { /* Note that when we enter this function, is always empty */ diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 09722c063a..0fdc7aa829 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -3309,6 +3309,7 @@ static ssize_t qc_srv_pkt_rcv(unsigned char **buf, const unsigned char *end, struct quic_enc_level *qel; qc = NULL; + qel = NULL; TRACE_ENTER(QUIC_EV_CONN_SPKT); if (end <= *buf) goto err; @@ -3461,6 +3462,7 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char **buf, const unsigned char *end, qc = NULL; conn_ctx = NULL; + qel = NULL; TRACE_ENTER(QUIC_EV_CONN_LPKT, NULL, pkt); if (end <= *buf) goto err;