Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vasiliy Kulikov and committed by
Greg Kroah-Hartman
c4711c3a 8db3271c

+4 -4
+4 -4
drivers/staging/octeon/ethernet.c
··· 670 670 671 671 if (register_netdev(dev) < 0) { 672 672 pr_err("Failed to register ethernet device for POW\n"); 673 - kfree(dev); 673 + free_netdev(dev); 674 674 } else { 675 675 cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev; 676 676 pr_info("%s: POW send group %d, receive group %d\n", ··· 756 756 } 757 757 758 758 if (!dev->netdev_ops) { 759 - kfree(dev); 759 + free_netdev(dev); 760 760 } else if (register_netdev(dev) < 0) { 761 761 pr_err("Failed to register ethernet device " 762 762 "for interface %d, port %d\n", 763 763 interface, priv->port); 764 - kfree(dev); 764 + free_netdev(dev); 765 765 } else { 766 766 cvm_oct_device[priv->port] = dev; 767 767 fau -= ··· 815 815 816 816 cvm_oct_tx_shutdown_dev(dev); 817 817 unregister_netdev(dev); 818 - kfree(dev); 818 + free_netdev(dev); 819 819 cvm_oct_device[port] = NULL; 820 820 } 821 821 }