parse_action_control helper does advancing of the arg inside. So don't do it outside.
Fixes: e67aba559581 ("tc: actions: add helpers to parse and print control actions") Signed-off-by: Michal Privoznik <mpriv...@redhat.com> --- tc/m_police.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tc/m_police.c b/tc/m_police.c index ff1dcb7d..62cc6f86 100644 --- a/tc/m_police.c +++ b/tc/m_police.c @@ -75,6 +75,7 @@ int act_parse_police(struct action_util *a, int *argc_p, char ***argv_p, return -1; while (argc > 0) { + bool advance = true; if (matches(*argv, "index") == 0) { NEXT_ARG(); @@ -154,11 +155,13 @@ int act_parse_police(struct action_util *a, int *argc_p, char ***argv_p, matches(*argv, "goto") == 0) { if (parse_action_control(&argc, &argv, &p.action, false)) return -1; + advance = false; } else if (strcmp(*argv, "conform-exceed") == 0) { NEXT_ARG(); if (parse_action_control_slash(&argc, &argv, &p.action, &presult, true)) return -1; + advance = false; } else if (matches(*argv, "overhead") == 0) { NEXT_ARG(); if (get_u16(&overhead, *argv, 10)) { @@ -175,7 +178,9 @@ int act_parse_police(struct action_util *a, int *argc_p, char ***argv_p, break; } ok++; - argc--; argv++; + if (advance) { + argc--; argv++; + } } if (!ok) -- 2.13.6