drivers/tty/serial/8250/8250_mid.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
Commit b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected
platforms") replaced the dnv_board setup and exit callbacks with
PTR_IF(false, ...), which evaluates to NULL. However, the three call
sites in mid8250_probe() and mid8250_remove() unconditionally dereference
these function pointers without NULL checks, causing a NULL pointer
dereference (kernel oops) on any Denverton (DNV), Ice Lake Xeon D
(ICX-D/CDF), or Snowridge (SNR) platform.
Fix this by adding the missing NULL checks before calling the setup
and exit callbacks.
Fixes: b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected platforms")
Cc: stable@kernel.org
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Jiangshan Yi <yijiangshan@kylinos.cn>
---
drivers/tty/serial/8250/8250_mid.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_mid.c b/drivers/tty/serial/8250/8250_mid.c
index f88809ff370b..3c43a11ce4c9 100644
--- a/drivers/tty/serial/8250/8250_mid.c
+++ b/drivers/tty/serial/8250/8250_mid.c
@@ -318,7 +318,7 @@ static int mid8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
if (!uart.port.membase)
return -ENOMEM;
- ret = mid->board->setup(mid, &uart.port);
+ ret = mid->board->setup ? mid->board->setup(mid, &uart.port) : 0;
if (ret)
return ret;
@@ -336,7 +336,8 @@ static int mid8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return 0;
err:
- mid->board->exit(mid);
+ if (mid->board->exit)
+ mid->board->exit(mid);
return ret;
}
@@ -346,7 +347,8 @@ static void mid8250_remove(struct pci_dev *pdev)
serial8250_unregister_port(mid->line);
- mid->board->exit(mid);
+ if (mid->board->exit)
+ mid->board->exit(mid);
}
static const struct mid8250_board pnw_board = {
--
2.25.1
On Wed, Jul 15, 2026 at 11:03:36AM +0800, Jiangshan Yi wrote:
> Commit b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected
> platforms") replaced the dnv_board setup and exit callbacks with
> PTR_IF(false, ...), which evaluates to NULL. However, the three call
> sites in mid8250_probe() and mid8250_remove() unconditionally dereference
> these function pointers without NULL checks, causing a NULL pointer
> dereference (kernel oops) on any Denverton (DNV), Ice Lake Xeon D
> (ICX-D/CDF), or Snowridge (SNR) platform.
>
> Fix this by adding the missing NULL checks before calling the setup
> and exit callbacks.
Oh, thanks!
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
but I have a nit-pick below.
> Fixes: b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected platforms")
> Cc: stable@kernel.org
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
These two Cc may be moved either to --to option of `git format-patch` or after
the cutter '---' line to avoid unneeded noise in the commit message.
...
> - ret = mid->board->setup(mid, &uart.port);
> + ret = mid->board->setup ? mid->board->setup(mid, &uart.port) : 0;
> if (ret)
> return ret;
Likewise the rest, this can be also wrapped to the if-condition:
if (mid->board->setup) {
ret = mid->board->setup(mid, &uart.port);
if (ret)
return ret;
}
--
With Best Regards,
Andy Shevchenko
On Wed, Jul 15, 2026 at 11:03:36AM +0800, Andy Shevchenko wrote:
> Oh, thanks!
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> but I have a nit-pick below.
Hi Andy Shevchenko,
Thank you for the review and the suggestions!
You're right.I have updated the patch accordingly:
1. Changed the setup call from a ternary expression to an if-block
as suggested.
2. Removed the redundant Cc lines from the commit message body.
I will send the v2 version shortly.
Best regards,
Jiangshan Yi
© 2016 - 2026 Red Hat, Inc.