Skip to content

Commit 595e71d

Browse files
Merge pull request #7718 from douzzer/20240705-coverity-fixes
20240705-coverity-fixes
2 parents d8757a5 + e35e713 commit 595e71d

File tree

6 files changed

+61
-29
lines changed

6 files changed

+61
-29
lines changed

src/internal.c

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14955,44 +14955,65 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1495514955
#endif
1495614956
#if defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2)
1495714957
if (ret == 0 && addToPendingCAs && !alreadySigner) {
14958-
DecodedCert dCertAdd;
14959-
DerBuffer *derBuffer;
14958+
#ifdef WOLFSSL_SMALL_STACK
14959+
DecodedCert *dCertAdd = NULL;
14960+
#else
14961+
DecodedCert dCertAdd[1];
14962+
#endif
14963+
int dCertAdd_inited = 0;
14964+
DerBuffer *derBuffer = NULL;
1496014965
buffer* cert = &args->certs[args->certIdx];
14961-
Signer *s;
14962-
InitDecodedCert(&dCertAdd, cert->buffer, cert->length, ssl->heap);
14963-
ret = ParseCert(&dCertAdd, CA_TYPE, NO_VERIFY, SSL_CM(ssl));
14966+
Signer *s = NULL;
14967+
14968+
#ifdef WOLFSSL_SMALL_STACK
14969+
dCertAdd = (DecodedCert *)
14970+
XMALLOC(sizeof(*dCertAdd), ssl->heap,
14971+
DYNAMIC_TYPE_TMP_BUFFER);
14972+
if (dCertAdd == NULL) {
14973+
ret = MEMORY_E;
14974+
goto exit_req_v2;
14975+
}
14976+
#endif
14977+
InitDecodedCert(dCertAdd, cert->buffer, cert->length,
14978+
ssl->heap);
14979+
dCertAdd_inited = 1;
14980+
ret = ParseCert(dCertAdd, CA_TYPE, NO_VERIFY,
14981+
SSL_CM(ssl));
1496414982
if (ret != 0) {
14965-
FreeDecodedCert(&dCertAdd);
14966-
goto exit_ppc;
14983+
goto exit_req_v2;
1496714984
}
1496814985
ret = AllocDer(&derBuffer, cert->length, CA_TYPE, ssl->heap);
1496914986
if (ret != 0 || derBuffer == NULL) {
14970-
FreeDecodedCert(&dCertAdd);
14971-
goto exit_ppc;
14987+
goto exit_req_v2;
1497214988
}
1497314989
XMEMCPY(derBuffer->buffer, cert->buffer, cert->length);
1497414990
s = MakeSigner(SSL_CM(ssl)->heap);
1497514991
if (s == NULL) {
14976-
FreeDecodedCert(&dCertAdd);
14977-
FreeDer(&derBuffer);
1497814992
ret = MEMORY_E;
14979-
goto exit_ppc;
14993+
goto exit_req_v2;
1498014994
}
14981-
ret = FillSigner(s, &dCertAdd, CA_TYPE, derBuffer);
14982-
FreeDecodedCert(&dCertAdd);
14983-
FreeDer(&derBuffer);
14995+
ret = FillSigner(s, dCertAdd, CA_TYPE, derBuffer);
1498414996
if (ret != 0) {
14985-
FreeSigner(s, SSL_CM(ssl)->heap);
14986-
goto exit_ppc;
14997+
goto exit_req_v2;
1498714998
}
1498814999
skipAddCA = 1;
1498915000
ret = TLSX_CSR2_AddPendingSigner(ssl->extensions, s);
14990-
if (ret != 0) {
14991-
FreeSigner(s, ssl->heap);
15001+
15002+
exit_req_v2:
15003+
if (s && (ret != 0))
15004+
FreeSigner(s, SSL_CM(ssl)->heap);
15005+
if (derBuffer)
15006+
FreeDer(&derBuffer);
15007+
if (dCertAdd_inited)
15008+
FreeDecodedCert(dCertAdd);
15009+
#ifdef WOLFSSL_SMALL_STACK
15010+
if (dCertAdd)
15011+
XFREE(dCertAdd, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
15012+
#endif
15013+
if (ret != 0)
1499215014
goto exit_ppc;
14993-
}
1499415015
}
14995-
#endif
15016+
#endif /* HAVE_CERTIFICATE_STATUS_REQUEST_V2 */
1499615017

1499715018
/* If valid CA then add to Certificate Manager */
1499815019
if (ret == 0 && args->dCert->isCA &&

src/wolfio.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,6 +1612,11 @@ int wolfIO_HttpProcessResponse(int sfd, const char** appStrList,
16121612

16131613
/* read data if no \r\n or first time */
16141614
if ((start == NULL) || (end == NULL)) {
1615+
if (httpBufSz < len + 1) {
1616+
return BUFFER_ERROR; /* can't happen, but Coverity thinks it
1617+
* can.
1618+
*/
1619+
}
16151620
result = wolfIO_Recv(sfd, (char*)httpBuf+len, httpBufSz-len-1, 0);
16161621
if (result > 0) {
16171622
len += result;

wolfcrypt/src/aes.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12910,10 +12910,6 @@ int wc_AesXtsEncryptInit(XtsAes* xaes, const byte* i, word32 iSz,
1291012910
return BAD_FUNC_ARG;
1291112911
}
1291212912

12913-
if (iSz < AES_BLOCK_SIZE) {
12914-
return BAD_FUNC_ARG;
12915-
}
12916-
1291712913
XMEMCPY(stream->tweak_block, i, AES_BLOCK_SIZE);
1291812914
stream->bytes_crypted_with_this_tweak = 0;
1291912915

wolfcrypt/src/asn.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24067,7 +24067,7 @@ int FillSigner(Signer* signer, DecodedCert* cert, int type, DerBuffer *der)
2406724067
if (ret == 0 && signer != NULL) {
2406824068
if (cert->extSapkiSet && cert->sapkiLen > 0) {
2406924069
/* Allocated space for alternative public key. */
24070-
signer->sapkiDer = (byte*)XMALLOC(cert->sapkiLen, cm->heap,
24070+
signer->sapkiDer = (byte*)XMALLOC(cert->sapkiLen, cert->heap,
2407124071
DYNAMIC_TYPE_PUBLIC_KEY);
2407224072
if (signer->sapkiDer == NULL) {
2407324073
ret = MEMORY_E;
@@ -24083,7 +24083,8 @@ int FillSigner(Signer* signer, DecodedCert* cert, int type, DerBuffer *der)
2408324083

2408424084
#if defined(WOLFSSL_AKID_NAME) || defined(HAVE_CRL)
2408524085
if (ret == 0 && signer != NULL)
24086-
ret = CalcHashId(cert->serial, cert->serialSz, signer->serialHash);
24086+
ret = CalcHashId(cert->serial, (word32)cert->serialSz,
24087+
signer->serialHash);
2408724088
#endif
2408824089
if (ret == 0 && signer != NULL) {
2408924090
#ifdef WOLFSSL_SIGNER_DER_CERT

wolfcrypt/src/rsa.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4017,7 +4017,10 @@ int wc_RsaPSS_CheckPadding_ex2(const byte* in, word32 inSz, byte* sig,
40174017

40184018
/* Sig = Salt | Exp Hash */
40194019
if (ret == 0) {
4020-
if (sigSz != inSz + (word32)saltLen) {
4020+
word32 totalSz;
4021+
if ((WC_SAFE_SUM_WORD32(inSz, (word32)saltLen, totalSz) == 0) ||
4022+
(sigSz != totalSz))
4023+
{
40214024
ret = PSS_SALTLEN_E;
40224025
}
40234026
}

wolfcrypt/src/wc_encrypt.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,9 +545,15 @@ int wc_CryptKey(const char* password, int passwordSz, byte* salt,
545545

546546
ret = wc_PKCS12_PBKDF(key, unicodePasswd, idx, salt, saltSz,
547547
iterations, (int)derivedLen, typeH, 1);
548+
if (ret < 0)
549+
break;
548550
if (id != PBE_SHA1_RC4_128) {
549-
ret += wc_PKCS12_PBKDF(cbcIv, unicodePasswd, idx, salt,
551+
i = ret;
552+
ret = wc_PKCS12_PBKDF(cbcIv, unicodePasswd, idx, salt,
550553
saltSz, iterations, 8, typeH, 2);
554+
if (ret < 0)
555+
break;
556+
ret += i;
551557
}
552558
break;
553559
}

0 commit comments

Comments
 (0)