Skip to content

Commit b17ec3b

Browse files
committed
cppcheck-2.13.0 mitigations peer review:
* add explanation in DoSessionTicket() re autoVariables. * re-refactor ECC_KEY_MAX_BITS() in ecc.c to use two separate macros, ECC_KEY_MAX_BITS() with same definition as before, and ECC_KEY_MAX_BITS_NONULLCHECK(). * in rsip_vprintf() use XVSNPRINTF() not vsnprintf(). * in types.h, fix fallthrough definition of WC_INLINE macro in !NO_INLINE cascade to be WC_MAYBE_UNUSED as it is when NO_INLINE.
1 parent 44b18de commit b17ec3b

4 files changed

Lines changed: 57 additions & 44 deletions

File tree

src/internal.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35832,6 +35832,11 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
3583235832

3583335833
#ifdef OPENSSL_EXTRA
3583435834
ssl->clSuites = clSuites; /* cppcheck-suppress autoVariables
35835+
*
35836+
* (suppress warning that ssl, a persistent
35837+
* non-local allocation, has its ->clSuites
35838+
* set to clSuites, a local stack allocation.
35839+
* we clear this assignment before returning.)
3583535840
*/
3583635841
/* Give user last chance to provide a cert for cipher selection */
3583735842
if (ret == 0 && ssl->ctx->certSetupCb != NULL)

wolfcrypt/src/ecc.c

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -252,19 +252,27 @@ ECC Curve Sizes:
252252
#define MAX_ECC_BITS_USE MAX_ECC_BITS_NEEDED
253253
#endif
254254

255-
static WC_MAYBE_UNUSED WC_INLINE word32 ECC_KEY_MAX_BITS(const ecc_key *key) {
256-
if (((key) == NULL) || ((key)->dp == NULL))
257-
return MAX_ECC_BITS_USE;
258-
else {
259-
#if !defined(WOLFSSL_CUSTOM_CURVES) && (ECC_MIN_KEY_SZ > 160) && \
260-
(!defined(HAVE_ECC_KOBLITZ) || (ECC_MIN_KEY_SZ > 224))
261-
return (word32)((key)->dp->size * 8);
262-
#else
263-
/* Add one bit for cases when order is a bit greater than prime. */
264-
return (word32)((key)->dp->size * 8 + 1);
265-
#endif
266-
}
267-
}
255+
#if !defined(WOLFSSL_CUSTOM_CURVES) && (ECC_MIN_KEY_SZ > 160) && \
256+
(!defined(HAVE_ECC_KOBLITZ) || (ECC_MIN_KEY_SZ > 224))
257+
258+
#define ECC_KEY_MAX_BITS(key) \
259+
((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
260+
((unsigned)((key)->dp->size * 8)))
261+
#define ECC_KEY_MAX_BITS_NONULLCHECK(key) \
262+
(((key)->dp == NULL) ? MAX_ECC_BITS_USE : \
263+
((unsigned)((key)->dp->size * 8)))
264+
265+
#else
266+
267+
/* Add one bit for cases when order is a bit greater than prime. */
268+
#define ECC_KEY_MAX_BITS(key) \
269+
((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
270+
((unsigned)((key)->dp->size * 8 + 1)))
271+
#define ECC_KEY_MAX_BITS_NONULLCHECK(key) \
272+
(((key)->dp == NULL) ? MAX_ECC_BITS_USE : \
273+
((unsigned)((key)->dp->size * 8 + 1)))
274+
275+
#endif
268276

269277
/* forward declarations */
270278
static int wc_ecc_new_point_ex(ecc_point** point, void* heap);
@@ -3482,12 +3490,12 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34823490
XMEMSET(key, 0, sizeof(*key));
34833491

34843492
#if defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_SMALL_STACK)
3485-
NEW_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS(key), heap, DYNAMIC_TYPE_ECC);
3486-
NEW_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS(key), heap, DYNAMIC_TYPE_ECC);
3493+
NEW_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS_NONULLCHECK(key), heap, DYNAMIC_TYPE_ECC);
3494+
NEW_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS_NONULLCHECK(key), heap, DYNAMIC_TYPE_ECC);
34873495
#ifdef ALT_ECC_SIZE
3488-
NEW_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS(key), heap, DYNAMIC_TYPE_ECC);
3489-
NEW_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS(key), heap, DYNAMIC_TYPE_ECC);
3490-
NEW_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS(key), heap, DYNAMIC_TYPE_ECC);
3496+
NEW_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS_NONULLCHECK(key), heap, DYNAMIC_TYPE_ECC);
3497+
NEW_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS_NONULLCHECK(key), heap, DYNAMIC_TYPE_ECC);
3498+
NEW_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS_NONULLCHECK(key), heap, DYNAMIC_TYPE_ECC);
34913499
#endif
34923500
if (key->t1 == NULL || key->t2 == NULL
34933501
#ifdef ALT_ECC_SIZE
@@ -3497,20 +3505,20 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34973505
err = MEMORY_E;
34983506
}
34993507
if (err == 0) {
3500-
err = INIT_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS(key));
3508+
err = INIT_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS_NONULLCHECK(key));
35013509
}
35023510
if (err == 0) {
3503-
err = INIT_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS(key));
3511+
err = INIT_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS_NONULLCHECK(key));
35043512
}
35053513
#ifdef ALT_ECC_SIZE
35063514
if (err == 0) {
3507-
err = INIT_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS(key));
3515+
err = INIT_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS_NONULLCHECK(key));
35083516
}
35093517
if (err == 0) {
3510-
err = INIT_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS(key));
3518+
err = INIT_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS_NONULLCHECK(key));
35113519
}
35123520
if (err == 0) {
3513-
err = INIT_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS(key));
3521+
err = INIT_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS_NONULLCHECK(key));
35143522
}
35153523
#endif
35163524
#else
@@ -6578,26 +6586,26 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
65786586
err = wc_ecc_sign_hash_async(in, inlen, out, outlen, rng, key);
65796587
#else
65806588

