diff --git a/linuxkm/lkcapi_aes_glue.c b/linuxkm/lkcapi_aes_glue.c index d133686429..19e8726f5c 100644 --- a/linuxkm/lkcapi_aes_glue.c +++ b/linuxkm/lkcapi_aes_glue.c @@ -1523,7 +1523,7 @@ static int AesGcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4106_p) out: if (sg_buf) { - ForceZero(sg_buf, req->assoclen + req->cryptlen); + wc_ForceZero(sg_buf, req->assoclen + req->cryptlen); free(sg_buf); } else { @@ -2018,7 +2018,7 @@ static int AesCcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4309_p) out: if (sg_buf) { - ForceZero(sg_buf, req->assoclen + req->cryptlen); + wc_ForceZero(sg_buf, req->assoclen + req->cryptlen); free(sg_buf); } else { diff --git a/linuxkm/lkcapi_dh_glue.c b/linuxkm/lkcapi_dh_glue.c index f5a70492ef..ef05c6c7ef 100644 --- a/linuxkm/lkcapi_dh_glue.c +++ b/linuxkm/lkcapi_dh_glue.c @@ -382,7 +382,7 @@ static int km_dh_decode_secret(const u8 * buf, unsigned int len, static inline void km_dh_clear_keys(struct km_dh_ctx * ctx) { if (ctx->priv_key) { - ForceZero(ctx->priv_key, ctx->priv_len); + wc_ForceZero(ctx->priv_key, ctx->priv_len); free(ctx->priv_key); ctx->priv_key = NULL; ctx->priv_len = 0; @@ -1014,7 +1014,7 @@ static int km_dh_compute_shared_secret(struct kpp_request *req) dh_shared_secret_end: if (shared_secret) { - ForceZero(shared_secret, shared_secret_len); + wc_ForceZero(shared_secret, shared_secret_len); free(shared_secret); shared_secret = NULL; } diff --git a/linuxkm/lkcapi_ecdh_glue.c b/linuxkm/lkcapi_ecdh_glue.c index 9cd05d99e1..b382a39641 100644 --- a/linuxkm/lkcapi_ecdh_glue.c +++ b/linuxkm/lkcapi_ecdh_glue.c @@ -682,7 +682,7 @@ static int km_ecdh_compute_shared_secret(struct kpp_request *req) ecdh_shared_secret_end: if (shared_secret) { - ForceZero(shared_secret, shared_secret_len); + wc_ForceZero(shared_secret, shared_secret_len); free(shared_secret); shared_secret = NULL; } diff --git a/linuxkm/lkcapi_glue.c b/linuxkm/lkcapi_glue.c index a145770a4f..7ce161bd77 100644 --- a/linuxkm/lkcapi_glue.c +++ b/linuxkm/lkcapi_glue.c @@ -42,14 +42,6 @@ #endif #endif -/* need misc.c for ForceZero(). */ -#ifdef NO_INLINE - #include -#else - #define WOLFSSL_MISC_INCLUDED - #include -#endif - #ifndef WOLFSSL_LINUXKM_LKCAPI_PRIORITY /* Larger number means higher priority. The highest in-tree priority is * 4001, in the Cavium driver. diff --git a/linuxkm/lkcapi_rsa_glue.c b/linuxkm/lkcapi_rsa_glue.c index 5120061ae1..30e9a11e71 100644 --- a/linuxkm/lkcapi_rsa_glue.c +++ b/linuxkm/lkcapi_rsa_glue.c @@ -748,7 +748,7 @@ static int km_direct_rsa_enc(struct akcipher_request *req) rsa_enc_out: free(enc); if (dec != NULL) { - ForceZero(dec, req->src_len); + wc_ForceZero(dec, req->src_len); free(dec); } @@ -853,7 +853,7 @@ static int km_direct_rsa_dec(struct akcipher_request *req) rsa_dec_out: free(enc); if (dec != NULL) { - ForceZero(dec, dec_alloc); + wc_ForceZero(dec, dec_alloc); free(dec); } @@ -1185,7 +1185,7 @@ static int km_pkcs1pad_sign(struct akcipher_request *req) err = 0; pkcs1pad_sign_out: if (work_buffer) { - ForceZero(work_buffer, 2 * ctx->key_len); + wc_ForceZero(work_buffer, 2 * ctx->key_len); free(work_buffer); } @@ -1300,7 +1300,7 @@ static int km_pkcs1pad_verify(struct akcipher_request *req) goto pkcs1pad_verify_out; } - n_diff = ConstantCompare(sig, msg, dec_len); + n_diff = wc_ConstantCompare(sig, msg, dec_len); if (unlikely(n_diff != 0)) { err = -EKEYREJECTED; goto pkcs1pad_verify_out; @@ -1442,7 +1442,7 @@ static int km_pkcs1_sign(struct crypto_sig *tfm, #endif /* linux >= 6.15.0 */ pkcs1_sign_out: if (msg != NULL) { - ForceZero(msg, ctx->key_len); + wc_ForceZero(msg, ctx->key_len); free(msg); } @@ -1556,7 +1556,7 @@ static int km_pkcs1_verify(struct crypto_sig *tfm, goto pkcs1_verify_out; } - n_diff = ConstantCompare(enc_digest, msg, enc_msg_len); + n_diff = wc_ConstantCompare(enc_digest, msg, enc_msg_len); if (unlikely(n_diff != 0)) { #ifdef WOLFKM_DEBUG_RSA pr_err("error: %s: recovered msg did not match digest: %d\n", @@ -1771,7 +1771,7 @@ static int km_pkcs1pad_enc(struct akcipher_request *req) pkcs1_enc_out: free(enc); if (dec != NULL) { - ForceZero(dec, req->src_len); + wc_ForceZero(dec, req->src_len); free(dec); } @@ -1863,7 +1863,7 @@ static int km_pkcs1pad_dec(struct akcipher_request *req) pkcs1_dec_out: free(enc); if (dec != NULL) { - ForceZero(dec, dec_alloc); + wc_ForceZero(dec, dec_alloc); free(dec); } @@ -2430,7 +2430,7 @@ static int linuxkm_test_rsa_driver(const char * driver, int nbits) free(pub); if (priv) { if (priv_len > 0) - ForceZero(priv, priv_len); + wc_ForceZero(priv, priv_len); free(priv); } free(plaintext); @@ -2961,7 +2961,7 @@ static int linuxkm_test_pkcs1pad_driver(const char * driver, int nbits, crypto_free_akcipher(tfm); if (priv) { if (priv_len > 0) - ForceZero(priv, priv_len); + wc_ForceZero(priv, priv_len); free(priv); } free(pub); @@ -3329,7 +3329,7 @@ static int linuxkm_test_pkcs1_driver(const char * driver, int nbits, crypto_free_sig(tfm); if (priv) { if (priv_len > 0) - ForceZero(priv, priv_len); + wc_ForceZero(priv, priv_len); free(priv); } free(pub); diff --git a/linuxkm/lkcapi_sha_glue.c b/linuxkm/lkcapi_sha_glue.c index f7b275c4a6..68fa58a6e5 100644 --- a/linuxkm/lkcapi_sha_glue.c +++ b/linuxkm/lkcapi_sha_glue.c @@ -822,7 +822,7 @@ WC_MAYBE_UNUSED static int km_hmac_init(struct shash_desc *desc) { ret = wc_HmacCopy(&p_ctx->wc_hmac, t_ctx->wc_hmac); if (ret != 0) { - ForceZero(t_ctx->wc_hmac, sizeof *t_ctx->wc_hmac); + wc_ForceZero(t_ctx->wc_hmac, sizeof *t_ctx->wc_hmac); free(t_ctx->wc_hmac); t_ctx->wc_hmac = NULL; return -EINVAL; @@ -1421,7 +1421,7 @@ static ssize_t wc_get_random_bytes_user(struct iov_iter *iter) { (void)wc_rng_bank_default_checkin(¤t_default_wc_rng_bank); - ForceZero(block, sizeof(block)); + wc_ForceZero(block, sizeof(block)); if (total_copied == 0) { if (ret == 0) @@ -1485,7 +1485,7 @@ static ssize_t wc_extract_crng_user(void __user *buf, size_t nbytes) { (void)wc_rng_bank_default_checkin(¤t_default_wc_rng_bank); - ForceZero(block, sizeof(block)); + wc_ForceZero(block, sizeof(block)); if ((total_copied == 0) && (ret == 0)) { ret = -ECANCELED; @@ -1726,7 +1726,7 @@ static int wc_get_random_bytes_user_kretprobe_enter(struct kretprobe_instance *p #endif } - ForceZero(block, sizeof(block)); + wc_ForceZero(block, sizeof(block)); if ((total_copied == 0) && (ret == 0)) total_copied = (size_t)(-EFAULT); diff --git a/wolfcrypt/src/memory.c b/wolfcrypt/src/memory.c index 93b0bd0d12..d4a9d00092 100644 --- a/wolfcrypt/src/memory.c +++ b/wolfcrypt/src/memory.c @@ -1685,6 +1685,15 @@ void wc_ForceZero(void *mem, size_t len) } #endif +#ifndef WOLFSSL_NO_CONST_CMP +/* Exported version of ConstantCompare(). */ +int wc_ConstantCompare(const byte* a, const byte* b, int length) + +{ + return ConstantCompare(a, b, length); +} +#endif + #ifdef WC_DEBUG_CIPHER_LIFECYCLE static const byte wc_debug_cipher_lifecycle_tag_value[] = { 'W', 'o', 'l', 'f' }; diff --git a/wolfssl/wolfcrypt/memory.h b/wolfssl/wolfcrypt/memory.h index 66bc257ee1..155b8aa4ea 100644 --- a/wolfssl/wolfcrypt/memory.h +++ b/wolfssl/wolfcrypt/memory.h @@ -335,6 +335,10 @@ WOLFSSL_LOCAL void wc_MemZero_Check(void* addr, size_t len); WOLFSSL_API void wc_ForceZero(void *mem, size_t len); #endif +#ifndef WOLFSSL_NO_CONST_CMP +WOLFSSL_API int wc_ConstantCompare(const byte* a, const byte* b, int length); +#endif + #ifdef WC_DEBUG_CIPHER_LIFECYCLE WOLFSSL_LOCAL int wc_debug_CipherLifecycleInit(void **CipherLifecycleTag, void *heap);