Skip to content

Commit 0ac27eb

Browse files
Merge pull request #7005 from SparkiDev/memusage_fix_5
Memory usage fixes: nonce type and TLSX extension free
2 parents 602bd3b + 09d2ba8 commit 0ac27eb

3 files changed

Lines changed: 59 additions & 12 deletions

File tree

src/internal.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8458,12 +8458,22 @@ void FreeHandshakeResources(WOLFSSL* ssl)
84588458
}
84598459
#endif /* HAVE_PK_CALLBACKS */
84608460

8461-
#if defined(HAVE_TLS_EXTENSIONS) && !defined(HAVE_SNI) && \
8462-
!defined(NO_TLS) && !defined(HAVE_ALPN) && !defined(WOLFSSL_POST_HANDSHAKE_AUTH) && \
8461+
#if defined(HAVE_TLS_EXTENSIONS) && !defined(HAVE_SNI) && !defined(NO_TLS) && \
8462+
!defined(HAVE_ALPN) && !defined(WOLFSSL_POST_HANDSHAKE_AUTH) && \
84638463
!defined(WOLFSSL_DTLS_CID)
84648464
/* Some extensions need to be kept for post-handshake querying. */
84658465
TLSX_FreeAll(ssl->extensions, ssl->heap);
84668466
ssl->extensions = NULL;
8467+
#else
8468+
#if !defined(NO_CERTS) && !defined(WOLFSSL_NO_SIGALG)
8469+
TLSX_Remove(&ssl->extensions, TLSX_SIGNATURE_ALGORITHMS, ssl->heap);
8470+
#endif
8471+
TLSX_Remove(&ssl->extensions, TLSX_EC_POINT_FORMATS, ssl->heap);
8472+
TLSX_Remove(&ssl->extensions, TLSX_SUPPORTED_GROUPS, ssl->heap);
8473+
#ifdef WOLFSSL_TLS13
8474+
TLSX_Remove(&ssl->extensions, TLSX_SUPPORTED_VERSIONS, ssl->heap);
8475+
TLSX_Remove(&ssl->extensions, TLSX_KEY_SHARE, ssl->heap);
8476+
#endif
84678477
#endif
84688478

84698479
#ifdef WOLFSSL_STATIC_MEMORY

src/tls.c

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12003,111 +12003,141 @@ void TLSX_FreeAll(TLSX* list, void* heap)
1200312003

1200412004
#if defined(HAVE_RPK)
1200512005
case TLSX_CLIENT_CERTIFICATE_TYPE:
12006+
WOLFSSL_MSG("Client Certificate Type extension free");
12007+
/* nothing to do */
12008+
break;
1200612009
case TLSX_SERVER_CERTIFICATE_TYPE:
12010+
WOLFSSL_MSG("Server Certificate Type extension free");
1200712011
/* nothing to do */
1200812012
break;
1200912013
#endif
1201012014

1201112015
#ifdef HAVE_SNI
1201212016
case TLSX_SERVER_NAME:
12017+
WOLFSSL_MSG("SNI extension free");
1201312018
SNI_FREE_ALL((SNI*)extension->data, heap);
1201412019
break;
1201512020
#endif
1201612021

1201712022
case TLSX_TRUSTED_CA_KEYS:
12023+
WOLFSSL_MSG("Trusted CA Indication extension free");
1201812024
TCA_FREE_ALL((TCA*)extension->data, heap);
1201912025
break;
1202012026

1202112027
case TLSX_MAX_FRAGMENT_LENGTH:
12028+
WOLFSSL_MSG("Max Fragment Length extension free");
1202212029
MFL_FREE_ALL(extension->data, heap);
1202312030
break;
1202412031

1202512032
case TLSX_EXTENDED_MASTER_SECRET:
12033+
WOLFSSL_MSG("Extended Master Secret free");
12034+
/* Nothing to do. */
12035+
break;
1202612036
case TLSX_TRUNCATED_HMAC:
12037+
WOLFSSL_MSG("Truncated HMAC extension free");
1202712038
/* Nothing to do. */
1202812039
break;
1202912040

1203012041
case TLSX_SUPPORTED_GROUPS:
12042+
WOLFSSL_MSG("Supported Groups extension free");
1203112043
EC_FREE_ALL((SupportedCurve*)extension->data, heap);
1203212044
break;
1203312045

1203412046
case TLSX_EC_POINT_FORMATS:
12047+
WOLFSSL_MSG("Point Formats extension free");
1203512048
PF_FREE_ALL((PointFormat*)extension->data, heap);
1203612049
break;
1203712050

1203812051
case TLSX_STATUS_REQUEST:
12052+
WOLFSSL_MSG("Certificate Status Request extension free");
1203912053
CSR_FREE_ALL((CertificateStatusRequest*)extension->data, heap);
1204012054
break;
1204112055

