From: Thomas Gleixner Date: Mon, 22 Jun 2015 09:31:34 +0000 (+0200) Subject: sh/intc: Fix potential race in installing chained IRQ handler X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=beab99fe835be1d9ef1112dabdae3aa417126430;p=linux-beck.git sh/intc: Fix potential race in installing chained IRQ handler Fix a race where a pending interrupt could be received and the handler called before the handler's data has been setup, by moving the call to irq_set_chained_handler() after the function which sets up the handler data. Found by code inspection. Reported-by: Russell King Signed-off-by: Thomas Gleixner Cc: Simon Horman Cc: Magnus Damm Cc: linux-sh@vger.kernel.org --- diff --git a/drivers/sh/intc/virq.c b/drivers/sh/intc/virq.c index f30ac9354ff2..f5f1b821241a 100644 --- a/drivers/sh/intc/virq.c +++ b/drivers/sh/intc/virq.c @@ -243,8 +243,9 @@ restart: */ irq_set_nothread(irq); - irq_set_chained_handler(entry->pirq, intc_virq_handler); + /* Set handler data before installing the handler */ add_virq_to_pirq(entry->pirq, irq); + irq_set_chained_handler(entry->pirq, intc_virq_handler); radix_tree_tag_clear(&d->tree, entry->enum_id, INTC_TAG_VIRQ_NEEDS_ALLOC);