Skip to content

Commit 8994612

Browse files
committed
Remove dtls_expected_rx and use expected values directly
We should always read MTU + EXTRA so that we capture the entire message and are able to correctly decrypt the entire datagram. A smaller MTU also breaks larger handshake messages sent during a connection like secure renegotiation in DTLS 1.2 (confirmed) and post-handshake messages in DTLS 1.3 (suspected).
1 parent 80c8c62 commit 8994612

3 files changed

Lines changed: 14 additions & 37 deletions

File tree

src/internal.c

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7182,13 +7182,7 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup)
71827182
#endif
71837183
#if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)
71847184
ssl->dtlsMtuSz = ctx->dtlsMtuSz;
7185-
ssl->dtls_expected_rx = ssl->dtlsMtuSz;
7186-
#else
7187-
ssl->dtls_expected_rx = MAX_MTU;
71887185
#endif
7189-
/* Add some bytes so that we can operate with slight difference
7190-
* in set MTU size on each peer */
7191-
ssl->dtls_expected_rx += DTLS_MTU_ADDITIONAL_READ_BUFFER;
71927186
ssl->dtls_timeout_init = DTLS_TIMEOUT_INIT;
71937187
ssl->dtls_timeout_max = DTLS_TIMEOUT_MAX;
71947188
ssl->dtls_timeout = ssl->dtls_timeout_init;
@@ -10599,26 +10593,20 @@ int CheckAvailableSize(WOLFSSL *ssl, int size)
1059910593

1060010594
#ifdef WOLFSSL_DTLS
1060110595
if (ssl->options.dtls) {
10602-
if (size + ssl->buffers.outputBuffer.length >
1060310596
#if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)
10604-
ssl->dtlsMtuSz
10597+
word32 mtu = (word32)ssl->dtlsMtuSz;
1060510598
#else
10606-
ssl->dtls_expected_rx
10599+
word32 mtu = MAX_MTU;
1060710600
#endif
10608-
) {
10601+
if ((word32)size + ssl->buffers.outputBuffer.length > mtu) {
1060910602
int ret;
1061010603
WOLFSSL_MSG("CheckAvailableSize() flushing buffer "
1061110604
"to make room for new message");
1061210605
if ((ret = SendBuffered(ssl)) != 0) {
1061310606
return ret;
1061410607
}
1061510608
}
10616-
if (size > (int)
10617-
#if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)
10618-
ssl->dtlsMtuSz
10619-
#else
10620-
ssl->dtls_expected_rx
10621-
#endif
10609+
if ((word32)size > mtu
1062210610
#ifdef WOLFSSL_DTLS13
1062310611
/* DTLS1.3 uses the output buffer to store the full message and deal
1062410612
with fragmentation later in dtls13HandshakeSend() */
@@ -19854,10 +19842,16 @@ static int GetInputData(WOLFSSL *ssl, word32 size)
1985419842
inSz = (int)(size - usedLength); /* from last partial read */
1985519843

1985619844
#ifdef WOLFSSL_DTLS
19857-
if (ssl->options.dtls) {
19858-
if (size < ssl->dtls_expected_rx)
19859-
dtlsExtra = (int)(ssl->dtls_expected_rx - size);
19860-
inSz = ssl->dtls_expected_rx;
19845+
if (ssl->options.dtls && IsDtlsNotSctpMode(ssl)) {
19846+
/* Add DTLS_MTU_ADDITIONAL_READ_BUFFER bytes so that we can operate with
19847+
* slight difference in set MTU size on each peer */
19848+
#ifdef WOLFSSL_DTLS_MTU
19849+
inSz = (word32)ssl->dtlsMtuSz + DTLS_MTU_ADDITIONAL_READ_BUFFER;
19850+
#else
19851+
inSz = MAX_MTU + DTLS_MTU_ADDITIONAL_READ_BUFFER;
19852+
#endif
19853+
if (size < (word32)inSz)
19854+
dtlsExtra = (int)(inSz - size);
1986119855
}
1986219856
#endif
1986319857

src/ssl.c

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3338,22 +3338,6 @@ static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, int sz, int peek)
33383338
errno = 0;
33393339
#endif
33403340

3341-
#ifdef WOLFSSL_DTLS
3342-
if (ssl->options.dtls) {
3343-
ssl->dtls_expected_rx = max(sz + DTLS_MTU_ADDITIONAL_READ_BUFFER,
3344-
MAX_MTU);
3345-
#ifdef WOLFSSL_SCTP
3346-
if (ssl->options.dtlsSctp)
3347-
#endif
3348-
#if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)
3349-
/* Add some bytes so that we can operate with slight difference
3350-
* in set MTU size on each peer */
3351-
ssl->dtls_expected_rx = max(ssl->dtls_expected_rx,
3352-
ssl->dtlsMtuSz + (word32)DTLS_MTU_ADDITIONAL_READ_BUFFER);
3353-
#endif
3354-
}
3355-
#endif
3356-
33573341
ret = ReceiveData(ssl, (byte*)data, sz, peek);
33583342

33593343
#ifdef HAVE_WRITE_DUP

wolfssl/internal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5567,7 +5567,6 @@ struct WOLFSSL {
55675567
DtlsMsg* dtls_tx_msg;
55685568
DtlsMsg* dtls_rx_msg_list;
55695569
void* IOCB_CookieCtx; /* gen cookie ctx */
5570-
word32 dtls_expected_rx;
55715570
#ifdef WOLFSSL_SESSION_EXPORT
55725571
wc_dtls_export dtls_export; /* export function for session */
55735572
#endif

0 commit comments

Comments
 (0)