diff mbox series

[v2] net: liquidio: fix NULL pointer dereferences

Message ID 20190323032420.21162-1-kjlu@umn.edu
State Changes Requested
Delegated to: David Miller
Headers show
Series [v2] net: liquidio: fix NULL pointer dereferences | expand

Commit Message

Kangjie Lu March 23, 2019, 3:24 a.m. UTC
In case octeon_alloc_soft_command fails, the fix reports the
error and goes to cleanup to avoid NULL pointer dereferences.

Signed-off-by: Kangjie Lu <kjlu@umn.edu>
---
V2: goto setup_nic_dev_free for cleanup
---
 drivers/mmc/host/mmc_spi.c                         |  2 +-
 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

Comments

Ulf Hansson March 25, 2019, 12:41 p.m. UTC | #1
On Sat, 23 Mar 2019 at 04:24, Kangjie Lu <kjlu@umn.edu> wrote:
>
> In case octeon_alloc_soft_command fails, the fix reports the
> error and goes to cleanup to avoid NULL pointer dereferences.
>
> Signed-off-by: Kangjie Lu <kjlu@umn.edu>
> ---
> V2: goto setup_nic_dev_free for cleanup
> ---
>  drivers/mmc/host/mmc_spi.c                         |  2 +-
>  drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 12 ++++++++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
> index 32fea585262b..a3533935e282 100644
> --- a/drivers/mmc/host/mmc_spi.c
> +++ b/drivers/mmc/host/mmc_spi.c
> @@ -820,7 +820,7 @@ mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
>
>         status = spi_sync_locked(spi, &host->m);
>         if (status < 0) {
> -               dev_dbg(&spi->dev, "read error %02x (%d)\n", status, status);
> +               dev_dbg(&spi->dev, "read error %d\n", status);

Looks like a leftover from debugging?

[...]

Kind regards
Uffe
David Miller March 26, 2019, 12:14 a.m. UTC | #2
From: Kangjie Lu <kjlu@umn.edu>
Date: Fri, 22 Mar 2019 22:24:19 -0500

> In case octeon_alloc_soft_command fails, the fix reports the
> error and goes to cleanup to avoid NULL pointer dereferences.
> 
> Signed-off-by: Kangjie Lu <kjlu@umn.edu>
> ---
> V2: goto setup_nic_dev_free for cleanup
> ---
>  drivers/mmc/host/mmc_spi.c                         |  2 +-
>  drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 12 ++++++++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
> index 32fea585262b..a3533935e282 100644
> --- a/drivers/mmc/host/mmc_spi.c
> +++ b/drivers/mmc/host/mmc_spi.c
> @@ -820,7 +820,7 @@ mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
>  
>  	status = spi_sync_locked(spi, &host->m);
>  	if (status < 0) {
> -		dev_dbg(&spi->dev, "read error %02x (%d)\n", status, status);
> +		dev_dbg(&spi->dev, "read error %d\n", status);
>  		return status;
>  	}

This is:

1) Unrelated to your bug fix.

2) It is often the case that people print values in hex and decimal
   intentionally for debugging.  I've done this myself countless
   times.
diff mbox series

Patch

diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
index 32fea585262b..a3533935e282 100644
--- a/drivers/mmc/host/mmc_spi.c
+++ b/drivers/mmc/host/mmc_spi.c
@@ -820,7 +820,7 @@  mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
 
 	status = spi_sync_locked(spi, &host->m);
 	if (status < 0) {
-		dev_dbg(&spi->dev, "read error %02x (%d)\n", status, status);
+		dev_dbg(&spi->dev, "read error %d\n", status);
 		return status;
 	}
 
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
index 54b245797d2e..e653072846b0 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
@@ -611,6 +611,12 @@  static void send_rx_ctrl_cmd(struct lio *lio, int start_stop)
 	sc = (struct octeon_soft_command *)
 		octeon_alloc_soft_command(oct, OCTNET_CMD_SIZE,
 					  16, 0);
+	if (!sc) {
+		netif_info(lio, rx_err, lio->netdev,
+			   "Failed to allocate octeon_soft_command\n");
+		return;
+	}
+
 
 	ncmd = (union octnet_cmd *)sc->virtdptr;
 
@@ -1960,6 +1966,12 @@  static int setup_nic_devices(struct octeon_device *octeon_dev)
 		sc = (struct octeon_soft_command *)
 			octeon_alloc_soft_command(octeon_dev, data_size,
 						  resp_size, 0);
+		if (!sc) {
+			dev_err(&octeon_dev->pci_dev->dev,
+				"Failed to allocate octeon_soft_command\n");
+			goto setup_nic_dev_free;
+		}
+
 		resp = (struct liquidio_if_cfg_resp *)sc->virtrptr;
 		vdata = (struct lio_version *)sc->virtdptr;