]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: Wrong list_for_each_entry() use when building packets from qc_do_bui...
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 23 Aug 2022 09:42:48 +0000 (11:42 +0200)
committerFrédéric Lécaille <flecaille@haproxy.com>
Tue, 23 Aug 2022 10:06:40 +0000 (12:06 +0200)
This is list_for_each_entry_safe() which must be used if we want to delete elements
inside its code block. This could explain that some frames which were not built were added
to packets with a NULL ->pkt member.

Thank you to Tristan for having reported this issue through backtraces in GH #1808

Must be backported to 2.6.

src/xprt_quic.c

index 0a0ab358cbfe82e2188d5eda77f11aaf30ac358f..4f2a2ea05043ab549272f3e9e8f02ba471f5bcf9 100644 (file)
@@ -6830,7 +6830,8 @@ static int qc_do_build_pkt(unsigned char *pos, const unsigned char *end,
 
        /* Ack-eliciting frames */
        if (!LIST_ISEMPTY(&frm_list)) {
-               list_for_each_entry(cf, &frm_list, list) {
+               struct quic_frame *tmp_cf;
+               list_for_each_entry_safe(cf, tmp_cf, &frm_list, list) {
                        unsigned char *spos = pos;
 
                        if (!qc_build_frm(&spos, end, cf, pkt, qc)) {