staging: octeon: use free_netdev(netdev) instead of kfree()
authorVasiliy Kulikov <segooon@gmail.com>
Tue, 28 Sep 2010 17:08:01 +0000 (21:08 +0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 30 Sep 2010 11:14:20 +0000 (04:14 -0700)
It is not guaranteed that free_netdev() is macro.
Freeing netdev without free_netdev() leads to net, tx leaks.
I might lead to dereferencing freed pointer.

Signed-off-by: Vasiliy Kulikov <segooon@gmail.com>
Acked-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/octeon/ethernet.c

index fb568a935eef66c66ab60d1f24e739590a79cc18..a8f780e95e0a5c735c5e6560e4c44ca4d48f30fb 100644 (file)
@@ -670,7 +670,7 @@ static int __init cvm_oct_init_module(void)
 
                        if (register_netdev(dev) < 0) {
                                pr_err("Failed to register ethernet device for POW\n");
-                               kfree(dev);
+                               free_netdev(dev);
                        } else {
                                cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev;
                                pr_info("%s: POW send group %d, receive group %d\n",
@@ -756,12 +756,12 @@ static int __init cvm_oct_init_module(void)
                        }
 
                        if (!dev->netdev_ops) {
-                               kfree(dev);
+                               free_netdev(dev);
                        } else if (register_netdev(dev) < 0) {
                                pr_err("Failed to register ethernet device "
                                         "for interface %d, port %d\n",
                                         interface, priv->port);
-                               kfree(dev);
+                               free_netdev(dev);
                        } else {
                                cvm_oct_device[priv->port] = dev;
                                fau -=
@@ -815,7 +815,7 @@ static void __exit cvm_oct_cleanup_module(void)
 
                        cvm_oct_tx_shutdown_dev(dev);
                        unregister_netdev(dev);
-                       kfree(dev);
+                       free_netdev(dev);
                        cvm_oct_device[port] = NULL;
                }
        }