From 9a0a2fcbf45b992a406c84d2dbd331a10cf437c2 Mon Sep 17 00:00:00 2001 From: Jakub Kicinski Date: Tue, 5 Nov 2019 13:17:05 -0800 Subject: [PATCH] devlink: fix referencing namespace by PID 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 Acked-by: Jiri Pirko Signed-off-by: David Ahern --- devlink/devlink.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 9c96d05e..682f832a 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -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; -- 2.39.2