Просмотр исходного кода

gpio: Fix potential NULL handler data in chained irqchip handler

There is possibility with misconfigured pins that interrupt occurs instantly
after setting irq_set_chained_handler() in gpiochip_set_chained_irqchip().
Now if handler gets called before irq_set_handler_data() the handler gets
NULL handler data.

Fix this by moving irq_set_handler_data() call before
irq_set_chained_handler() in gpiochip_set_chained_irqchip().

Cc: Stable <stable@vger.kernel.org> # 3.15+
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Jarkko Nikula 11 лет назад
Родитель
Сommit
324b039878
1 измененных файлов с 1 добавлено и 1 удалено
  1. 1 1
      drivers/gpio/gpiolib.c

+ 1 - 1
drivers/gpio/gpiolib.c

@@ -413,12 +413,12 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
 		return;
 		return;
 	}
 	}
 
 
-	irq_set_chained_handler(parent_irq, parent_handler);
 	/*
 	/*
 	 * The parent irqchip is already using the chip_data for this
 	 * The parent irqchip is already using the chip_data for this
 	 * irqchip, so our callbacks simply use the handler_data.
 	 * irqchip, so our callbacks simply use the handler_data.
 	 */
 	 */
 	irq_set_handler_data(parent_irq, gpiochip);
 	irq_set_handler_data(parent_irq, gpiochip);
+	irq_set_chained_handler(parent_irq, parent_handler);
 }
 }
 EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
 EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);