irq: check domain hwirq range for DT translate
authorRob Herring <rob.herring@calxeda.com>
Mon, 12 Dec 2011 15:59:14 +0000 (09:59 -0600)
committerRob Herring <rob.herring@calxeda.com>
Wed, 28 Dec 2011 14:26:06 +0000 (08:26 -0600)
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>
kernel/irq/irqdomain.c

index 200ce832c58543785f62f3c4b6e4d80dcddc80f1..8bd7479b83905243ddd8af60ce3ebeba0901c317 100644 (file)
@@ -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;