From: Navid Emamdoost <navid.emamdoost@gmail.com> To: unlisted-recipients:; (no To-header on input) Cc: emamd001@umn.edu, kjlu@umn.edu, smccaman@umn.edu, Navid Emamdoost <navid.emamdoost@gmail.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Vinod Koul <vkoul@kernel.org>, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] 8250_lpss: check null return when calling pci_ioremap_bar Date: Thu, 18 Jul 2019 21:54:42 -0500 [thread overview] Message-ID: <20190719025443.2368-1-navid.emamdoost@gmail.com> (raw) pci_ioremap_bar may return null. This is eventually de-referenced at drivers/dma/dw/core.c:1154 and drivers/dma/dw/core.c:1168. A null check is needed to prevent null de-reference. I am adding the check and in case of failure returning -ENOMEM (I am not sure this is the best errno, you may consider it as a placeholder), and subsequently changing the caller’s return type, and propagating the error. Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com> --- drivers/tty/serial/8250/8250_lpss.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c index 53ca9ba6ab4b..5954b2e09b76 100644 --- a/drivers/tty/serial/8250/8250_lpss.c +++ b/drivers/tty/serial/8250/8250_lpss.c @@ -161,7 +161,7 @@ static const struct dw_dma_platform_data qrk_serial_dma_pdata = { .multi_block = {0}, }; -static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) +static int qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) { struct uart_8250_dma *dma = &lpss->dma; struct dw_dma_chip *chip = &lpss->dma_chip; @@ -172,12 +172,14 @@ static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) chip->dev = &pdev->dev; chip->irq = pci_irq_vector(pdev, 0); chip->regs = pci_ioremap_bar(pdev, 1); + if (!chip->regs) + return -ENOMEM; chip->pdata = &qrk_serial_dma_pdata; /* Falling back to PIO mode if DMA probing fails */ ret = dw_dma_probe(chip); if (ret) - return; + return 0; pci_try_set_mwi(pdev); @@ -191,6 +193,7 @@ static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) param->hs_polarity = true; lpss->dma_maxburst = 8; + return 0; } static void qrk_serial_exit_dma(struct lpss8250 *lpss) @@ -219,7 +222,9 @@ static int qrk_serial_setup(struct lpss8250 *lpss, struct uart_port *port) port->irq = pci_irq_vector(pdev, 0); - qrk_serial_setup_dma(lpss, port); + ret = qrk_serial_setup_dma(lpss, port); + if (ret < 0) + return ret; return 0; } -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Navid Emamdoost <navid.emamdoost@gmail.com> Cc: emamd001@umn.edu, kjlu@umn.edu, smccaman@umn.edu, Navid Emamdoost <navid.emamdoost@gmail.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Vinod Koul <vkoul@kernel.org>, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] 8250_lpss: check null return when calling pci_ioremap_bar Date: Thu, 18 Jul 2019 21:54:42 -0500 [thread overview] Message-ID: <20190719025443.2368-1-navid.emamdoost@gmail.com> (raw) pci_ioremap_bar may return null. This is eventually de-referenced at drivers/dma/dw/core.c:1154 and drivers/dma/dw/core.c:1168. A null check is needed to prevent null de-reference. I am adding the check and in case of failure returning -ENOMEM (I am not sure this is the best errno, you may consider it as a placeholder), and subsequently changing the caller’s return type, and propagating the error. Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com> --- drivers/tty/serial/8250/8250_lpss.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c index 53ca9ba6ab4b..5954b2e09b76 100644 --- a/drivers/tty/serial/8250/8250_lpss.c +++ b/drivers/tty/serial/8250/8250_lpss.c @@ -161,7 +161,7 @@ static const struct dw_dma_platform_data qrk_serial_dma_pdata = { .multi_block = {0}, }; -static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) +static int qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) { struct uart_8250_dma *dma = &lpss->dma; struct dw_dma_chip *chip = &lpss->dma_chip; @@ -172,12 +172,14 @@ static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) chip->dev = &pdev->dev; chip->irq = pci_irq_vector(pdev, 0); chip->regs = pci_ioremap_bar(pdev, 1); + if (!chip->regs) + return -ENOMEM; chip->pdata = &qrk_serial_dma_pdata; /* Falling back to PIO mode if DMA probing fails */ ret = dw_dma_probe(chip); if (ret) - return; + return 0; pci_try_set_mwi(pdev); @@ -191,6 +193,7 @@ static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) param->hs_polarity = true; lpss->dma_maxburst = 8; + return 0; } static void qrk_serial_exit_dma(struct lpss8250 *lpss) @@ -219,7 +222,9 @@ static int qrk_serial_setup(struct lpss8250 *lpss, struct uart_port *port) port->irq = pci_irq_vector(pdev, 0); - qrk_serial_setup_dma(lpss, port); + ret = qrk_serial_setup_dma(lpss, port); + if (ret < 0) + return ret; return 0; } -- 2.17.1
next reply other threads:[~2019-07-19 2:55 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-07-19 2:54 Navid Emamdoost [this message] 2019-07-19 2:54 ` [PATCH] 8250_lpss: check null return when calling pci_ioremap_bar Navid Emamdoost 2019-07-19 13:37 ` Andy Shevchenko 2019-07-19 15:15 ` Andy Shevchenko 2019-07-19 17:48 ` [PATCH v2] " Navid Emamdoost 2019-07-19 22:36 ` Andy Shevchenko [not found] ` <CGME20190726113223eucas1p287f8f2df03f66658bd492c592fd426e6@eucas1p2.samsung.com> 2019-07-26 11:32 ` Bartlomiej Zolnierkiewicz 2019-07-26 11:57 ` Andy Shevchenko 2019-07-26 19:53 ` [PATCH v3] " Navid Emamdoost [not found] ` <CAEkB2ERhxLj7ogoy1E3j8d4MyEZqroWS1tPRxyJXR2oLhNz+LQ@mail.gmail.com> 2019-09-07 15:53 ` Andy Shevchenko [not found] ` <CAEkB2ET-SQFiBbroxDFEVrPxto6a2wLJf0NM7R=ERcPargr66Q@mail.gmail.com> 2019-09-07 16:16 ` Andy Shevchenko 2019-07-19 13:58 ` [PATCH] " kbuild test robot 2019-07-19 13:58 ` kbuild test robot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190719025443.2368-1-navid.emamdoost@gmail.com \ --to=navid.emamdoost@gmail.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=emamd001@umn.edu \ --cc=gregkh@linuxfoundation.org \ --cc=jslaby@suse.com \ --cc=kjlu@umn.edu \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=smccaman@umn.edu \ --cc=vkoul@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.