rtnetlink: fix link attribute validation with IFLA_GROUP
Subsystems (2)
PATCH 1/1 rtnetlink: fix link attribute validation with IFLA_GROUP
Fix a few semantic problems with the new IFLA_GROUP attribute.
Vlad, could you please give this is a try to see whether it still behaves as expected?
commit e4b31d565a45e06ed2e51a005f5c00ff1d00725c
Author: Patrick McHardy <[email protected]> Date: Thu Jan 20 13:55:25 2011 +0100
rtnetlink: fix link attribute validation with IFLA_GROUP
rtnl_group_changelink() is invoked by rtnl_newlink() before the link attributes have been validated. Additionally the group changes are performed even if NLM_F_CREATE is specified and a new link is created, while more reasonable semantics would be to set the group value on the newly created link.
Fix both problems by moving the rtnl_group_changelink() invocation down to the handling of non-existant links without NLM_F_CREATE() and add a dev_set_group() call to rtnl_create_link().
net/core/rtnetlink.c +8 -5
@@ -1548,6 +1548,8 @@ struct net_device *rtnl_create_link(struct net *src_net, struct net *net,set_operstate (dev,nla_get_u8 (tb[IFLA_OPERSTATE ]));if (tb[IFLA_LINKMODE ]) dev->link_mode =nla_get_u8 (tb[IFLA_LINKMODE ]); +if (tb[IFLA_GROUP ]) +dev_set_group (dev,nla_get_u32 (tb[IFLA_GROUP ]));return dev;
@@ -1606,10 +1608,6 @@ replay:else {if (ifname[0 ]) dev =__dev_get_by_name (net, ifname); -else if (tb[IFLA_GROUP ]) -return rtnl_group_changelink (net, -nla_get_u32 (tb[IFLA_GROUP ]), - ifm, tb);else dev =NULL ; }
@@ -1676,8 +1674,13 @@ replay:return do_setlink (dev, ifm, tb, ifname, modified); } -if (!(nlh->nlmsg_flags &NLM_F_CREATE )) +if (!(nlh->nlmsg_flags &NLM_F_CREATE )) { +if (ifm->ifi_index ==0 && tb[IFLA_GROUP ]) +return rtnl_group_changelink (net, +nla_get_u32 (tb[IFLA_GROUP ]), + ifm, tb);return -ENODEV ; + }if (ifm->ifi_index)return -EOPNOTSUPP ;
Quoted 17 lines · Patrick McHardy
Fix a few semantic problems with the new
IFLA_GROUPattribute.Vlad, could you please give this is a try to see whether it still behaves as expected?
commit
e4b31d565a45e06ed2e51a005f5c00ff1d00725cAuthor: Patrick McHardy <[email protected]> Date: Thu Jan 20 13:55:25 2011 +0100rtnetlink: fix link attribute validation with
IFLA_GROUP
rtnl_group_changelink()is invoked byrtnl_newlink()before the link attributes have been validated. Additionally the group changes are performed even ifNLM_F_CREATEis specified and a new link is created, while more reasonable semantics would be to set the group value on the newly created link.
Quoted 5 lines
Fix both problems by moving the
rtnl_group_changelink()invocation down to the handling of non-existant links withoutNLM_F_CREATE()and add adev_set_group()call tortnl_create_link().Signed-off-by Patrick McHardy <[email protected]>
This looks OK and behaves as before. Thanks for taking the time to look through it, the new semantics do seem saner.
There is a slight difference, though: in the (yet unapplied) iproute2 patch, ifi_index is set to -1 and kernel space checks that it is <= 0; your patch checks for == 0. I will update the iproute2 patches with setting ifi_index to 0 (and other changes) and resubmit them.
From: Vlad Dogaru <[email protected]>
Date: Thu, 20 Jan 2011 18:09:10 +0200
Quoted 18 lines · Patrick McHardy
Quoted 17 lines
Fix a few semantic problems with the new
IFLA_GROUPattribute.Vlad, could you please give this is a try to see whether it still behaves as expected?
commit
e4b31d565a45e06ed2e51a005f5c00ff1d00725cAuthor: Patrick McHardy <[email protected]> Date: Thu Jan 20 13:55:25 2011 +0100rtnetlink: fix link attribute validation with
IFLA_GROUP
rtnl_group_changelink()is invoked byrtnl_newlink()before the link attributes have been validated. Additionally the group changes are performed even ifNLM_F_CREATEis specified and a new link is created, while more reasonable semantics would be to set the group value on the newly created link.
Quoted 7 lines
Quoted 5 lines
Fix both problems by moving the
rtnl_group_changelink()invocation down to the handling of non-existant links withoutNLM_F_CREATE()and add adev_set_group()call tortnl_create_link().Signed-off-by Patrick McHardy <[email protected]>Acked-by Vlad Dogaru <[email protected]>
Applied, thanks everyone.