* [PATCH v1 1/1] serial: 8250_port: Check IRQ data before use
@ 2023-08-31 22:25 Andy Shevchenko
2023-08-31 23:08 ` Florian Fainelli
0 siblings, 1 reply; 2+ messages in thread
From: Andy Shevchenko @ 2023-08-31 22:25 UTC (permalink / raw)
To: Greg Kroah-Hartman, Ilpo Järvinen, linux-kernel, linux-serial
Cc: Jiri Slaby, Florian Fainelli, Andy Shevchenko
In case the leaf driver wants to use IRQ polling (irq = 0) and
IIR register shows that an interrupt happened in the 8250 hardware
the IRQ data can be NULL. In such a case we need to skip the wake
event as we came to this path from the timer interrupt and quite
likely system is already awake.
Without this fix we have got an Oops:
serial8250: ttyS0 at I/O 0x3f8 (irq = 0, base_baud = 115200) is a 16550A
...
BUG: kernel NULL pointer dereference, address: 0000000000000010
RIP: 0010:serial8250_handle_irq+0x7c/0x240
Call Trace:
? serial8250_handle_irq+0x7c/0x240
? __pfx_serial8250_timeout+0x10/0x10
Fixes: 0ba9e3a13c6a ("serial: 8250: Add missing wakeup event reporting")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/tty/serial/8250/8250_port.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index fb891b67968f..141627370aab 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -1936,7 +1936,10 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
skip_rx = true;
if (status & (UART_LSR_DR | UART_LSR_BI) && !skip_rx) {
- if (irqd_is_wakeup_set(irq_get_irq_data(port->irq)))
+ struct irq_data *d;
+
+ d = irq_get_irq_data(port->irq);
+ if (d && irqd_is_wakeup_set(d))
pm_wakeup_event(tport->tty->dev, 0);
if (!up->dma || handle_rx_dma(up, iir))
status = serial8250_rx_chars(up, status);
--
2.40.0.1.gaa8946217a0b
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v1 1/1] serial: 8250_port: Check IRQ data before use
2023-08-31 22:25 [PATCH v1 1/1] serial: 8250_port: Check IRQ data before use Andy Shevchenko
@ 2023-08-31 23:08 ` Florian Fainelli
0 siblings, 0 replies; 2+ messages in thread
From: Florian Fainelli @ 2023-08-31 23:08 UTC (permalink / raw)
To: Andy Shevchenko, Greg Kroah-Hartman, Ilpo Järvinen,
linux-kernel, linux-serial
Cc: Jiri Slaby
On 8/31/23 15:25, Andy Shevchenko wrote:
> In case the leaf driver wants to use IRQ polling (irq = 0) and
> IIR register shows that an interrupt happened in the 8250 hardware
> the IRQ data can be NULL. In such a case we need to skip the wake
> event as we came to this path from the timer interrupt and quite
> likely system is already awake.
I suppose that is fair to say.
>
> Without this fix we have got an Oops:
>
> serial8250: ttyS0 at I/O 0x3f8 (irq = 0, base_baud = 115200) is a 16550A
> ...
> BUG: kernel NULL pointer dereference, address: 0000000000000010
> RIP: 0010:serial8250_handle_irq+0x7c/0x240
> Call Trace:
> ? serial8250_handle_irq+0x7c/0x240
> ? __pfx_serial8250_timeout+0x10/0x10
>
> Fixes: 0ba9e3a13c6a ("serial: 8250: Add missing wakeup event reporting")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Thanks Andy!
--
Florian
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-08-31 23:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-31 22:25 [PATCH v1 1/1] serial: 8250_port: Check IRQ data before use Andy Shevchenko
2023-08-31 23:08 ` Florian Fainelli
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®