fixes for clang -Wunreachable-code-aggressive:

tests/suites.c: in SuiteTest(), swap order of (void)s and return.

wolfcrypt/src/chacha.c: gate out unreachable C wc_Chacha_encrypt_bytes() call in wc_Chacha_Process, and gate out unused implementations of wc_Chacha_wordtobyte() and wc_Chacha_encrypt_bytes(), when defined(USE_INTEL_CHACHA_SPEEDUP).

wolfcrypt/src/sha256.c and wolfcrypt/src/sha512.c: fix logic in Sha256_SetTransform() and Sha512_SetTransform() to make the AVX1_RORX implementations accessible.  also add a missing Transform_Sha512_Len_p = NULL in the C path of Sha512_SetTransform().

wolfssl/internal.h: for the fallback definition of wolfSSL_curve_is_disabled, use an inline function instead of a compound-clause macro, because clang isn't smart enough to treat the compound expression as a bare constant zero, producing a lame-positive -Wunreachable-code.
This commit is contained in:
Daniel Pouzzner
2023-12-25 00:23:37 -06:00
parent daf1d1728f
commit 8a32e7f3f9
5 changed files with 46 additions and 29 deletions

View File

@ -1455,8 +1455,8 @@ exit:
return args.return_code; return args.return_code;
#else #else
return NOT_COMPILED_IN;
(void)argc; (void)argc;
(void)argv; (void)argv;
return NOT_COMPILED_IN;
#endif /* !NO_WOLFSSL_SERVER && !NO_WOLFSSL_CLIENT */ #endif /* !NO_WOLFSSL_SERVER && !NO_WOLFSSL_CLIENT */
} }

View File

