summaryrefslogtreecommitdiffstats
path: root/ssl/quic/quic_stream_map.c
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2023-06-06 16:25:10 +0100
committerPauli <pauli@openssl.org>2023-07-17 08:17:57 +1000
commit2cc0e2dddfe02c5fad74524bc975051021413ea5 (patch)
tree7b6f629e1034f932c2af9c8463ebf8f5e28e78cd /ssl/quic/quic_stream_map.c
parentc407d5e568ee0755d0c96c09a832af9760349c00 (diff)
QUIC CONFORMANCE: Validate RESET_STREAM final sizes correctly
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21135)
Diffstat (limited to 'ssl/quic/quic_stream_map.c')
-rw-r--r--ssl/quic/quic_stream_map.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ssl/quic/quic_stream_map.c b/ssl/quic/quic_stream_map.c
index 007bef521c..ccd54edb4e 100644
--- a/ssl/quic/quic_stream_map.c
+++ b/ssl/quic/quic_stream_map.c
@@ -562,8 +562,11 @@ int ossl_quic_stream_map_notify_totally_read(QUIC_STREAM_MAP *qsm,
int ossl_quic_stream_map_notify_reset_recv_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
- uint64_t app_error_code)
+ uint64_t app_error_code,
+ uint64_t final_size)
{
+ uint64_t prev_final_size;
+
switch (qs->recv_state) {
default:
case QUIC_RSTREAM_STATE_NONE:
@@ -573,6 +576,11 @@ int ossl_quic_stream_map_notify_reset_recv_part(QUIC_STREAM_MAP *qsm,
case QUIC_RSTREAM_STATE_RECV:
case QUIC_RSTREAM_STATE_SIZE_KNOWN:
case QUIC_RSTREAM_STATE_DATA_RECVD:
+ if (ossl_quic_stream_recv_get_final_size(qs, &prev_final_size)
+ && prev_final_size != final_size)
+ /* Cannot change previous final size. */
+ return 0;
+
qs->recv_state = QUIC_RSTREAM_STATE_RESET_RECVD;
qs->peer_reset_stream_aec = app_error_code;