From: Patrick McHardy Date: Thu, 8 May 2008 08:13:31 +0000 (-0700) Subject: macvlan: Fix memleak on device removal/crash on module removal X-Git-Tag: v2.6.25.4~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=781ce5ffe1ff6b5b288575d4d42f46cb7a25b175;p=thirdparty%2Fkernel%2Fstable.git macvlan: Fix memleak on device removal/crash on module removal [ Upstream commit: 7312096454b6cd71267eaa3d0efb408e449e9ff3 ] As noticed by Ben Greear, macvlan crashes the kernel when unloading the module. The reason is that it tries to clean up the macvlan_port pointer on the macvlan device itself instead of the underlying device. A non-NULL pointer is taken as indication that the macvlan_handle_frame_hook is valid, when receiving the next packet on the underlying device it tries to call the NULL hook and crashes. Clean up the macvlan_port on the correct device to fix this. Signed-off-by; Patrick McHardy Tested-by: Ben Greear Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index f651a816b280b..34c2b9845c8b9 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -450,7 +450,7 @@ static void macvlan_dellink(struct net_device *dev) unregister_netdevice(dev); if (list_empty(&port->vlans)) - macvlan_port_destroy(dev); + macvlan_port_destroy(port->dev); } static struct rtnl_link_ops macvlan_link_ops __read_mostly = {