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

Configure Feed

Select the types of activity you want to include in your feed.

fsl_lpuart: Don't enable interrupts too early

If an irq is pending when devm_request_irq() is called, the irq
handler will cause a NULL pointer access because initialisation
is not done yet.

Fixes: 9d7ee0e28da59 ("tty: serial: lpuart: avoid report NULL interrupt")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Indan Zupancic <Indan.Zupancic@mep-info.com>
Link: https://lore.kernel.org/r/20220505114750.45423-1-Indan.Zupancic@mep-info.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Indan Zupancic and committed by
Greg Kroah-Hartman
401fb66a 9361ebfb

+9 -9
+9 -9
drivers/tty/serial/fsl_lpuart.c
··· 2664 2664 struct device_node *np = pdev->dev.of_node; 2665 2665 struct lpuart_port *sport; 2666 2666 struct resource *res; 2667 + irq_handler_t handler; 2667 2668 int ret; 2668 2669 2669 2670 sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL); ··· 2742 2741 2743 2742 if (lpuart_is_32(sport)) { 2744 2743 lpuart_reg.cons = LPUART32_CONSOLE; 2745 - ret = devm_request_irq(&pdev->dev, sport->port.irq, lpuart32_int, 0, 2746 - DRIVER_NAME, sport); 2744 + handler = lpuart32_int; 2747 2745 } else { 2748 2746 lpuart_reg.cons = LPUART_CONSOLE; 2749 - ret = devm_request_irq(&pdev->dev, sport->port.irq, lpuart_int, 0, 2750 - DRIVER_NAME, sport); 2747 + handler = lpuart_int; 2751 2748 } 2752 - 2753 - if (ret) 2754 - goto failed_irq_request; 2755 - 2756 2749 ret = uart_add_one_port(&lpuart_reg, &sport->port); 2757 2750 if (ret) 2758 2751 goto failed_attach_port; ··· 2768 2773 2769 2774 sport->port.rs485_config(&sport->port, &sport->port.rs485); 2770 2775 2776 + ret = devm_request_irq(&pdev->dev, sport->port.irq, handler, 0, 2777 + DRIVER_NAME, sport); 2778 + if (ret) 2779 + goto failed_irq_request; 2780 + 2771 2781 return 0; 2772 2782 2783 + failed_irq_request: 2773 2784 failed_get_rs485: 2774 2785 failed_reset: 2775 2786 uart_remove_one_port(&lpuart_reg, &sport->port); 2776 2787 failed_attach_port: 2777 - failed_irq_request: 2778 2788 lpuart_disable_clks(sport); 2779 2789 failed_clock_enable: 2780 2790 failed_out_of_range: