Skip to content
This repository has been archived by the owner on Apr 20, 2023. It is now read-only.

Commit

Permalink
random: Fix fast_mix() function
Browse files Browse the repository at this point in the history
There was a bad typo in commit 43759d4f429c ("random: use an improved
fast_mix() function") and I didn't notice because it "looked right", so
I saw what I expected to see when I reviewed it.

Only months later did I look and notice it's not the Threefish-inspired
mix function that I had designed and optimized.

Mea Culpa.  Each input bit still has a chance to affect each output bit,
and the fast pool is spilled *long* before it fills, so it's not a total
disaster, but it's definitely not the intended great improvement.

I'm still working on finding better rotation constants.  These are good
enough, but since it's unrolled twice, it's possible to get better
mixing for free by using eight different constants rather than repeating
the same four.

Signed-off-by: George Spelvin <linux@horizon.com>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org  # v3.16+
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
George Spelvin authored and opnay committed Feb 15, 2015
1 parent 0d042d9 commit d6bd842
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/char/random.c
Original file line number Diff line number Diff line change
Expand Up @@ -569,19 +569,19 @@ static void fast_mix(struct fast_pool *f)
__u32 c = f->pool[2], d = f->pool[3];

a += b; c += d;
b = rol32(a, 6); d = rol32(c, 27);
b = rol32(b, 6); d = rol32(d, 27);
d ^= a; b ^= c;

a += b; c += d;
b = rol32(a, 16); d = rol32(c, 14);
b = rol32(b, 16); d = rol32(d, 14);
d ^= a; b ^= c;

a += b; c += d;
b = rol32(a, 6); d = rol32(c, 27);
b = rol32(b, 6); d = rol32(d, 27);
d ^= a; b ^= c;

a += b; c += d;
b = rol32(a, 16); d = rol32(c, 14);
b = rol32(b, 16); d = rol32(d, 14);
d ^= a; b ^= c;

f->pool[0] = a; f->pool[1] = b;
Expand Down

0 comments on commit d6bd842

Please sign in to comment.