aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2011-12-12 09:59:14 -0600
committerRob Herring <rob.herring@calxeda.com>2011-12-28 08:26:06 -0600
commit93797d87d63d36404907640e4e20bb976bff4744 (patch)
treeb77b8c98e7fe64b05eada97ba8c0418ac2115c64 /kernel/irq
parentdt: add empty of_get_node/of_put_node functions (diff)
downloadlinux-dev-93797d87d63d36404907640e4e20bb976bff4744.tar.xz
linux-dev-93797d87d63d36404907640e4e20bb976bff4744.zip
irq: check domain hwirq range for DT translate
A DT node may have more than 1 domain associated with it, so make sure the hwirq number is within range when doing DT translation. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Acked-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Shawn Guo <shawn.guo@linaro.org> Cc: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/irq')
-rw-r--r--kernel/irq/irqdomain.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 200ce832c585..8bd7479b8390 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -135,6 +135,9 @@ int irq_domain_simple_dt_translate(struct irq_domain *d,
return -EINVAL;
if (intsize < 1)
return -EINVAL;
+ if (d->nr_irq && ((intspec[0] < d->hwirq_base) ||
+ (intspec[0] >= d->hwirq_base + d->nr_irq)))
+ return -EINVAL;
*out_hwirq = intspec[0];
*out_type = IRQ_TYPE_NONE;