1204212056
case TLSX_STATUS_REQUEST_V2:
12057+
WOLFSSL_MSG("Certificate Status Request v2 extension free");
1204312058
CSR2_FREE_ALL((CertificateStatusRequestItemV2*)extension->data,
1204412059
heap);
1204512060
break;
1204612061

1204712062
case TLSX_RENEGOTIATION_INFO:
12063+
WOLFSSL_MSG("Secure Renegotiation extension free");
1204812064
SCR_FREE_ALL(extension->data, heap);
1204912065
break;
1205012066

1205112067
case TLSX_SESSION_TICKET:
12068+
WOLFSSL_MSG("Session Ticket extension free");
1205212069
WOLF_STK_FREE(extension->data, heap);
1205312070
break;
1205412071

1205512072
case TLSX_APPLICATION_LAYER_PROTOCOL:
12073+
WOLFSSL_MSG("ALPN extension free");
1205612074
ALPN_FREE_ALL((ALPN*)extension->data, heap);
1205712075
break;
1205812076
#if !defined(NO_CERTS) && !defined(WOLFSSL_NO_SIGALG)
1205912077
case TLSX_SIGNATURE_ALGORITHMS:
12078+
WOLFSSL_MSG("Signature Algorithms extension to free");
1206012079
SA_FREE_ALL((SignatureAlgorithms*)extension->data, heap);
1206112080
break;
1206212081
#endif
1206312082
#if defined(HAVE_ENCRYPT_THEN_MAC) && !defined(WOLFSSL_AEAD_ONLY)
1206412083
case TLSX_ENCRYPT_THEN_MAC:
12084+
WOLFSSL_MSG("Encrypt-Then-Mac extension free");
1206512085
break;
1206612086
#endif
1206712087
#ifdef WOLFSSL_TLS13
1206812088
case TLSX_SUPPORTED_VERSIONS:
12089+
WOLFSSL_MSG("Supported Versions extension free");
1206912090
break;
1207012091

1207112092
#ifdef WOLFSSL_SEND_HRR_COOKIE
1207212093
case TLSX_COOKIE:
12094+
WOLFSSL_MSG("Cookie extension freee");
1207312095
CKE_FREE_ALL((Cookie*)extension->data, heap);
1207412096
break;
1207512097
#endif
1207612098

1207712099
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
1207812100
case TLSX_PRE_SHARED_KEY:
12101+
WOLFSSL_MSG("Pre-Shared Key extension free");
1207912102
PSK_FREE_ALL((PreSharedKey*)extension->data, heap);
1208012103
break;
1208112104

1208212105
case TLSX_PSK_KEY_EXCHANGE_MODES:
12106+
WOLFSSL_MSG("PSK Key Exchange Modes extension free");
1208312107
break;
1208412108
#endif
1208512109

1208612110
#ifdef WOLFSSL_EARLY_DATA
1208712111
case TLSX_EARLY_DATA:
12112+
WOLFSSL_MSG("Early Data extension free");
1208812113
break;
1208912114
#endif
1209012115

1209112116
#ifdef WOLFSSL_POST_HANDSHAKE_AUTH
1209212117
case TLSX_POST_HANDSHAKE_AUTH:
12118+
WOLFSSL_MSG("Post-Handshake Authentication extension free");
1209312119
break;
1209412120
#endif
1209512121

1209612122
#if !defined(NO_CERTS) && !defined(WOLFSSL_NO_SIGALG)
1209712123
case TLSX_SIGNATURE_ALGORITHMS_CERT:
12124+
WOLFSSL_MSG("Signature Algorithms extension free");
1209812125
break;
1209912126
#endif
1210012127

1210112128
case TLSX_KEY_SHARE:
12129+
WOLFSSL_MSG("Key Share extension free");
1210212130
KS_FREE_ALL((KeyShareEntry*)extension->data, heap);
1210312131
break;
1210412132
#if !defined(NO_CERTS) && !defined(WOLFSSL_NO_CA_NAMES)
1210512133
case TLSX_CERTIFICATE_AUTHORITIES:
12134+
WOLFSSL_MSG("Certificate Authorities extension free");
1210612135
break;
1210712136
#endif
1210812137
#endif
1210912138
#ifdef WOLFSSL_SRTP
1211012139
case TLSX_USE_SRTP:
12140+
WOLFSSL_MSG("SRTP extension free");
1211112141
SRTP_FREE((TlsxSrtp*)extension->data, heap);
1211212142
break;
1211312143
#endif
@@ -12116,22 +12146,25 @@ void TLSX_FreeAll(TLSX* list, void* heap)
1211612146
case TLSX_KEY_QUIC_TP_PARAMS:
1211712147
FALL_THROUGH;
1211812148
case TLSX_KEY_QUIC_TP_PARAMS_DRAFT:
12149+
WOLFSSL_MSG("QUIC transport parameter free");
1211912150
QTP_FREE((QuicTransportParam*)extension->data, heap);
1212012151
break;
1212112152
#endif
1212212153

