xen/event: validate irq before get evtchn by irq
authorJoe Jin <joe.jin@oracle.com>
Fri, 7 Jan 2011 06:50:12 +0000 (14:50 +0800)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Mon, 10 Jan 2011 15:46:32 +0000 (10:46 -0500)
When retrieving the event channel number from irq, the irq
number may not be valid under some conditions.

So far that can be when we suspend/resume and irq ends with -1.
Validate and return sanitized irq and provide diagnostics information.

[v3: added unlikely on the WARN path]
[v2: reworded the commit message]
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tested-by: Gurudas Pai <gurudas.pai@oracle.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
drivers/xen/events.c

index 4d4a23d..3df7e47 100644 (file)
@@ -170,6 +170,9 @@ static struct irq_info *info_for_irq(unsigned irq)
 
 static unsigned int evtchn_from_irq(unsigned irq)
 {
+       if (unlikely(WARN(irq < 0 || irq >= nr_irqs, "Invalid irq %d!\n", irq)))
+               return 0;
+
        return info_for_irq(irq)->evtchn;
 }