From beab99fe835be1d9ef1112dabdae3aa417126430 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 22 Jun 2015 11:31:34 +0200 Subject: 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 --- drivers/sh/intc/virq.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/sh') 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); -- cgit v1.2.3