1212312154
#ifdef WOLFSSL_DTLS_CID
12124-
case TLSX_CONNECTION_ID:
12125-
CID_FREE((byte*)extension->data, heap);
12126-
break;
12155+
case TLSX_CONNECTION_ID:
12156+
WOLFSSL_MSG("Connection ID extension free");
12157+
CID_FREE((byte*)extension->data, heap);
12158+
break;
1212712159
#endif /* WOLFSSL_DTLS_CID */
1212812160
#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH)
12129-
case TLSX_ECH:
12130-
ECH_FREE((WOLFSSL_ECH*)extension->data, heap);
12131-
break;
12161+
case TLSX_ECH:
12162+
WOLFSSL_MSG("ECH extension free");
12163+
ECH_FREE((WOLFSSL_ECH*)extension->data, heap);
12164+
break;
1213212165
#endif
12133-
default:
12134-
break;
12166+
default:
12167+
break;
1213512168
}
1213612169

1213712170
XFREE(extension, heap, DYNAMIC_TYPE_TLSX);
@@ -12509,6 +12542,7 @@ static int TLSX_Write(TLSX* list, byte* output, byte* semaphore,
1250912542
#endif
1251012543
#ifdef WOLFSSL_SRTP
1251112544
case TLSX_USE_SRTP:
12545+
WOLFSSL_MSG("SRTP extension to write");
1251212546
offset += SRTP_WRITE((TlsxSrtp*)extension->data, output+offset);
1251312547
break;
1251412548
#endif
@@ -12536,12 +12570,14 @@ static int TLSX_Write(TLSX* list, byte* output, byte* semaphore,
1253612570
#endif
1253712571
#ifdef WOLFSSL_DTLS_CID
1253812572
case TLSX_CONNECTION_ID:
12573+
WOLFSSL_MSG("Connection ID extension to write");
1253912574
offset += CID_WRITE((byte*)extension->data, output+offset);
1254012575
break;
1254112576

1254212577
#endif /* WOLFSSL_DTLS_CID */
1254312578
#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH)
1254412579
case TLSX_ECH:
12580+
WOLFSSL_MSG("ECH extension to write");
1254512581
ret = ECH_WRITE((WOLFSSL_ECH*)extension->data,
1254612582
output + offset, &offset);
1254712583
break;
@@ -14655,6 +14691,7 @@ int TLSX_Parse(WOLFSSL* ssl, const byte* input, word16 length, byte msgType,
1465514691
#endif /* HAVE_RPK */
1465614692
#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH)
1465714693
case TLSX_ECH:
14694+
WOLFSSL_MSG("ECH extension received");
1465814695
ret = ECH_PARSE(ssl, input + offset, size, msgType);
1465914696
break;
1466014697
#endif

src/tls13.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2582,7 +2582,7 @@ static int EncryptTls13(WOLFSSL* ssl, byte* output, const byte* input,
25822582
#ifdef CIPHER_NONCE
25832583
if (ssl->encrypt.nonce == NULL) {
25842584
ssl->encrypt.nonce = (byte*)XMALLOC(AEAD_NONCE_SZ,
2585-
ssl->heap, DYNAMIC_TYPE_AES_BUFFER);
2585+
ssl->heap, DYNAMIC_TYPE_CIPHER);
25862586
#ifdef WOLFSSL_CHECK_MEM_ZERO
25872587
if (ssl->encrypt.nonce != NULL) {
25882588
wc_MemZero_Add("EncryptTls13 nonce", ssl->encrypt.nonce,
@@ -2984,7 +2984,7 @@ int DecryptTls13(WOLFSSL* ssl, byte* output, const byte* input, word16 sz,
29842984
#ifdef CIPHER_NONCE
29852985
if (ssl->decrypt.nonce == NULL) {
29862986
ssl->decrypt.nonce = (byte*)XMALLOC(AEAD_NONCE_SZ,
2987-
ssl->heap, DYNAMIC_TYPE_AES_BUFFER);
2987+
ssl->heap, DYNAMIC_TYPE_CIPHER);
29882988
#ifdef WOLFSSL_CHECK_MEM_ZERO
29892989
if (ssl->decrypt.nonce != NULL) {
29902990
wc_MemZero_Add("DecryptTls13 nonce", ssl->decrypt.nonce,

0 commit comments

Comments
 (0)