Skip to content

Commit cc45b31

Browse files
authored
Merge pull request #6922 from JacobBarthelmeh/coverity
clean up some coverity reports
2 parents 1dd6888 + c3ed45d commit cc45b31

7 files changed

Lines changed: 55 additions & 21 deletions

File tree

src/internal.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13353,6 +13353,7 @@ int LoadCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type)
1335313353
}
1335413354

1335513355
XFREE(filename, NULL, DYNAMIC_TYPE_OPENSSL);
13356+
filename = NULL;
1335613357
}
1335713358
#else
1335813359
(void) type;
@@ -15478,6 +15479,8 @@ static int DoCertificateStatus(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1547815479
else if (idx == 1) /* server cert must be OK */
1547915480
ret = BAD_CERTIFICATE_STATUS_ERROR;
1548015481
}
15482+
15483+
/* only frees 'single' if single->isDynamic is set */
1548115484
FreeOcspResponse(response);
1548215485

1548315486
*inOutIdx += status_length;

src/ssl.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6464,7 +6464,8 @@ static int ProcessBufferTryDecodeRsa(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
64646464
#ifdef WOLF_PRIVATE_KEY_ID
64656465
if ((ret != 0) && (devId != INVALID_DEVID
64666466
#ifdef HAVE_PK_CALLBACKS
6467-
|| wolfSSL_CTX_IsPrivatePkSet(ctx)
6467+
|| ((ssl == NULL) ? wolfSSL_CTX_IsPrivatePkSet(ctx) :
6468+
wolfSSL_CTX_IsPrivatePkSet(ssl->ctx))
64686469
#endif
64696470
)) {
64706471
word32 nSz;
@@ -6542,7 +6543,8 @@ static int ProcessBufferTryDecodeRsa(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
65426543
#ifdef WOLF_PRIVATE_KEY_ID
65436544
if (ret != 0 && (devId != INVALID_DEVID
65446545
#ifdef HAVE_PK_CALLBACKS
6545-
|| wolfSSL_CTX_IsPrivatePkSet(ctx)
6546+
|| ((ssl == NULL) ? wolfSSL_CTX_IsPrivatePkSet(ctx) :
6547+
wolfSSL_CTX_IsPrivatePkSet(ssl->ctx))
65466548
#endif
65476549
)) {
65486550
/* if using crypto or PK callbacks, try public key decode */
@@ -6623,7 +6625,8 @@ static int ProcessBufferTryDecodeEcc(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
66236625
#ifdef WOLF_PRIVATE_KEY_ID
66246626
if (ret != 0 && (devId != INVALID_DEVID
66256627
#ifdef HAVE_PK_CALLBACKS
6626-
|| wolfSSL_CTX_IsPrivatePkSet(ctx)
6628+
|| ((ssl == NULL) ? wolfSSL_CTX_IsPrivatePkSet(ctx) :
6629+
wolfSSL_CTX_IsPrivatePkSet(ssl->ctx))
66276630
#endif
66286631
)) {
66296632
/* if using crypto or PK callbacks, try public key decode */
@@ -6709,7 +6712,8 @@ static int ProcessBufferTryDecodeEd25519(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
67096712
#ifdef WOLF_PRIVATE_KEY_ID
67106713
if (ret != 0 && (devId != INVALID_DEVID
67116714
#ifdef HAVE_PK_CALLBACKS
6712-
|| wolfSSL_CTX_IsPrivatePkSet(ctx)
6715+
|| ((ssl == NULL) ? wolfSSL_CTX_IsPrivatePkSet(ctx) :
6716+
wolfSSL_CTX_IsPrivatePkSet(ssl->ctx))
67136717
#endif
67146718
)) {
67156719
/* if using crypto or PK callbacks, try public key decode */
@@ -6788,7 +6792,8 @@ static int ProcessBufferTryDecodeEd448(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
67886792
#ifdef WOLF_PRIVATE_KEY_ID
67896793
if (ret != 0 && (devId != INVALID_DEVID
67906794
#ifdef HAVE_PK_CALLBACKS
6791-
|| wolfSSL_CTX_IsPrivatePkSet(ctx)
6795+
|| ((ssl == NULL) ? wolfSSL_CTX_IsPrivatePkSet(ctx) :
6796+
wolfSSL_CTX_IsPrivatePkSet(ssl->ctx))
67926797
#endif
67936798
)) {
67946799
/* if using crypto or PK callbacks, try public key decode */
@@ -29974,12 +29979,16 @@ static void SESSION_ex_data_cache_update(WOLFSSL_SESSION* session, int idx,
2997429979
#endif
2997529980
) {
2997629981
if (get) {
29977-
*getRet = wolfSSL_CRYPTO_get_ex_data(
29982+
if (getRet) {
29983+
*getRet = wolfSSL_CRYPTO_get_ex_data(
2997829984
&cacheSession->ex_data, idx);
29985+
}
2997929986
}
2998029987
else {
29981-
*setRet = wolfSSL_CRYPTO_set_ex_data(
29988+
if (setRet) {
29989+
*setRet = wolfSSL_CRYPTO_set_ex_data(
2998229990
&cacheSession->ex_data, idx, data);
29991+
}
2998329992
}
2998429993
foundCache = 1;
2998529994
break;
@@ -36384,7 +36393,7 @@ static int wolfSSL_BIO_to_MIME_crlf(WOLFSSL_BIO* in, WOLFSSL_BIO* out)
3638436393
#endif
3638536394
XMEMSET(line, 0, MAX_MIME_LINE_LEN);
3638636395

36387-
while ((lineLen = wolfSSL_BIO_gets(in, line, (int)sizeof(line))) > 0) {
36396+
while ((lineLen = wolfSSL_BIO_gets(in, line, MAX_MIME_LINE_LEN)) > 0) {
3638836397

3638936398
if (line[lineLen - 1] == '\r' || line[lineLen - 1] == '\n') {
3639036399
canonLineLen = (word32)lineLen;
@@ -36769,26 +36778,26 @@ int wolfSSL_PEM_write_bio_PKCS7(WOLFSSL_BIO* bio, PKCS7* p7)
3676936778
hashType = wc_OidGetHash(p7->hashOID);
3677036779
hashSz = wc_HashGetDigestSize(hashType);
3677136780
if (hashSz > WC_MAX_DIGEST_SIZE)
36772-
return WOLFSSL_FAILURE;
36781+
goto error;
3677336782

3677436783
/* only SIGNED_DATA is supported */
3677536784
switch (p7->contentOID) {
3677636785
case SIGNED_DATA:
3677736786
break;
3677836787
default:
3677936788
WOLFSSL_MSG("Unknown PKCS#7 Type");
36780-
return WOLFSSL_FAILURE;
36789+
goto error;
3678136790
};
3678236791

3678336792
if ((wc_PKCS7_EncodeSignedData_ex(p7, hashBuf, hashSz,
3678436793
outputHead, &outputHeadSz, outputFoot, &outputFootSz)) != 0)
36785-
return WOLFSSL_FAILURE;
36794+
goto error;
3678636795

3678736796
outputSz = outputHeadSz + p7->contentSz + outputFootSz;
3678836797
output = (byte*)XMALLOC(outputSz, bio->heap, DYNAMIC_TYPE_TMP_BUFFER);
3678936798

3679036799
if (!output)
36791-
return WOLFSSL_FAILURE;
36800+
goto error;
3679236801

3679336802
XMEMSET(output, 0, outputSz);
3679436803
outputSz = 0;
@@ -37177,6 +37186,8 @@ PKCS7* wolfSSL_SMIME_read_PKCS7(WOLFSSL_BIO* in,
3717737186
XFREE(section, NULL, DYNAMIC_TYPE_PKCS7);
3717837187
if (canonSection != NULL)
3717937188
XFREE(canonSection, NULL, DYNAMIC_TYPE_PKCS7);
37189+
if (canonLine != NULL)
37190+
XFREE(canonLine, NULL, DYNAMIC_TYPE_PKCS7);
3718037191
if (bcont) {
3718137192
wolfSSL_BIO_free(*bcont);
3718237193
*bcont = NULL; /* reset 'bcount' pointer to NULL on failure */

src/x509.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,15 +1548,19 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext,
15481548
if (sk->next) {
15491549
if ((valLen = XSNPRINTF(val, len, "%*s%s,",
15501550
indent, "", str->strData))
1551-
>= len)
1551+
>= len) {
1552+
XFREE(val, NULL, DYNAMIC_TYPE_TMP_BUFFER);
15521553
return rc;
1554+
}
15531555
} else {
15541556
if ((valLen = XSNPRINTF(val, len, "%*s%s",
15551557
indent, "", str->strData))
1556-
>= len)
1558+
>= len) {
1559+
XFREE(val, NULL, DYNAMIC_TYPE_TMP_BUFFER);
15571560
return rc;
1561+
}
15581562
}
1559-
if (tmpLen + valLen > tmpSz) {
1563+
if ((tmpLen + valLen) >= tmpSz) {
15601564
XFREE(val, NULL, DYNAMIC_TYPE_TMP_BUFFER);
15611565
return rc;
15621566
}
@@ -6480,7 +6484,8 @@ static int X509PrintSignature_ex(WOLFSSL_BIO* bio, byte* sig,
64806484
break;
64816485
}
64826486
}
6483-
if (valLen >= (int)sizeof(tmp) - tmpLen - 1) {
6487+
if ((tmpLen < 0) || (valLen < 0) ||
6488+
(valLen >= ((int)sizeof(tmp) - tmpLen - 1))) {
64846489
ret = WOLFSSL_FAILURE;
64856490
break;
64866491
}
@@ -12823,6 +12828,7 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
1282312828
>= tmpSz)
1282412829
{
1282512830
WOLFSSL_MSG("buffer overrun");
12831+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1282612832
return WOLFSSL_FAILURE;
1282712833
}
1282812834

@@ -12833,6 +12839,7 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
1283312839
>= tmpSz)
1283412840
{
1283512841
WOLFSSL_MSG("buffer overrun");
12842+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1283612843
return WOLFSSL_FAILURE;
1283712844
}
1283812845
tmpSz = len + nameStrSz + 1; /* 1 for '=' */

wolfcrypt/src/asn.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33607,6 +33607,9 @@ int DecodeAsymKey(const byte* input, word32* inOutIdx, word32 inSz,
3360733607

3360833608
if (input == NULL || inOutIdx == NULL || inSz == 0 ||
3360933609
privKey == NULL || privKeyLen == NULL) {
33610+
#ifdef WOLFSSL_ASN_TEMPLATE
33611+
FREE_ASNGETDATA(dataASN, NULL);
33612+
#endif
3361033613
return BAD_FUNC_ARG;
3361133614
}
3361233615

wolfcrypt/src/hpke.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -785,8 +785,10 @@ static int wc_HpkeEncap(Hpke* hpke, void* ephemeralKey, void* receiverKey,
785785
#ifdef ECC_TIMING_RESISTANT
786786
rng = wc_rng_new(NULL, 0, hpke->heap);
787787

788-
if (rng == NULL)
789-
return RNG_FAILURE_E;
788+
if (rng == NULL) {
789+
ret = RNG_FAILURE_E;
790+
break;
791+
}
790792

791793
wc_ecc_set_rng((ecc_key*)ephemeralKey, rng);
792794
#endif

wolfcrypt/src/pkcs7.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6107,11 +6107,15 @@ static int wc_PKCS7_KariGenerateKEK(WC_PKCS7_KARI* kari, WC_RNG* rng,
61076107
(!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION != 2))) && \
61086108
!defined(HAVE_SELFTEST)
61096109
ret = wc_ecc_set_rng(kari->senderKey, rng);
6110-
if (ret != 0)
6110+
if (ret != 0) {
6111+
XFREE(secret, kari->heap, DYNAMIC_TYPE_PKCS7);
61116112
return ret;
6113+
}
61126114
ret = wc_ecc_set_rng(kari->recipKey, rng);
6113-
if (ret != 0)
6115+
if (ret != 0) {
6116+
XFREE(secret, kari->heap, DYNAMIC_TYPE_PKCS7);
61146117
return ret;
6118+
}
61156119
#else
61166120
(void)rng;
61176121
#endif

wolfcrypt/src/random.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1866,9 +1866,13 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz)
18661866
if (ret == DRBG_SUCCESS)
18671867
ret = Hash_DRBG_Generate((DRBG_internal *)rng->drbg, output, sz);
18681868

1869-
ForceZero(newSeed, sizeof(newSeed));
18701869
#ifdef WOLFSSL_SMALL_STACK
1870+
if (newSeed != NULL) {
1871+
ForceZero(newSeed, SEED_SZ + SEED_BLOCK_SZ);
1872+
}
18711873
XFREE(newSeed, rng->heap, DYNAMIC_TYPE_SEED);
1874+
#else
1875+
ForceZero(newSeed, sizeof(newSeed));
18721876
#endif
18731877
}
18741878
else {

0 commit comments

Comments
 (0)