From b7ea12ae4399461d18442cfcecec3e2e908fb61b Mon Sep 17 00:00:00 2001 From: Serhey Popovych Date: Mon, 18 Dec 2017 20:54:06 +0200 Subject: [PATCH] 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 --- ip/iplink.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ip/iplink.c b/ip/iplink.c index 1e685cc2..4f9c169a 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) { -- 2.39.2