Commit 51cf3675 authored by Daniel Borkmann's avatar Daniel Borkmann Committed by Stephen Hemminger

tc: m_bpf: fix next arg selection after tc opcode

Next argument after the tc opcode/verdict is optional, using NEXT_ARG()
requires to have another argument after that one otherwise tc will bail
out. Therefore, we need to advance to the next argument manually as done
elsewhere.

Fixes: 86ab59a6 ("tc: add support for BPF based actions")
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarJiri Pirko <jiri@resnulli.us>
parent 599fc319
...@@ -89,20 +89,25 @@ static int parse_bpf(struct action_util *a, int *argc_p, char ***argv_p, ...@@ -89,20 +89,25 @@ static int parse_bpf(struct action_util *a, int *argc_p, char ***argv_p,
if (argc) { if (argc) {
if (matches(*argv, "reclassify") == 0) { if (matches(*argv, "reclassify") == 0) {
parm.action = TC_ACT_RECLASSIFY; parm.action = TC_ACT_RECLASSIFY;
NEXT_ARG(); argc--;
argv++;
} else if (matches(*argv, "pipe") == 0) { } else if (matches(*argv, "pipe") == 0) {
parm.action = TC_ACT_PIPE; parm.action = TC_ACT_PIPE;
NEXT_ARG(); argc--;
argv++;
} else if (matches(*argv, "drop") == 0 || } else if (matches(*argv, "drop") == 0 ||
matches(*argv, "shot") == 0) { matches(*argv, "shot") == 0) {
parm.action = TC_ACT_SHOT; parm.action = TC_ACT_SHOT;
NEXT_ARG(); argc--;
argv++;
} else if (matches(*argv, "continue") == 0) { } else if (matches(*argv, "continue") == 0) {
parm.action = TC_ACT_UNSPEC; parm.action = TC_ACT_UNSPEC;
NEXT_ARG(); argc--;
argv++;
} else if (matches(*argv, "pass") == 0) { } else if (matches(*argv, "pass") == 0) {
parm.action = TC_ACT_OK; parm.action = TC_ACT_OK;
NEXT_ARG(); argc--;
argv++;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment