Commit 2fbe637d98 for openssl.org
commit 2fbe637d98b77252e65ff4c367f56210c9a026e6
Author: Matt Caswell <matt@openssl.foundation>
Date: Tue Jun 23 11:55:43 2026 +0100
ssl/record: remove dead DTLS processed_rcds record queue
rl->processed_rcds and the functions that serviced it
(dtls_copy_rlayer_record(), dtls_retrieve_rlayer_buffered_record())
were unreachable: nothing in the codebase ever inserted a record into
that queue, so the only consumer of it - the check at the top of
dtls_get_more_records() - always saw an empty queue. The real
mechanism for handing buffered next-epoch records to the next epoch's
record layer is the unrelated forwarding code in dtls_free(), which
pushes the raw bytes from rl->unprocessed_rcds onto rl->next.
Assisted-by: Claude:claude-sonnet-4-6
Reviewed-by: Milan Broz <mbroz@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
Reviewed-by: Andrew Dinh <andrewd@openssl.org>
Merge-date: Mon Aug 24 15:37:52 2026
diff --git a/ssl/record/methods/dtls_meth.c b/ssl/record/methods/dtls_meth.c
index f8b1bf5fb7..15ac0f2030 100644
--- a/ssl/record/methods/dtls_meth.c
+++ b/ssl/record/methods/dtls_meth.c
@@ -326,44 +326,6 @@ static int dtls_rlayer_buffer_record(OSSL_RECORD_LAYER *rl, struct pqueue_st *qu
return 1;
}
-/* copy buffered record into OSSL_RECORD_LAYER structure */
-static int dtls_copy_rlayer_record(OSSL_RECORD_LAYER *rl, pitem *item)
-{
- DTLS_RLAYER_RECORD_DATA *rdata;
-
- rdata = (DTLS_RLAYER_RECORD_DATA *)item->data;
-
- ossl_tls_buffer_release(&rl->rbuf);
-
- rl->packet = rdata->packet;
- rl->packet_length = rdata->packet_length;
- memcpy(&rl->rbuf, &(rdata->rbuf), sizeof(TLS_BUFFER));
- memcpy(&rl->rrec[0], &(rdata->rrec), sizeof(TLS_RL_RECORD));
-
- /* Set proper sequence number for mac calculation */
- memcpy(&(rl->sequence[2]), &(rdata->packet[5]), 6);
-
- return 1;
-}
-
-static int dtls_retrieve_rlayer_buffered_record(OSSL_RECORD_LAYER *rl,
- struct pqueue_st *queue)
-{
- pitem *item;
-
- item = pqueue_pop(queue);
- if (item) {
- dtls_copy_rlayer_record(rl, item);
-
- OPENSSL_free(item->data);
- pitem_free(item);
-
- return 1;
- }
-
- return 0;
-}
-
/*-
* Call this to get a new input record.
* It will return <= 0 if more data is needed, normally due to an error
@@ -397,12 +359,6 @@ int dtls_get_more_records(OSSL_RECORD_LAYER *rl)
}
again:
- /* if we're renegotiating, then there may be buffered records */
- if (dtls_retrieve_rlayer_buffered_record(rl, rl->processed_rcds)) {
- rl->num_recs = 1;
- return OSSL_RECORD_RETURN_SUCCESS;
- }
-
/* get something from the wire */
/* check if we have the header */
@@ -611,16 +567,6 @@ static int dtls_free(OSSL_RECORD_LAYER *rl)
pqueue_free(rl->unprocessed_rcds);
}
- if (rl->processed_rcds != NULL) {
- while ((item = pqueue_pop(rl->processed_rcds)) != NULL) {
- rdata = (DTLS_RLAYER_RECORD_DATA *)item->data;
- OPENSSL_free(rdata->rbuf.buf);
- OPENSSL_free(item->data);
- pitem_free(item);
- }
- pqueue_free(rl->processed_rcds);
- }
-
return tls_free(rl) && ret;
}
@@ -650,10 +596,8 @@ dtls_new_record_layer(OSSL_LIB_CTX *libctx, const char *propq, int vers,
return ret;
(*retrl)->unprocessed_rcds = pqueue_new();
- (*retrl)->processed_rcds = pqueue_new();
- if ((*retrl)->unprocessed_rcds == NULL
- || (*retrl)->processed_rcds == NULL) {
+ if ((*retrl)->unprocessed_rcds == NULL) {
dtls_free(*retrl);
*retrl = NULL;
ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
diff --git a/ssl/record/methods/recmethod_local.h b/ssl/record/methods/recmethod_local.h
index 1bfea26631..d9d4d86391 100644
--- a/ssl/record/methods/recmethod_local.h
+++ b/ssl/record/methods/recmethod_local.h
@@ -343,9 +343,8 @@ struct ossl_record_layer_st {
size_t taglen;
- /* DTLS received handshake records (processed and unprocessed) */
+ /* DTLS received handshake records awaiting the next epoch */
struct pqueue_st *unprocessed_rcds;
- struct pqueue_st *processed_rcds;
/* records being received in the current epoch */
DTLS_BITMAP bitmap;
@@ -373,7 +372,6 @@ struct ossl_record_layer_st {
typedef struct dtls_rlayer_record_data_st {
unsigned char *packet;
size_t packet_length;
- TLS_BUFFER rbuf;
TLS_RL_RECORD rrec;
} DTLS_RLAYER_RECORD_DATA;