From: Greg Kroah-Hartman Date: Thu, 9 Aug 2012 19:49:10 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.5.2~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ff687f800a19663c232c5838606e125adbd1022e;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: random-create-add_device_randomness-interface.patch --- diff --git a/queue-3.4/random-create-add_device_randomness-interface.patch b/queue-3.4/random-create-add_device_randomness-interface.patch new file mode 100644 index 00000000000..ea82fceaefc --- /dev/null +++ b/queue-3.4/random-create-add_device_randomness-interface.patch @@ -0,0 +1,89 @@ +From a2080a67abe9e314f9e9c2cc3a4a176e8a8f8793 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Wed, 4 Jul 2012 11:16:01 -0400 +Subject: random: create add_device_randomness() interface + +From: Linus Torvalds + +commit a2080a67abe9e314f9e9c2cc3a4a176e8a8f8793 upstream. + +Add a new interface, add_device_randomness() for adding data to the +random pool that is likely to differ between two devices (or possibly +even per boot). This would be things like MAC addresses or serial +numbers, or the read-out of the RTC. This does *not* add any actual +entropy to the pool, but it initializes the pool to different values +for devices that might otherwise be identical and have very little +entropy available to them (particularly common in the embedded world). + +[ Modified by tytso to mix in a timestamp, since there may be some + variability caused by the time needed to detect/configure the hardware + in question. ] + +Signed-off-by: Linus Torvalds +Signed-off-by: "Theodore Ts'o" +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/random.c | 28 ++++++++++++++++++++++++++++ + include/linux/random.h | 1 + + 2 files changed, 29 insertions(+) + +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -125,11 +125,20 @@ + * The current exported interfaces for gathering environmental noise + * from the devices are: + * ++ * void add_device_randomness(const void *buf, unsigned int size); + * void add_input_randomness(unsigned int type, unsigned int code, + * unsigned int value); + * void add_interrupt_randomness(int irq, int irq_flags); + * void add_disk_randomness(struct gendisk *disk); + * ++ * add_device_randomness() is for adding data to the random pool that ++ * is likely to differ between two devices (or possibly even per boot). ++ * This would be things like MAC addresses or serial numbers, or the ++ * read-out of the RTC. This does *not* add any actual entropy to the ++ * pool, but it initializes the pool to different values for devices ++ * that might otherwise be identical and have very little entropy ++ * available to them (particularly common in the embedded world). ++ * + * add_input_randomness() uses the input layer interrupt timing, as well as + * the event type information from the hardware. + * +@@ -646,6 +655,25 @@ static void set_timer_rand_state(unsigne + } + #endif + ++/* ++ * Add device- or boot-specific data to the input and nonblocking ++ * pools to help initialize them to unique values. ++ * ++ * None of this adds any entropy, it is meant to avoid the ++ * problem of the nonblocking pool having similar initial state ++ * across largely identical devices. ++ */ ++void add_device_randomness(const void *buf, unsigned int size) ++{ ++ unsigned long time = get_cycles() ^ jiffies; ++ ++ mix_pool_bytes(&input_pool, buf, size, NULL); ++ mix_pool_bytes(&input_pool, &time, sizeof(time), NULL); ++ mix_pool_bytes(&nonblocking_pool, buf, size, NULL); ++ mix_pool_bytes(&nonblocking_pool, &time, sizeof(time), NULL); ++} ++EXPORT_SYMBOL(add_device_randomness); ++ + static struct timer_rand_state input_timer_state; + + /* +--- a/include/linux/random.h ++++ b/include/linux/random.h +@@ -50,6 +50,7 @@ struct rnd_state { + + extern void rand_initialize_irq(int irq); + ++extern void add_device_randomness(const void *, unsigned int); + extern void add_input_randomness(unsigned int type, unsigned int code, + unsigned int value); + extern void add_interrupt_randomness(int irq, int irq_flags); diff --git a/queue-3.4/series b/queue-3.4/series index e9f41b924ee..23b1ca93df6 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -29,3 +29,4 @@ wireless-reg-restore-previous-behaviour-of-chan-max_power-calculations.patch x86-nops-missing-break-resulting-in-incorrect-selection-on-intel.patch random-make-add_interrupt_randomness-do-something-sane.patch random-use-lockless-techniques-in-the-interrupt-path.patch +random-create-add_device_randomness-interface.patch