@@ -1184,7 +1184,9 @@ static struct rng_alg wc_linuxkm_drbg = {
11841184};
11851185static int wc_linuxkm_drbg_loaded = 0 ;
11861186
1187- #if defined(LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT ) && \
1187+ #ifdef NO_LINUXKM_DRBG_GET_RANDOM_BYTES
1188+ #undef LINUXKM_DRBG_GET_RANDOM_BYTES
1189+ #elif defined(LINUXKM_LKCAPI_REGISTER_HASH_DRBG_DEFAULT ) && \
11881190 (defined(WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS ) || defined(WOLFSSL_LINUXKM_USE_GET_RANDOM_KPROBES ))
11891191 #ifndef LINUXKM_DRBG_GET_RANDOM_BYTES
11901192 #define LINUXKM_DRBG_GET_RANDOM_BYTES
@@ -1475,9 +1477,7 @@ static int wc_get_random_bytes_kprobe_installed = 0;
14751477
14761478/* note, we can't kprobe _get_random_bytes() because it's inlined. */
14771479
1478- struct wc_get_random_bytes_user_kretprobe_ctx {
1479- unsigned long retval ;
1480- };
1480+ #ifdef WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE
14811481
14821482#warning Interception of /dev/random, /dev/urandom, and getrandom() using \
14831483 wc_get_random_bytes_user_kretprobe_enter() is known to destabilize large \
@@ -1486,6 +1486,10 @@ struct wc_get_random_bytes_user_kretprobe_ctx {
14861486 /dev/urandom reads. When in doubt, patch your kernel, activating \
14871487 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS.
14881488
1489+ struct wc_get_random_bytes_user_kretprobe_ctx {
1490+ unsigned long retval ;
1491+ };
1492+
14891493static int wc_get_random_bytes_user_kretprobe_enter (struct kretprobe_instance * p , struct pt_regs * regs )
14901494{
14911495 struct iov_iter * iter = (struct iov_iter * )regs -> di ;
@@ -1586,6 +1590,8 @@ static struct kretprobe wc_get_random_bytes_user_kretprobe = {
15861590};
15871591static int wc_get_random_bytes_user_kretprobe_installed = 0 ;
15881592
1593+ #endif /* WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE */
1594+
15891595#else /* !WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS && !(CONFIG_KPROBES && CONFIG_X86) */
15901596 #error LINUXKM_DRBG_GET_RANDOM_BYTES implementation missing for target architecture/configuration.
15911597#endif
@@ -1777,6 +1783,7 @@ static int wc_linuxkm_drbg_startup(void)
17771783 pr_err ("ERROR: wc_get_random_bytes_kprobe installation failed: %d\n" , ret );
17781784 }
17791785
1786+ #ifdef WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE
17801787 ret = register_kretprobe (& wc_get_random_bytes_user_kretprobe );
17811788 if (ret == 0 ) {
17821789 wc_get_random_bytes_user_kretprobe_installed = 1 ;
@@ -1785,6 +1792,7 @@ static int wc_linuxkm_drbg_startup(void)
17851792 else {
17861793 pr_err ("ERROR: wc_get_random_bytes_user_kprobe installation failed: %d\n" , ret );
17871794 }
1795+ #endif /* WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE */
17881796
17891797 #else
17901798 #error LINUXKM_DRBG_GET_RANDOM_BYTES missing installation calls.
@@ -1846,15 +1854,17 @@ static int wc_linuxkm_drbg_cleanup(void) {
18461854 unregister_kprobe (& wc_get_random_bytes_kprobe );
18471855 pr_info ("wc_get_random_bytes_kprobe uninstalled\n" );
18481856 }
1857+ #ifdef WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE
18491858 if (wc_get_random_bytes_user_kretprobe_installed ) {
18501859 wc_get_random_bytes_user_kretprobe_installed = 0 ;
18511860 barrier ();
18521861 unregister_kretprobe (& wc_get_random_bytes_user_kretprobe );
18531862 pr_info ("wc_get_random_bytes_user_kretprobe uninstalled\n" );
18541863 }
1864+ #endif /* WOLFSSL_LINUXKM_USE_GET_RANDOM_USER_KRETPROBE */
18551865
18561866 #else
1857- #error LINUXKM_DRBG_GET_RANDOM_BYTES missing installation calls.
1867+ #error LINUXKM_DRBG_GET_RANDOM_BYTES missing deinstallation calls.
18581868 #endif
18591869
18601870 #endif /* LINUXKM_DRBG_GET_RANDOM_BYTES */
0 commit comments