Message ID | 1412351718-22921-2-git-send-email-therbert@google.com |
---|---|
State | Superseded, archived |
Delegated to: | stephen hemminger |
Headers | show |
On Fri, Oct 3, 2014 at 8:55 AM, Tom Herbert <therbert@google.com> wrote: > Commit 3c682146aeff157ec3540 ("iplink: forbid negative ifindex and > modifying ifindex") initializes index to -1 in iplink_modify. When > creating a link, req.i.ifi_index is then set to -1 if the link option is > not used. In the kernel this is then used to set dev->ifindex. For > dev->ifindex, zero is considered to be unset and -1 is treated as > a set index, so when a second tunnel is create the new device conflicts > with the old one (both have ifindex of -1) so -EBUSY is returned. > > This patch set zero in req.i.ifi_index is index is unset (still -1). There was a patch before yours: https://patchwork.ozlabs.org/patch/395404/ -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/ip/iplink.c b/ip/iplink.c index cb9c870..1b6ffc6 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -689,7 +689,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) addattr_l(&req.n, sizeof(req), IFLA_LINK, &ifindex, 4); } - req.i.ifi_index = index; + req.i.ifi_index = (index > 0) ? : 0; } if (name) {
Commit 3c682146aeff157ec3540 ("iplink: forbid negative ifindex and modifying ifindex") initializes index to -1 in iplink_modify. When creating a link, req.i.ifi_index is then set to -1 if the link option is not used. In the kernel this is then used to set dev->ifindex. For dev->ifindex, zero is considered to be unset and -1 is treated as a set index, so when a second tunnel is create the new device conflicts with the old one (both have ifindex of -1) so -EBUSY is returned. This patch set zero in req.i.ifi_index is index is unset (still -1). Signed-off-by: Tom Herbert <therbert@google.com> --- ip/iplink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)