From: Paolo Abeni Date: Tue, 15 Dec 2015 11:18:04 +0000 (+0100) Subject: lwtunnel: fix argument parsing X-Git-Tag: v4.4.0~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0df40810f1c0bc86cf1fcb6f660b0fd9912b1d3;p=thirdparty%2Fiproute2.git lwtunnel: fix argument parsing Currently parse_encap_ip() does not update correctly argv/argc; if multiple lwtunnel arguments are provided, the parsing fails after the first one, i.e. ip route add 172.16.101.0/24 dev vxlan1 encap ip id 42 dst 192.168.255.1 fails with: Error: either "to" is duplicate, or "dst" is a garbage. This commit addresses the issue, stepping to next argument at each iteration of the parsing loop. Fixes: 1e5293056a02 ("lwtunnel: Add encapsulation support to ip route") Signed-off-by: Paolo Abeni --- diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c index b2764a6ca..1243977cc 100644 --- a/ip/iproute_lwtunnel.c +++ b/ip/iproute_lwtunnel.c @@ -201,10 +201,14 @@ static int parse_encap_ip(struct rtattr *rta, size_t len, int *argcp, char ***ar } else { break; } + argc--; argv++; } - *argcp = argc; - *argvp = argv; + /* argv is currently the first unparsed argument, + * but the lwt_parse_encap() caller will move to the next, + * so step back */ + *argcp = argc + 1; + *argvp = argv - 1; return 0; }