diff --git a/src/internal.c b/src/internal.c index 8df8a3793..1aa36de28 100644 --- a/src/internal.c +++ b/src/internal.c @@ -5873,9 +5873,10 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) #endif #if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU) ssl->dtlsMtuSz = ctx->dtlsMtuSz; - /* Add 100 bytes so that we can operate with slight difference + /* Add some bytes so that we can operate with slight difference * in set MTU size on each peer */ - ssl->dtls_expected_rx = ssl->dtlsMtuSz + 100; + ssl->dtls_expected_rx = ssl->dtlsMtuSz + + DTLS_MTU_ADDITIONAL_READ_BUFFER; #else ssl->dtls_expected_rx = MAX_MTU; #endif diff --git a/src/ssl.c b/src/ssl.c index 317b43947..43fff24c9 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -2066,14 +2066,16 @@ static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, int sz, int peek) #ifdef WOLFSSL_DTLS if (ssl->options.dtls) { - ssl->dtls_expected_rx = max(sz + 100, MAX_MTU); + ssl->dtls_expected_rx = max(sz + DTLS_MTU_ADDITIONAL_READ_BUFFER, + MAX_MTU); #ifdef WOLFSSL_SCTP if (ssl->options.dtlsSctp) #endif #if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU) - /* Add 100 bytes so that we can operate with slight difference + /* Add some bytes so that we can operate with slight difference * in set MTU size on each peer */ - ssl->dtls_expected_rx = max(ssl->dtls_expected_rx, ssl->dtlsMtuSz + 100); + ssl->dtls_expected_rx = max(ssl->dtls_expected_rx, + ssl->dtlsMtuSz + DTLS_MTU_ADDITIONAL_READ_BUFFER); #endif } #endif diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 1a456b65f..9b3870649 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -1353,6 +1353,9 @@ enum Misc { DTLS_EXPORT_SPC_SZ = 16, /* amount of bytes used from CipherSpecs */ DTLS_EXPORT_LEN = 2, /* 2 bytes for length and protocol */ DTLS_EXPORT_IP = 46, /* max ip size IPv4 mapped IPv6 */ + DTLS_MTU_ADDITIONAL_READ_BUFFER = 100, /* Additional bytes to read so that + * we can work with a peer that has + * a slightly different MTU than us. */ MAX_EXPORT_BUFFER = 514, /* max size of buffer for exporting */ MAX_EXPORT_STATE_BUFFER = (DTLS_EXPORT_MIN_KEY_SZ) + (3 * DTLS_EXPORT_LEN), /* max size of buffer for exporting state */