Commit d89a6713 authored by Stephan Mueller's avatar Stephan Mueller Committed by Herbert Xu

crypto: drbg - do not call drbg_instantiate in healt test

When calling the DRBG health test in FIPS mode, the Jitter RNG is not
yet present in the kernel crypto API which will cause the instantiation
to fail and thus the health test to fail.

As the health tests cover the enforcement of various thresholds, invoke
the functions that are supposed to enforce the thresholds directly.

This patch also saves precious seed.
Reported-by: default avatarTapas Sarangi <TSarangi@trustwave.com>
Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent c5f91cde
...@@ -1917,6 +1917,8 @@ static inline int __init drbg_healthcheck_sanity(void) ...@@ -1917,6 +1917,8 @@ static inline int __init drbg_healthcheck_sanity(void)
return -ENOMEM; return -ENOMEM;
mutex_init(&drbg->drbg_mutex); mutex_init(&drbg->drbg_mutex);
drbg->core = &drbg_cores[coreref];
drbg->reseed_threshold = drbg_max_requests(drbg);
/* /*
* if the following tests fail, it is likely that there is a buffer * if the following tests fail, it is likely that there is a buffer
...@@ -1926,12 +1928,6 @@ static inline int __init drbg_healthcheck_sanity(void) ...@@ -1926,12 +1928,6 @@ static inline int __init drbg_healthcheck_sanity(void)
* grave bug. * grave bug.
*/ */
/* get a valid instance of DRBG for following tests */
ret = drbg_instantiate(drbg, NULL, coreref, pr);
if (ret) {
rc = ret;
goto outbuf;
}
max_addtllen = drbg_max_addtl(drbg); max_addtllen = drbg_max_addtl(drbg);
max_request_bytes = drbg_max_request_bytes(drbg); max_request_bytes = drbg_max_request_bytes(drbg);
drbg_string_fill(&addtl, buf, max_addtllen + 1); drbg_string_fill(&addtl, buf, max_addtllen + 1);
...@@ -1941,10 +1937,9 @@ static inline int __init drbg_healthcheck_sanity(void) ...@@ -1941,10 +1937,9 @@ static inline int __init drbg_healthcheck_sanity(void)
/* overflow max_bits */ /* overflow max_bits */
len = drbg_generate(drbg, buf, (max_request_bytes + 1), NULL); len = drbg_generate(drbg, buf, (max_request_bytes + 1), NULL);
BUG_ON(0 < len); BUG_ON(0 < len);
drbg_uninstantiate(drbg);
/* overflow max addtllen with personalization string */ /* overflow max addtllen with personalization string */
ret = drbg_instantiate(drbg, &addtl, coreref, pr); ret = drbg_seed(drbg, &addtl, false);
BUG_ON(0 == ret); BUG_ON(0 == ret);
/* all tests passed */ /* all tests passed */
rc = 0; rc = 0;
...@@ -1952,9 +1947,7 @@ static inline int __init drbg_healthcheck_sanity(void) ...@@ -1952,9 +1947,7 @@ static inline int __init drbg_healthcheck_sanity(void)
pr_devel("DRBG: Sanity tests for failure code paths successfully " pr_devel("DRBG: Sanity tests for failure code paths successfully "
"completed\n"); "completed\n");
drbg_uninstantiate(drbg); kfree(drbg);
outbuf:
kzfree(drbg);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment