| From 10a5379f96fc4c302d12976160faa8d4fd8418fd Mon Sep 17 00:00:00 2001 |
| From: Patrick McHardy <kaber@trash.net> |
| Date: Thu, 8 May 2008 01:13:31 -0700 |
| Subject: macvlan: Fix memleak on device removal/crash on module removal |
| |
| From: Patrick McHardy <kaber@trash.net> |
| |
| [ 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 <kaber@trash.net> |
| Tested-by: Ben Greear <greearb@candelatech.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/macvlan.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/macvlan.c |
| +++ b/drivers/net/macvlan.c |
| @@ -450,7 +450,7 @@ static void macvlan_dellink(struct net_d |
| 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 = { |