When requeueing deferred URXEs retain the order
authorMatt Caswell <matt@openssl.org>
Fri, 20 Oct 2023 11:33:25 +0000 (12:33 +0100)
committerMatt Caswell <matt@openssl.org>
Tue, 24 Oct 2023 16:35:54 +0000 (17:35 +0100)
If a URXE cannot be processed yet then we add it to the urx_deferred list.
Later, when they can be processed, we requeue them in the urx_pending list.

We must not reverse the order when doing so. We want to process the URXEs
in the order that they were received.

Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22452)

ssl/quic/quic_record_rx.c
test/recipes/75-test_quicapi_data/ssltraceref-zlib.txt
test/recipes/75-test_quicapi_data/ssltraceref.txt

index c75b4e93be0d1b52724a058a0946983d3f74b99c..4d0493baff6e8e640a9c2602da8ca6efc2e93e7e 100644 (file)
@@ -280,7 +280,7 @@ static void qrx_requeue_deferred(OSSL_QRX *qrx)
 
     while ((e = ossl_list_urxe_head(&qrx->urx_deferred)) != NULL) {
         ossl_list_urxe_remove(&qrx->urx_deferred, e);
-        ossl_list_urxe_insert_head(&qrx->urx_pending, e);
+        ossl_list_urxe_insert_tail(&qrx->urx_pending, e);
     }
 }
 
index e8bdee624fbcc4154ddcc89bb206cae0b25406d4..68d3fd86ecf4c49bf3a4791dcd195242cd16a918 100644 (file)
@@ -127,21 +127,21 @@ Received Packet
   Version: 0x00000001
   Destination Conn Id: <zero length id>
   Source Conn Id: 0x????????????????
-  Payload length: 213
-  Packet Number: 0x00000001
+  Payload length: 1042
+  Packet Number: 0x00000000
 Received Packet
   Packet Type: Handshake
   Version: 0x00000001
   Destination Conn Id: <zero length id>
   Source Conn Id: 0x????????????????
-  Payload length: 1042
-  Packet Number: 0x00000000
-Received Frame: Crypto
-    Offset: 1022
-    Len: 192
+  Payload length: 213
+  Packet Number: 0x00000001
 Received Frame: Crypto
     Offset: 0
     Len: 1022
+Received Frame: Crypto
+    Offset: 1022
+    Len: 192
 Received TLS Record
 Header:
   Version = TLS 1.2 (0x303)
index 6b64d0652e9b1f90ca9c3b9194be6e1b9822e9d5..6a6828ec01eba3c43f6d56ef0fe0b0ddfc5582a5 100644 (file)
@@ -125,21 +125,21 @@ Received Packet
   Version: 0x00000001
   Destination Conn Id: <zero length id>
   Source Conn Id: 0x????????????????
-  Payload length: 213
-  Packet Number: 0x00000001
+  Payload length: 1042
+  Packet Number: 0x00000000
 Received Packet
   Packet Type: Handshake
   Version: 0x00000001
   Destination Conn Id: <zero length id>
   Source Conn Id: 0x????????????????
-  Payload length: 1042
-  Packet Number: 0x00000000
-Received Frame: Crypto
-    Offset: 1022
-    Len: 192
+  Payload length: 213
+  Packet Number: 0x00000001
 Received Frame: Crypto
     Offset: 0
     Len: 1022
+Received Frame: Crypto
+    Offset: 1022
+    Len: 192
 Received TLS Record
 Header:
   Version = TLS 1.2 (0x303)