Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: adc: stm32-adc: Fix 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 converting to
irq_set_chained_handler_and_data().

Fixes: 1add69880240 ("iio: adc: Add support for STM32 ADC core")
Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Tested-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Reviewed-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Link: https://patch.msgid.link/20250515083101.3811350-1-nichen@iscas.ac.cn
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Chen Ni and committed by
Jonathan Cameron
e8ad5950 16285a09

+3 -4
+3 -4
drivers/iio/adc/stm32-adc-core.c
··· 430 430 return -ENOMEM; 431 431 } 432 432 433 - for (i = 0; i < priv->cfg->num_irqs; i++) { 434 - irq_set_chained_handler(priv->irq[i], stm32_adc_irq_handler); 435 - irq_set_handler_data(priv->irq[i], priv); 436 - } 433 + for (i = 0; i < priv->cfg->num_irqs; i++) 434 + irq_set_chained_handler_and_data(priv->irq[i], 435 + stm32_adc_irq_handler, priv); 437 436 438 437 return 0; 439 438 }