diff options
author | Vasiliy Kulikov <segooon@gmail.com> | 2010-09-28 13:08:01 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-09-30 07:14:20 -0400 |
commit | c4711c3acb9fbe7f559ead7ff511dba3665a048e (patch) | |
tree | 822a393b751aadaec89e1b0dc07b3c3db1ea64e1 /drivers/staging/octeon | |
parent | 8db3271cb24d4298e39a249c4dd966b189b05e97 (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.c | 8 |
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 | } |