Ver Fonte

hwrng: add randomness to system from rng sources

When bringing a new RNG source online, it seems like it would make sense
to use some of its bytes to make the system entropy pool more random,
as done with all sorts of other devices that contain per-device or
per-boot differences.

Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Kees Cook há 12 anos atrás
pai
commit
d9e7972619
1 ficheiros alterados com 7 adições e 0 exclusões
  1. 7 0
      drivers/char/hw_random/core.c

+ 7 - 0
drivers/char/hw_random/core.c

@@ -41,6 +41,7 @@
 #include <linux/miscdevice.h>
 #include <linux/miscdevice.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
+#include <linux/random.h>
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>
 
 
 
 
@@ -304,6 +305,8 @@ int hwrng_register(struct hwrng *rng)
 {
 {
 	int err = -EINVAL;
 	int err = -EINVAL;
 	struct hwrng *old_rng, *tmp;
 	struct hwrng *old_rng, *tmp;
+	unsigned char bytes[16];
+	int bytes_read;
 
 
 	if (rng->name == NULL ||
 	if (rng->name == NULL ||
 	    (rng->data_read == NULL && rng->read == NULL))
 	    (rng->data_read == NULL && rng->read == NULL))
@@ -344,6 +347,10 @@ int hwrng_register(struct hwrng *rng)
 	}
 	}
 	INIT_LIST_HEAD(&rng->list);
 	INIT_LIST_HEAD(&rng->list);
 	list_add_tail(&rng->list, &rng_list);
 	list_add_tail(&rng->list, &rng_list);
+
+	bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
+	if (bytes_read > 0)
+		add_device_randomness(bytes, bytes_read);
 out_unlock:
 out_unlock:
 	mutex_unlock(&rng_mutex);
 	mutex_unlock(&rng_mutex);
 out:
 out: