staging: fsl-dpaa2/ethsw: Remove netdevice on port probing error
authorRazvan Stefanescu <razvan.stefanescu@nxp.com>
Fri, 5 Jul 2019 14:27:13 +0000 (17:27 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Jul 2019 05:34:13 +0000 (07:34 +0200)
If the ethsw_port_init() call failed, the netdevice remains registered in
the system.

Use labels to ensure that netdevice is unregistered and freed in this case.

Signed-off-by: Razvan Stefanescu <razvan.stefanescu@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Link: https://lore.kernel.org/r/1562336836-17119-4-git-send-email-ioana.ciornei@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fsl-dpaa2/ethsw/ethsw.c

index b2273f8408130d1a8a2b749d4f9d9724d90cab24..9f1617164865930642ceb4a8876fe7a6a4f58c69 100644 (file)
@@ -1460,13 +1460,23 @@ static int ethsw_probe_port(struct ethsw_core *ethsw, u16 port_idx)
        err = register_netdev(port_netdev);
        if (err < 0) {
                dev_err(dev, "register_netdev error %d\n", err);
-               free_netdev(port_netdev);
-               return err;
+               goto err_register_netdev;
        }
 
        ethsw->ports[port_idx] = port_priv;
 
-       return ethsw_port_init(port_priv, port_idx);
+       err = ethsw_port_init(port_priv, port_idx);
+       if (err)
+               goto err_ethsw_port_init;
+
+       return 0;
+
+err_ethsw_port_init:
+       unregister_netdev(port_netdev);
+err_register_netdev:
+       free_netdev(port_netdev);
+
+       return err;
 }
 
 static int ethsw_probe(struct fsl_mc_device *sw_dev)