6581-
NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
6589+
NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
65826590
#ifdef MP_INT_SIZE_CHECK_NULL
65836591
if (r == NULL)
65846592
return MEMORY_E;
65856593
#endif
6586-
NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
6594+
NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
65876595
#ifdef MP_INT_SIZE_CHECK_NULL
65886596
if (s == NULL) {
65896597
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65906598
return MEMORY_E;
65916599
}
65926600
#endif
65936601

6594-
err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS(key));
6602+
err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK(key));
65956603
if (err != 0) {
65966604
FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
65976605
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65986606
return err;
65996607
}
6600-
err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS(key));
6608+
err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK(key));
66016609
if (err != 0) {
66026610
FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
66036611
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -6722,16 +6730,16 @@ static int ecc_sign_hash_sw(ecc_key* key, ecc_key* pubkey, WC_RNG* rng,
67226730
{
67236731
int err = MP_OKAY;
67246732
int loop_check = 0;
6725-
DECL_MP_INT_SIZE_DYN(b, ECC_KEY_MAX_BITS(key), MAX_ECC_BITS_USE);
6733+
DECL_MP_INT_SIZE_DYN(b, ECC_KEY_MAX_BITS_NONULLCHECK(key), MAX_ECC_BITS_USE);
67266734

6727-
NEW_MP_INT_SIZE(b, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
6735+
NEW_MP_INT_SIZE(b, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
67286736
#ifdef MP_INT_SIZE_CHECK_NULL
67296737
if (b == NULL)
67306738
err = MEMORY_E;
67316739
#endif
67326740

67336741
if (err == MP_OKAY) {
6734-
err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS(key));
6742+
err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS_NONULLCHECK(key));
67356743
}
67366744

67376745
#ifdef WOLFSSL_CUSTOM_CURVES
@@ -7125,7 +7133,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71257133
}
71267134
e = key->e;
71277135
#else
7128-
NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
7136+
NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
71297137
#ifdef MP_INT_SIZE_CHECK_NULL
71307138
if (e_lcl == NULL) {
71317139
return MEMORY_E;
@@ -7136,7 +7144,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71367144

71377145
/* get the hash and load it as a bignum into 'e' */
71387146
/* init the bignums */
7139-
if ((err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS(key))) != MP_OKAY) {
7147+
if ((err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS_NONULLCHECK(key))) != MP_OKAY) {
71407148
FREE_MP_INT_SIZE(e_lcl, key->heap, DYNAMIC_TYPE_ECC);
71417149
return err;
71427150
}
@@ -8302,25 +8310,25 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
83028310
r = key->r;
83038311
s = key->s;
83048312
#else
8305-
NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
8313+
NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
83068314
#ifdef MP_INT_SIZE_CHECK_NULL
83078315
if (r == NULL)
83088316
return MEMORY_E;
83098317
#endif
8310-
NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
8318+
NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
83118319
#ifdef MP_INT_SIZE_CHECK_NULL
83128320
if (s == NULL) {
83138321
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83148322
return MEMORY_E;
83158323
}
83168324
#endif
8317-
err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS(key));
8325+
err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK(key));
83188326
if (err != 0) {
83198327
FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83208328
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83218329
return err;
83228330
}
8323-
err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS(key));
8331+
err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK(key));
83248332
if (err != 0) {
83258333
FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83268334
FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -8621,9 +8629,9 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86218629
ecc_point lcl_mG;
86228630
ecc_point lcl_mQ;
86238631
#endif
8624-
DECL_MP_INT_SIZE_DYN(w, ECC_KEY_MAX_BITS(key), MAX_ECC_BITS_USE);
8632+
DECL_MP_INT_SIZE_DYN(w, ECC_KEY_MAX_BITS_NONULLCHECK(key), MAX_ECC_BITS_USE);
86258633
#if !defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)
8626-
DECL_MP_INT_SIZE_DYN(e_lcl, ECC_KEY_MAX_BITS(key), MAX_ECC_BITS_USE);
8634+
DECL_MP_INT_SIZE_DYN(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK(key), MAX_ECC_BITS_USE);
86278635
#endif
86288636
mp_int* e;
86298637
mp_int* v = NULL; /* Will be w. */
@@ -8639,15 +8647,15 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86398647

86408648
err = mp_init(e);
86418649
#else
8642-
NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
8650+
NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
86438651
#ifdef MP_INT_SIZE_CHECK_NULL
86448652
if (e_lcl == NULL) {
86458653
return MEMORY_E;
86468654
}
86478655
#endif
86488656
e = e_lcl;
86498657

8650-
err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS(key));
8658+
err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS_NONULLCHECK(key));
86518659
#endif /* WOLFSSL_ASYNC_CRYPT && HAVE_CAVIUM_V */
86528660
if (err != MP_OKAY) {
86538661
#ifdef WOLFSSL_SMALL_STACK
@@ -8709,7 +8717,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87098717
}
87108718
#endif /* WOLFSSL_ASYNC_CRYPT && WC_ASYNC_ENABLE_ECC */
87118719

