]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
devlink: fix referencing namespace by PID
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 5 Nov 2019 21:17:05 +0000 (13:17 -0800)
committerDavid Ahern <dsahern@gmail.com>
Sat, 9 Nov 2019 00:39:03 +0000 (00:39 +0000)
netns parameter for devlink reload is supposed to take PID
as well as string name. However, the PID parsing has two
bugs:
 - the opts->netns member is unsigned so the < 0
   condition is always false;
 - the parameter list is not rewinded after parsing as
   a name, so parsing as a pid uses the wrong argument.

Fixes: 08e8e1ca3e05 ("devlink: extend reload command to add support for network namespace change")
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
devlink/devlink.c

index 9c96d05ea666e2092c819e10c31d7a94d4cf8235..682f832a064caba72dff7ce895ba26aefd7884cc 100644 (file)
@@ -345,6 +345,12 @@ static void dl_arg_inc(struct dl *dl)
        dl->argv++;
 }
 
+static void dl_arg_dec(struct dl *dl)
+{
+       dl->argc++;
+       dl->argv--;
+}
+
 static char *dl_argv_next(struct dl *dl)
 {
        char *ret;
@@ -1460,7 +1466,8 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required,
                        if (err)
                                return err;
                        opts->netns = netns_get_fd(netns_str);
-                       if (opts->netns < 0) {
+                       if ((int)opts->netns < 0) {
+                               dl_arg_dec(dl);
                                err = dl_argv_uint32_t(dl, &opts->netns);
                                if (err)
                                        return err;