[PATCH 2/8] drivers/char/random: Split out __get_random_int

From: George Spelvin
Date: Tue Mar 15 2011 - 22:28:44 EST


The unlocked function is needed for following work.
No API change.

(Minor functional change while messing with code: all 64 bits of
the cycles counter is used. No API change.)
---
drivers/char/random.c | 27 +++++++++++++++++----------
1 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/char/random.c b/drivers/char/random.c
index 4bcc4f2..fdbf7b6 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1621,22 +1621,29 @@ EXPORT_SYMBOL(secure_dccp_sequence_number);
/*
* Get a random word for internal kernel use only. Similar to urandom but
* with the goal of minimal entropy pool depletion. As a result, the random
- * value is not cryptographically secure but for several uses the cost of
- * depleting entropy is too high
+ * value is not strongly cryptographically secure, but for several uses the
+ * cost of depleting entropy is too high.
*/
DEFINE_PER_CPU(__u32 [4], get_random_int_hash);
-unsigned int get_random_int(void)
+static u32 __get_random_int(u32 *hash)
{
- struct keydata *keyptr;
- __u32 *hash = get_cpu_var(get_random_int_hash);
- int ret;
+ struct keydata const *keyptr = get_keyptr();
+ cycles_t c = get_cycles();

- keyptr = get_keyptr();
- hash[0] += current->pid + jiffies + get_cycles();
+ /* Throw in some extra seed material */
+ hash[0] += (__u32)c;
+ hash[1] += (__u32)(c>>16>>16); /* Safe if cycles_it is 32 bits. */
+ hash[2] += current->pid + jiffies;

- ret = half_md4_transform(hash, keyptr->secret);
- put_cpu_var(get_random_int_hash);
+ return half_md4_transform(hash, keyptr->secret);
+}

+unsigned int get_random_int(void)
+{
+ u32 *hash = get_cpu_var(get_random_int_hash);
+ u32 ret = __get_random_int(hash);
+
+ put_cpu_var(get_random_int_hash);
return ret;
}

--
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/