From: Serhey Popovych Date: Mon, 18 Dec 2017 18:54:06 +0000 (+0200) Subject: iplink: Improve index parameter handling X-Git-Tag: v4.15.0~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b7ea12ae4399461d18442cfcecec3e2e908fb61b;p=thirdparty%2Fiproute2.git iplink: Improve index parameter handling Correctly check for valid network device index supplied on command line: indexes are always greather than zero. Check for duplicate "index" argument. Initialize @index to 0 to simplify handling it in iplink_modify(). Other callers (link_veth.c, iplink_vxcan.c) already did so. No need to initialize ifi_index with 0 since it is already initialized at the @struct req initialization time and not modified in iplink_parse(). Signed-off-by: Serhey Popovych Signed-off-by: Stephen Hemminger --- diff --git a/ip/iplink.c b/ip/iplink.c index 1e685cc23..4f9c169a7 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -586,8 +586,10 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, *name = *argv; } else if (strcmp(*argv, "index") == 0) { NEXT_ARG(); + if (*index) + duparg("index", *argv); *index = atoi(*argv); - if (*index < 0) + if (*index <= 0) invarg("Invalid \"index\" value", *argv); } else if (matches(*argv, "link") == 0) { NEXT_ARG(); @@ -886,7 +888,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) char *name = NULL; char *link = NULL; char *type = NULL; - int index = -1; + int index = 0; int group; struct link_util *lu = NULL; struct iplink_req req = { @@ -922,7 +924,6 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) return -1; } - req.i.ifi_index = 0; addattr32(&req.n, sizeof(req), IFLA_GROUP, group); if (rtnl_talk(&rth, &req.n, NULL) < 0) return -2; @@ -936,7 +937,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) "Not enough information: \"dev\" argument is required.\n"); exit(-1); } - if (cmd == RTM_NEWLINK && index != -1) { + if (cmd == RTM_NEWLINK && index) { fprintf(stderr, "index can be used only when creating devices.\n"); exit(-1); @@ -964,10 +965,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) addattr_l(&req.n, sizeof(req), IFLA_LINK, &ifindex, 4); } - if (index == -1) - req.i.ifi_index = 0; - else - req.i.ifi_index = index; + req.i.ifi_index = index; } if (name) {