Skip to content

Commit e309236

Browse files
Merge pull request wolfSSL#9998 from douzzer/20260317-wc_linuxkm_rng_is_wolfcrypt
20260317-wc_linuxkm_rng_is_wolfcrypt
2 parents 668d69b + 87125c4 commit e309236

File tree

4 files changed

+35
-16
lines changed

4 files changed

+35
-16
lines changed

linuxkm/linuxkm_wc_port.h

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,19 @@
216216
#define WC_GENERATE_SEED_DEFAULT wc_linuxkm_GenerateSeed_IntelRD
217217
#endif
218218

219+
/* setup for LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT needs to be here
220+
* to assure that calls to get_random_bytes() in random.c are gated out
221+
* (they would recurse, potentially infinitely).
222+
*/
223+
#if defined(LINUXKM_LKCAPI_REGISTER_ALL) && \
224+
!defined(LINUXKM_LKCAPI_DONT_REGISTER_HASH_DRBG) && \
225+
!defined(LINUXKM_LKCAPI_DONT_REGISTER_HASH_DRBG_DEFAULT) && \
226+
!defined(NO_LINUXKM_DRBG_GET_RANDOM_BYTES) && \
227+
!defined(LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT) && \
228+
defined(HAVE_HASHDRBG)
229+
#define LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT
230+
#endif
231+
219232
#ifdef BUILDING_WOLFSSL
220233

221234
#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)) || \
@@ -560,18 +573,6 @@
560573
#define WC_AES_XTS_SUPPORT_SIMULTANEOUS_ENC_AND_DEC_KEYS
561574
#endif
562575

563-
/* setup for LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT needs to be here
564-
* to assure that calls to get_random_bytes() in random.c are gated out
565-
* (they would recurse, potentially infinitely).
566-
*/
567-
#if defined(LINUXKM_LKCAPI_REGISTER_ALL) && \
568-
!defined(LINUXKM_LKCAPI_DONT_REGISTER_HASH_DRBG) && \
569-
!defined(LINUXKM_LKCAPI_DONT_REGISTER_HASH_DRBG_DEFAULT) && \
570-
!defined(NO_LINUXKM_DRBG_GET_RANDOM_BYTES) && \
571-
!defined(LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT)
572-
#define LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT
573-
#endif
574-
575576
#ifndef WC_CONTAINERIZE_THIS
576577
#include <linux/crypto.h>
577578
#include <linux/scatterlist.h>
@@ -603,6 +604,7 @@
603604
#endif
604605
#define WC_LKM_REFCOUNT_TO_INT(refcount) wc_lkm_refcount_to_int(&(refcount))
605606
#endif /* !WC_CONTAINERIZE_THIS */
607+
606608
#endif /* LINUXKM_LKCAPI_REGISTER */
607609

608610
/* benchmarks.c uses floating point math, so needs a working
@@ -1778,6 +1780,11 @@
17781780

17791781
#endif
17801782

1783+
#ifdef LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT
1784+
struct crypto_rng;
1785+
WOLFSSL_API int wc_linux_kernel_rng_is_wolfcrypt(struct crypto_rng *rng);
1786+
#endif
1787+
17811788
/* Undo copied defines from wc_port.h, to avoid redefinition warnings. */
17821789
#ifdef HAVE_FIPS
17831790
#undef wc_InitMutex

linuxkm/lkcapi_sha_glue.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,18 @@ static void linuxkm_put_drbg(struct crypto_rng *tfm, struct wc_rng_bank_inst **d
11281128

11291129
#if defined(LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT) && defined(HAVE_HASHDRBG)
11301130

1131+
int wc_linux_kernel_rng_is_wolfcrypt(struct crypto_rng *rng) {
1132+
if (rng &&
1133+
wc_linuxkm_drbg_default_instance_registered &&
1134+
(rng->base.__crt_alg->cra_init == wc_linuxkm_drbg_init_tfm))
1135+
{
1136+
return 1;
1137+
}
1138+
else {
1139+
return 0;
1140+
}
1141+
}
1142+
11311143
static inline struct crypto_rng *get_crypto_default_rng(void) {
11321144
struct crypto_rng *current_crypto_default_rng = crypto_default_rng;
11331145

@@ -1149,7 +1161,6 @@ static inline struct crypto_rng *get_crypto_default_rng(void) {
11491161

11501162
if (current_crypto_default_rng->base.__crt_alg->cra_init != wc_linuxkm_drbg_init_tfm) {
11511163
pr_err("BUG: get_default_drbg_ctx() found wrong crypto_default_rng \"%s\"\n", crypto_tfm_alg_driver_name(&current_crypto_default_rng->base));
1152-
crypto_put_default_rng();
11531164
return NULL;
11541165
}
11551166

wolfcrypt/src/rng_bank.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ WOLFSSL_API int wc_BankRef_Release(WC_RNG *rng)
708708
return ret;
709709
}
710710

711-
#ifndef WC_RNG_BANK_STATIC
711+
#if !defined(WC_RNG_BANK_STATIC) && !defined(WC_NO_CONSTRUCTORS)
712712
WOLFSSL_API int wc_rng_new_bankref(struct wc_rng_bank *bank, WC_RNG **rng) {
713713
int ret;
714714

@@ -732,7 +732,7 @@ WOLFSSL_API int wc_rng_new_bankref(struct wc_rng_bank *bank, WC_RNG **rng) {
732732

733733
return ret;
734734
}
735-
#endif /* !WC_RNG_BANK_STATIC */
735+
#endif /* !WC_RNG_BANK_STATIC && !WC_NO_CONSTRUCTORS */
736736

737737
#endif /* WC_DRBG_BANKREF */
738738

wolfssl/wolfcrypt/rng_bank.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,9 @@ WOLFSSL_API int wc_InitRng_BankRef(struct wc_rng_bank *bank, WC_RNG *rng);
156156

157157
WOLFSSL_API int wc_BankRef_Release(WC_RNG *rng);
158158

159-
#ifndef WC_RNG_BANK_STATIC
159+
#if !defined(WC_RNG_BANK_STATIC) && !defined(WC_NO_CONSTRUCTORS)
160160
WOLFSSL_API int wc_rng_new_bankref(struct wc_rng_bank *bank, WC_RNG **rng);
161+
/* note, free with wc_rng_free(). */
161162
#endif
162163
#endif /* WC_DRBG_BANKREF */
163164

0 commit comments

Comments
 (0)