]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: fsl: qe: qe_ports_ic: Consolidate chained IRQ handler install/remove
authorChen Ni <nichen@iscas.ac.cn>
Mon, 19 Jan 2026 05:57:15 +0000 (13:57 +0800)
committerChristophe Leroy (CS GROUP) <chleroy@kernel.org>
Wed, 21 Jan 2026 07:55:37 +0000 (08:55 +0100)
The driver currently sets the handler data and the chained handler in
two separate steps. This creates a theoretical race window where an
interrupt could fire after the handler is set but before the data is
assigned, leading to a NULL pointer dereference.

Replace the two calls with irq_set_chained_handler_and_data() to set
both the handler and its data atomically under the irq_desc->lock.

Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
Link: https://lore.kernel.org/r/20260119055715.889001-1-nichen@iscas.ac.cn
Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
drivers/soc/fsl/qe/qe_ports_ic.c

index 61dd09fec6f6ed0b21888afd361ca7b42c5d45df..8e2107e2cde5b29635888848f20dba47ad65bb83 100644 (file)
@@ -114,8 +114,7 @@ static int qepic_probe(struct platform_device *pdev)
        if (!data->host)
                return -ENODEV;
 
-       irq_set_handler_data(irq, data);
-       irq_set_chained_handler(irq, qepic_cascade);
+       irq_set_chained_handler_and_data(irq, qepic_cascade, data);
 
        return 0;
 }