aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/octeon
diff options
context:
space:
mode:
authorVasiliy Kulikov <segooon@gmail.com>2010-09-28 13:08:01 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-09-30 07:14:20 -0400
commitc4711c3acb9fbe7f559ead7ff511dba3665a048e (patch)
tree822a393b751aadaec89e1b0dc07b3c3db1ea64e1 /drivers/staging/octeon
parent8db3271cb24d4298e39a249c4dd966b189b05e97 (diff)
staging: octeon: use free_netdev(netdev) instead of kfree()
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>
Diffstat (limited to 'drivers/staging/octeon')
-rw-r--r--drivers/staging/octeon/ethernet.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index fb568a935ee..a8f780e95e0 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
@@ -670,7 +670,7 @@ static int __init cvm_oct_init_module(void)
670 670
671 if (register_netdev(dev) < 0) { 671 if (register_netdev(dev) < 0) {
672 pr_err("Failed to register ethernet device for POW\n"); 672 pr_err("Failed to register ethernet device for POW\n");
673 kfree(dev); 673 free_netdev(dev);
674 } else { 674 } else {
675 cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev; 675 cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev;
676 pr_info("%s: POW send group %d, receive group %d\n", 676 pr_info("%s: POW send group %d, receive group %d\n",
@@ -756,12 +756,12 @@ static int __init cvm_oct_init_module(void)
756 } 756 }
757 757
758 if (!dev->netdev_ops) { 758 if (!dev->netdev_ops) {
759 kfree(dev); 759 free_netdev(dev);
760 } else if (register_netdev(dev) < 0) { 760 } else if (register_netdev(dev) < 0) {
761 pr_err("Failed to register ethernet device " 761 pr_err("Failed to register ethernet device "
762 "for interface %d, port %d\n", 762 "for interface %d, port %d\n",
763 interface, priv->port); 763 interface, priv->port);
764 kfree(dev); 764 free_netdev(dev);
765 } else { 765 } else {
766 cvm_oct_device[priv->port] = dev; 766 cvm_oct_device[priv->port] = dev;
767 fau -= 767 fau -=
@@ -815,7 +815,7 @@ static void __exit cvm_oct_cleanup_module(void)
815 815
816 cvm_oct_tx_shutdown_dev(dev); 816 cvm_oct_tx_shutdown_dev(dev);
817 unregister_netdev(dev); 817 unregister_netdev(dev);
818 kfree(dev); 818 free_netdev(dev);
819 cvm_oct_device[port] = NULL; 819 cvm_oct_device[port] = NULL;
820 } 820 }
821 } 821 }