diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 22:07:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 22:07:42 -0400 |
commit | 3e9a97082fa639394e905e1fc4a0a7f719ca7644 (patch) | |
tree | 9985cfa26e0597128eae03a2ee7e4614efea571f /kernel/irq | |
parent | 941c8726e4e737e74d418ccec3d8e7b946a65541 (diff) | |
parent | d2e7c96af1e54b507ae2a6a7dd2baf588417a7e5 (diff) |
Merge tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random
Pull random subsystem patches from Ted Ts'o:
"This patch series contains a major revamp of how we collect entropy
from interrupts for /dev/random and /dev/urandom.
The goal is to addresses weaknesses discussed in the paper "Mining
your Ps and Qs: Detection of Widespread Weak Keys in Network Devices",
by Nadia Heninger, Zakir Durumeric, Eric Wustrow, J. Alex Halderman,
which will be published in the Proceedings of the 21st Usenix Security
Symposium, August 2012. (See https://factorable.net for more
information and an extended version of the paper.)"
Fix up trivial conflicts due to nearby changes in
drivers/{mfd/ab3100-core.c, usb/gadget/omap_udc.c}
* tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random: (33 commits)
random: mix in architectural randomness in extract_buf()
dmi: Feed DMI table to /dev/random driver
random: Add comment to random_initialize()
random: final removal of IRQF_SAMPLE_RANDOM
um: remove IRQF_SAMPLE_RANDOM which is now a no-op
sparc/ldc: remove IRQF_SAMPLE_RANDOM which is now a no-op
[ARM] pxa: remove IRQF_SAMPLE_RANDOM which is now a no-op
board-palmz71: remove IRQF_SAMPLE_RANDOM which is now a no-op
isp1301_omap: remove IRQF_SAMPLE_RANDOM which is now a no-op
pxa25x_udc: remove IRQF_SAMPLE_RANDOM which is now a no-op
omap_udc: remove IRQF_SAMPLE_RANDOM which is now a no-op
goku_udc: remove IRQF_SAMPLE_RANDOM which was commented out
uartlite: remove IRQF_SAMPLE_RANDOM which is now a no-op
drivers: hv: remove IRQF_SAMPLE_RANDOM which is now a no-op
xen-blkfront: remove IRQF_SAMPLE_RANDOM which is now a no-op
n2_crypto: remove IRQF_SAMPLE_RANDOM which is now a no-op
pda_power: remove IRQF_SAMPLE_RANDOM which is now a no-op
i2c-pmcmsp: remove IRQF_SAMPLE_RANDOM which is now a no-op
input/serio/hp_sdc.c: remove IRQF_SAMPLE_RANDOM which is now a no-op
mfd: remove IRQF_SAMPLE_RANDOM which is now a no-op
...
Diffstat (limited to 'kernel/irq')
-rw-r--r-- | kernel/irq/handle.c | 7 | ||||
-rw-r--r-- | kernel/irq/manage.c | 17 |
2 files changed, 3 insertions, 21 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index bdb180325551..131ca176b497 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
@@ -133,7 +133,7 @@ irqreturn_t | |||
133 | handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) | 133 | handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) |
134 | { | 134 | { |
135 | irqreturn_t retval = IRQ_NONE; | 135 | irqreturn_t retval = IRQ_NONE; |
136 | unsigned int random = 0, irq = desc->irq_data.irq; | 136 | unsigned int flags = 0, irq = desc->irq_data.irq; |
137 | 137 | ||
138 | do { | 138 | do { |
139 | irqreturn_t res; | 139 | irqreturn_t res; |
@@ -161,7 +161,7 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) | |||
161 | 161 | ||
162 | /* Fall through to add to randomness */ | 162 | /* Fall through to add to randomness */ |
163 | case IRQ_HANDLED: | 163 | case IRQ_HANDLED: |
164 | random |= action->flags; | 164 | flags |= action->flags; |
165 | break; | 165 | break; |
166 | 166 | ||
167 | default: | 167 | default: |
@@ -172,8 +172,7 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) | |||
172 | action = action->next; | 172 | action = action->next; |
173 | } while (action); | 173 | } while (action); |
174 | 174 | ||
175 | if (random & IRQF_SAMPLE_RANDOM) | 175 | add_interrupt_randomness(irq, flags); |
176 | add_interrupt_randomness(irq); | ||
177 | 176 | ||
178 | if (!noirqdebug) | 177 | if (!noirqdebug) |
179 | note_interrupt(irq, desc, retval); | 178 | note_interrupt(irq, desc, retval); |
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 814c9ef6bba1..0a8e8f059627 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -893,22 +893,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) | |||
893 | return -ENOSYS; | 893 | return -ENOSYS; |
894 | if (!try_module_get(desc->owner)) | 894 | if (!try_module_get(desc->owner)) |
895 | return -ENODEV; | 895 | return -ENODEV; |
896 | /* | ||
897 | * Some drivers like serial.c use request_irq() heavily, | ||
898 | * so we have to be careful not to interfere with a | ||
899 | * running system. | ||
900 | */ | ||
901 | if (new->flags & IRQF_SAMPLE_RANDOM) { | ||
902 | /* | ||
903 | * This function might sleep, we want to call it first, | ||
904 | * outside of the atomic block. | ||
905 | * Yes, this might clear the entropy pool if the wrong | ||
906 | * driver is attempted to be loaded, without actually | ||
907 | * installing a new handler, but is this really a problem, | ||
908 | * only the sysadmin is able to do this. | ||
909 | */ | ||
910 | rand_initialize_irq(irq); | ||
911 | } | ||
912 | 896 | ||
913 | /* | 897 | /* |
914 | * Check whether the interrupt nests into another interrupt | 898 | * Check whether the interrupt nests into another interrupt |
@@ -1354,7 +1338,6 @@ EXPORT_SYMBOL(free_irq); | |||
1354 | * Flags: | 1338 | * Flags: |
1355 | * | 1339 | * |
1356 | * IRQF_SHARED Interrupt is shared | 1340 | * IRQF_SHARED Interrupt is shared |
1357 | * IRQF_SAMPLE_RANDOM The interrupt can be used for entropy | ||
1358 | * IRQF_TRIGGER_* Specify active edge(s) or level | 1341 | * IRQF_TRIGGER_* Specify active edge(s) or level |
1359 | * | 1342 | * |
1360 | */ | 1343 | */ |