8712-
NEW_MP_INT_SIZE(w, ECC_KEY_MAX_BITS(key), key->heap, DYNAMIC_TYPE_ECC);
8720+
NEW_MP_INT_SIZE(w, ECC_KEY_MAX_BITS_NONULLCHECK(key), key->heap, DYNAMIC_TYPE_ECC);
87138721
#ifdef MP_INT_SIZE_CHECK_NULL
87148722
if (w == NULL) {
87158723
err = MEMORY_E;
@@ -8722,7 +8730,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87228730
v = w;
87238731
}
87248732
if (err == MP_OKAY) {
8725-
err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS(key));
8733+
err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS_NONULLCHECK(key));
87268734
}
87278735

87288736
/* allocate points */

wolfcrypt/test/test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ const byte const_byte_array[] = "A+Gd\0\0\0";
212212
int ret;
213213
char tmpBuf[80];
214214

215-
ret = vsnprintf(tmpBuf, sizeof(tmpBuf), format, args);
215+
ret = XVSNPRINTF(tmpBuf, sizeof(tmpBuf), format, args);
216216
printf(tmpBuf);
217217

218218
return ret;

wolfssl/wolfcrypt/types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ typedef struct w64wrapper {
356356
#define WC_INLINE inline
357357
#endif
358358
#else
359-
#define WC_INLINE
359+
#define WC_INLINE WC_MAYBE_UNUSED
360360
#endif
361361
#else
362362
#define WC_INLINE WC_MAYBE_UNUSED

0 commit comments

Comments
 (0)