diff options
author | Jiri Pirko <jpirko@redhat.com> | 2010-05-24 03:02:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-05-24 21:42:12 -0400 |
commit | f16d3d57486cd079b29ae7a6c3b31c90e69c9c44 (patch) | |
tree | 73e03ec33a20fef68f43e24196847f43e03ca264 | |
parent | 556ae19110f2de5ace4733e0c19e5fa01fad08b3 (diff) |
macvlan: do proper cleanup in macvlan_common_newlink() V2
Fixes possible memory leak.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Acked-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/macvlan.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 4e238afab4a3..87e8d4cb4057 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -634,11 +634,18 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | |||
634 | 634 | ||
635 | err = register_netdevice(dev); | 635 | err = register_netdevice(dev); |
636 | if (err < 0) | 636 | if (err < 0) |
637 | return err; | 637 | goto destroy_port; |
638 | 638 | ||
639 | list_add_tail(&vlan->list, &port->vlans); | 639 | list_add_tail(&vlan->list, &port->vlans); |
640 | netif_stacked_transfer_operstate(lowerdev, dev); | 640 | netif_stacked_transfer_operstate(lowerdev, dev); |
641 | |||
641 | return 0; | 642 | return 0; |
643 | |||
644 | destroy_port: | ||
645 | if (list_empty(&port->vlans)) | ||
646 | macvlan_port_destroy(lowerdev); | ||
647 | |||
648 | return err; | ||
642 | } | 649 | } |
643 | EXPORT_SYMBOL_GPL(macvlan_common_newlink); | 650 | EXPORT_SYMBOL_GPL(macvlan_common_newlink); |
644 | 651 | ||