aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2009-10-29 19:58:54 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-30 15:41:22 -0400
commit6639104bd826e0b1388c69a6b7564fffc636c8a8 (patch)
treea96951c923ca5c045e3e581849b3a9373fddac3e
parentec87fd3b4e111e8bc367d247a963e27e5b86df26 (diff)
bond: Get the rtnl_link_ops support correct
- Don't call rtnl_link_unregister if rtnl_link_register fails - Set .priv_size so we aren't stomping on uninitialized memory when we use netdev_priv, on bond devices created with ip link add type bond. Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/bonding/bond_main.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 208d2c4ef068..ecea6c294132 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -5056,6 +5056,7 @@ static int bond_validate(struct nlattr *tb[], struct nlattr *data[])
5056 5056
5057static struct rtnl_link_ops bond_link_ops __read_mostly = { 5057static struct rtnl_link_ops bond_link_ops __read_mostly = {
5058 .kind = "bond", 5058 .kind = "bond",
5059 .priv_size = sizeof(struct bonding),
5059 .setup = bond_setup, 5060 .setup = bond_setup,
5060 .validate = bond_validate, 5061 .validate = bond_validate,
5061}; 5062};
@@ -5157,7 +5158,7 @@ static int __init bonding_init(void)
5157 5158
5158 res = rtnl_link_register(&bond_link_ops); 5159 res = rtnl_link_register(&bond_link_ops);
5159 if (res) 5160 if (res)
5160 goto err; 5161 goto err_link;
5161 5162
5162 for (i = 0; i < max_bonds; i++) { 5163 for (i = 0; i < max_bonds; i++) {
5163 res = bond_create(&init_net, NULL); 5164 res = bond_create(&init_net, NULL);
@@ -5176,6 +5177,7 @@ out:
5176 return res; 5177 return res;
5177err: 5178err:
5178 rtnl_link_unregister(&bond_link_ops); 5179 rtnl_link_unregister(&bond_link_ops);
5180err_link:
5179 unregister_pernet_gen_subsys(bond_net_id, &bond_net_ops); 5181 unregister_pernet_gen_subsys(bond_net_id, &bond_net_ops);
5180 goto out; 5182 goto out;
5181 5183