diff options
author | Patrick McHardy <kaber@trash.net> | 2008-02-05 19:19:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-05 19:19:59 -0500 |
commit | 4f25049106e0507ff21a9e1fc0645d849e19faf0 (patch) | |
tree | 0bb28370f4ef81d89030e56df0cf192b778e67dd /net | |
parent | 0ea9d70df8f8be741ee0525490370de06163d2de (diff) |
[NET_SCHED]: cls_flow: fix key mask validity check
Since we're using fls(), we need to check whether the value is
non-zero first.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/cls_flow.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index 8d7698621f0a..eeb223cf14cf 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c | |||
@@ -402,12 +402,13 @@ static int flow_change(struct tcf_proto *tp, unsigned long base, | |||
402 | 402 | ||
403 | if (tb[TCA_FLOW_KEYS]) { | 403 | if (tb[TCA_FLOW_KEYS]) { |
404 | keymask = nla_get_u32(tb[TCA_FLOW_KEYS]); | 404 | keymask = nla_get_u32(tb[TCA_FLOW_KEYS]); |
405 | if (fls(keymask) - 1 > FLOW_KEY_MAX) | ||
406 | return -EOPNOTSUPP; | ||
407 | 405 | ||
408 | nkeys = hweight32(keymask); | 406 | nkeys = hweight32(keymask); |
409 | if (nkeys == 0) | 407 | if (nkeys == 0) |
410 | return -EINVAL; | 408 | return -EINVAL; |
409 | |||
410 | if (fls(keymask) - 1 > FLOW_KEY_MAX) | ||
411 | return -EOPNOTSUPP; | ||
411 | } | 412 | } |
412 | 413 | ||
413 | err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &flow_ext_map); | 414 | err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &flow_ext_map); |