@ -200,6 +200,7 @@ int wc_Chacha_SetKey(ChaCha* ctx, const byte* key, word32 keySz)
return 0; return 0;
} }
#ifndef USE_INTEL_CHACHA_SPEEDUP
/** /**
* Converts word into bytes with rotations having been done. * Converts word into bytes with rotations having been done.
*/ */
@ -228,6 +229,7 @@ static WC_INLINE void wc_Chacha_wordtobyte(word32 x[CHACHA_CHUNK_WORDS],
#endif #endif
} }
} }
#endif /* !USE_INTEL_CHACHA_SPEEDUP */
#ifdef HAVE_XCHACHA #ifdef HAVE_XCHACHA
@ -325,6 +327,7 @@ extern void chacha_encrypt_avx2(ChaCha* ctx, const byte* m, byte* c,
#endif #endif
#ifndef USE_INTEL_CHACHA_SPEEDUP
/** /**
* Encrypt a stream of bytes * Encrypt a stream of bytes
*/ */
@ -372,6 +375,8 @@ static void wc_Chacha_encrypt_bytes(ChaCha* ctx, const byte* m, byte* c,
ctx->left = CHACHA_CHUNK_BYTES - bytes; ctx->left = CHACHA_CHUNK_BYTES - bytes;
} }
} }
#endif /* !USE_INTEL_CHACHA_SPEEDUP */
/** /**
* API to encrypt/decrypt a message of any size. * API to encrypt/decrypt a message of any size.
@ -423,10 +428,10 @@ int wc_Chacha_Process(ChaCha* ctx, byte* output, const byte* input,
chacha_encrypt_x64(ctx, input, output, msglen); chacha_encrypt_x64(ctx, input, output, msglen);
return 0; return 0;
} }
#endif #else
wc_Chacha_encrypt_bytes(ctx, input, output, msglen); wc_Chacha_encrypt_bytes(ctx, input, output, msglen);
return 0; return 0;
#endif
} }
void wc_Chacha_purge_current_block(ChaCha* ctx) { void wc_Chacha_purge_current_block(ChaCha* ctx) {

View File

@ -356,7 +356,7 @@ static int InitSha256(wc_Sha256* sha256)
intel_flags = cpuid_get_flags(); intel_flags = cpuid_get_flags();
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
if (1 && IS_INTEL_AVX2(intel_flags)) { if (IS_INTEL_AVX2(intel_flags)) {
#ifdef HAVE_INTEL_RORX #ifdef HAVE_INTEL_RORX
if (IS_INTEL_BMI2(intel_flags)) { if (IS_INTEL_BMI2(intel_flags)) {
Transform_Sha256_p = Transform_Sha256_AVX2_RORX; Transform_Sha256_p = Transform_Sha256_AVX2_RORX;
@ -365,27 +365,29 @@ static int InitSha256(wc_Sha256* sha256)
} }
else else
#endif #endif
if (1)
{ {
Transform_Sha256_p = Transform_Sha256_AVX2; Transform_Sha256_p = Transform_Sha256_AVX2;
Transform_Sha256_Len_p = Transform_Sha256_AVX2_Len; Transform_Sha256_Len_p = Transform_Sha256_AVX2_Len;
Transform_Sha256_is_vectorized = 1; Transform_Sha256_is_vectorized = 1;
} }
#ifdef HAVE_INTEL_RORX
else {
Transform_Sha256_p = Transform_Sha256_AVX1_RORX;
Transform_Sha256_Len_p = Transform_Sha256_AVX1_RORX_Len;
Transform_Sha256_is_vectorized = 1;
}
#endif
} }
else else
#endif #endif
#ifdef HAVE_INTEL_AVX1 #ifdef HAVE_INTEL_AVX1
if (IS_INTEL_AVX1(intel_flags)) { if (IS_INTEL_AVX1(intel_flags)) {
Transform_Sha256_p = Transform_Sha256_AVX1; #ifdef HAVE_INTEL_RORX
Transform_Sha256_Len_p = Transform_Sha256_AVX1_Len; if (IS_INTEL_BMI2(intel_flags)) {
Transform_Sha256_is_vectorized = 1; Transform_Sha256_p = Transform_Sha256_AVX1_RORX;
Transform_Sha256_Len_p = Transform_Sha256_AVX1_RORX_Len;
Transform_Sha256_is_vectorized = 1;
}
else
#endif
{
Transform_Sha256_p = Transform_Sha256_AVX1;
Transform_Sha256_Len_p = Transform_Sha256_AVX1_Len;
Transform_Sha256_is_vectorized = 1;
}
} }
else else
#endif #endif

View File

@ -452,32 +452,36 @@ static int InitSha512_256(wc_Sha512* sha512)
} }
else else
#endif #endif
if (1) { {
Transform_Sha512_p = Transform_Sha512_AVX2; Transform_Sha512_p = Transform_Sha512_AVX2;
Transform_Sha512_Len_p = Transform_Sha512_AVX2_Len; Transform_Sha512_Len_p = Transform_Sha512_AVX2_Len;
Transform_Sha512_is_vectorized = 1; Transform_Sha512_is_vectorized = 1;
} }
#ifdef HAVE_INTEL_RORX
else {
Transform_Sha512_p = Transform_Sha512_AVX1_RORX;
Transform_Sha512_Len_p = Transform_Sha512_AVX1_RORX_Len;
Transform_Sha512_is_vectorized = 1;
}
#endif
} }
else else
#endif #endif
#if defined(HAVE_INTEL_AVX1) #if defined(HAVE_INTEL_AVX1)
if (IS_INTEL_AVX1(intel_flags)) { if (IS_INTEL_AVX1(intel_flags)) {
Transform_Sha512_p = Transform_Sha512_AVX1; #ifdef HAVE_INTEL_RORX
Transform_Sha512_Len_p = Transform_Sha512_AVX1_Len; if (IS_INTEL_BMI2(intel_flags)) {
Transform_Sha512_is_vectorized = 1; Transform_Sha512_p = Transform_Sha512_AVX1_RORX;
Transform_Sha512_Len_p = Transform_Sha512_AVX1_RORX_Len;
Transform_Sha512_is_vectorized = 1;
}
else
#endif
{
Transform_Sha512_p = Transform_Sha512_AVX1;
Transform_Sha512_Len_p = Transform_Sha512_AVX1_Len;
Transform_Sha512_is_vectorized = 1;
}
} }
else else
#endif #endif
{ {
Transform_Sha512_p = _Transform_Sha512; Transform_Sha512_p = _Transform_Sha512;
Transform_Sha512_is_vectorized = 1; Transform_Sha512_Len_p = NULL;
Transform_Sha512_is_vectorized = 0;
} }
transform_check = 1; transform_check = 1;

View File

@ -6139,9 +6139,15 @@ WOLFSSL_LOCAL int SetECKeyExternal(WOLFSSL_EC_KEY* eckey);
#if defined(OPENSSL_EXTRA) || defined(HAVE_CURL) #if defined(OPENSSL_EXTRA) || defined(HAVE_CURL)
WOLFSSL_LOCAL int wolfSSL_curve_is_disabled(const WOLFSSL* ssl, WOLFSSL_LOCAL int wolfSSL_curve_is_disabled(const WOLFSSL* ssl,
word16 named_curve); word16 curve_id);
#else #else
#define wolfSSL_curve_is_disabled(ssl, c) ((void)(ssl), (void)(c), 0) static WC_INLINE int wolfSSL_curve_is_disabled(const WOLFSSL* ssl,
word16 curve_id)
{
(void)ssl;
(void)curve_id;
return 0;
}
#endif #endif
WOLFSSL_LOCAL WC_RNG* WOLFSSL_RSA_GetRNG(WOLFSSL_RSA *rsa, WC_RNG **tmpRNG, WOLFSSL_LOCAL WC_RNG* WOLFSSL_RSA_GetRNG(WOLFSSL_RSA *rsa, WC_RNG **tmpRNG,