Commit 3630056d authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6

Pull crypto fixes from Herbert Xu:
 "This fixes the newly added drbg generator so that it actually works on
  32-bit machines.  Previously the code was only tested on 64-bit and on
  32-bit it overflowed and simply doesn't work"

* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  crypto: drbg - remove check for uninitialized DRBG handle
  crypto: drbg - backport "fix maximum value checks on 32 bit systems"
parents 9e82bf01 78f543a9
...@@ -1922,9 +1922,6 @@ static inline int __init drbg_healthcheck_sanity(void) ...@@ -1922,9 +1922,6 @@ static inline int __init drbg_healthcheck_sanity(void)
/* overflow max addtllen with personalization string */ /* overflow max addtllen with personalization string */
ret = drbg_instantiate(drbg, &addtl, coreref, pr); ret = drbg_instantiate(drbg, &addtl, coreref, pr);
BUG_ON(0 == ret); BUG_ON(0 == ret);
/* test uninstantated DRBG */
len = drbg_generate(drbg, buf, (max_request_bytes + 1), NULL);
BUG_ON(0 < len);
/* all tests passed */ /* all tests passed */
rc = 0; rc = 0;
......
...@@ -162,12 +162,25 @@ static inline size_t drbg_max_request_bytes(struct drbg_state *drbg) ...@@ -162,12 +162,25 @@ static inline size_t drbg_max_request_bytes(struct drbg_state *drbg)
static inline size_t drbg_max_addtl(struct drbg_state *drbg) static inline size_t drbg_max_addtl(struct drbg_state *drbg)
{ {
#if (__BITS_PER_LONG == 32)
/*
* SP800-90A allows smaller maximum numbers to be returned -- we
* return SIZE_MAX - 1 to allow the verification of the enforcement
* of this value in drbg_healthcheck_sanity.
*/
return (SIZE_MAX - 1);
#else
return (1UL<<(drbg->core->max_addtllen)); return (1UL<<(drbg->core->max_addtllen));
#endif
} }
static inline size_t drbg_max_requests(struct drbg_state *drbg) static inline size_t drbg_max_requests(struct drbg_state *drbg)
{ {
#if (__BITS_PER_LONG == 32)
return SIZE_MAX;
#else
return (1UL<<(drbg->core->max_req)); return (1UL<<(drbg->core->max_req));
#endif
} }
/* /*
......
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