Skip to content

Commit

Permalink
random: fix error in entropy extraction
Browse files Browse the repository at this point in the history
Fix cast error in entropy extraction.
Add comments explaining the magic 16.
Remove extra confusing loop variable.

Signed-off-by: Matt Mackall <mpm@selenic.com>
Acked-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Matt Mackall authored and Linus Torvalds committed May 30, 2007
1 parent f717221 commit 602b6ae
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions drivers/char/random.c
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,

static void extract_buf(struct entropy_store *r, __u8 *out)
{
int i, x;
int i;
__u32 data[16], buf[5 + SHA_WORKSPACE_WORDS];

sha_init(buf);
Expand All @@ -772,17 +772,19 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
* attempts to find previous ouputs), unless the hash
* function can be inverted.
*/
for (i = 0, x = 0; i < r->poolinfo->poolwords; i += 16, x+=2) {
sha_transform(buf, (__u8 *)r->pool+i, buf + 5);
add_entropy_words(r, &buf[x % 5], 1);
for (i = 0; i < r->poolinfo->poolwords; i += 16) {
/* hash blocks of 16 words = 512 bits */
sha_transform(buf, (__u8 *)(r->pool + i), buf + 5);
/* feed back portion of the resulting hash */
add_entropy_words(r, &buf[i % 5], 1);
}

/*
* To avoid duplicates, we atomically extract a
* portion of the pool while mixing, and hash one
* final time.
*/
__add_entropy_words(r, &buf[x % 5], 1, data);
__add_entropy_words(r, &buf[i % 5], 1, data);
sha_transform(buf, (__u8 *)data, buf + 5);

/*
Expand Down

0 comments on commit 602b6ae

Please sign in to comment.