]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: restore QUIC_HP_SAMPLE_LEN constant
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 8 Sep 2025 12:42:26 +0000 (14:42 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 8 Sep 2025 12:49:03 +0000 (14:49 +0200)
The below patch fixes padding emission for small packets, which is
required to ensure that header protection removal can be performed by
the recipient.

  commit d7dea408c64c327cab6aebf4ccad93405b675565
  BUG/MINOR: quic: too short PADDING frame for too short packets

In addition to the proper fix, constant QUIC_HP_SAMPLE_LEN was removed
and replaced by QUIC_TLS_TAG_LEN. However, it still makes sense to have
a dedicated constant which represent the size of the sample used for
header protection. Thus, this patch restores it.

Special instructions for backport : above patch mentions that no
backport is needed. However, this is incorrect, as bug is introduced by
another patch scheduled for backport up to 2.6. Thus, it is first
mandatory to schedule d7dea408c64c327cab6aebf4ccad93405b675565 after it.
Then, this patch can also be used for the sake of code clarity.

include/haproxy/quic_conn-t.h
src/quic_tx.c

index 4100e3061f30695a2faef37a35fbe8703aacb150..75493915d5345e6121aea0afd25a21f0ef031fe1 100644 (file)
@@ -145,6 +145,9 @@ enum quic_pkt_type {
 #define QUIC_PACKET_PNL_BITMASK      0x03
 #define QUIC_PACKET_PN_MAXLEN        4
 
+/* TLS algo supported by QUIC uses a 16-bytes sample for HP. */
+#define QUIC_HP_SAMPLE_LEN           16
+
 /*
  *  0                   1                   2                   3
  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
index 7a2da7eed8fd4a40435bb800f9a7171924163b95..10a6c5e65405e051f3c28a62f302c0190fa486d5 100644 (file)
@@ -1998,8 +1998,8 @@ static int qc_do_build_pkt(unsigned char *pos, const unsigned char *end,
         * Note that from here, <len> includes <*pn_len>, the total frame lenghts,
         * and QUIC_TLS_TAG_LEN(16).
         */
-       if (len < QUIC_PACKET_PN_MAXLEN + QUIC_TLS_TAG_LEN) {
-               padding_len = QUIC_PACKET_PN_MAXLEN + QUIC_TLS_TAG_LEN - len;
+       if (len < QUIC_PACKET_PN_MAXLEN + QUIC_HP_SAMPLE_LEN) {
+               padding_len = QUIC_PACKET_PN_MAXLEN + QUIC_HP_SAMPLE_LEN - len;
                TRACE_PRINTF(TRACE_LEVEL_DEVELOPER, QUIC_EV_CONN_PHPKTS, qc, 0, 0, 0,
                             "adding padding pn=%llu padding_len=%zu *pn_len=%zu"
                             " len=%zu len_frms=%zu",