aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2018-11-10 00:06:26 -0500
committerDavid S. Miller <davem@davemloft.net>2018-11-10 12:55:30 -0500
commit63c82997f5c0f3e1b914af43d82f712a86bc5f3a (patch)
tree3dd9b105864ea32548a209750147878f0bfe78fa /net
parentfbd1d5245372e48b494120a30fe0b34b304576c4 (diff)
net: sched: cls_flower: validate nested enc_opts_policy to avoid warning
TCA_FLOWER_KEY_ENC_OPTS and TCA_FLOWER_KEY_ENC_OPTS_MASK can only currently contain further nested attributes, which are parsed by hand, so the policy is never actually used resulting in a W=1 build warning: net/sched/cls_flower.c:492:1: warning: ‘enc_opts_policy’ defined but not used [-Wunused-const-variable=] enc_opts_policy[TCA_FLOWER_KEY_ENC_OPTS_MAX + 1] = { Add the validation anyway to avoid potential bugs when other attributes are added and to make the attribute structure slightly more clear. Validation will also set extact to point to bad attribute on error. Fixes: 0a6e77784f49 ("net/sched: allow flower to match tunnel options") Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Acked-by: Simon Horman <simon.horman@netronome.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/sched/cls_flower.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 9aada2d0ef06..c6c327874abc 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -709,11 +709,23 @@ static int fl_set_enc_opt(struct nlattr **tb, struct fl_flow_key *key,
709 struct netlink_ext_ack *extack) 709 struct netlink_ext_ack *extack)
710{ 710{
711 const struct nlattr *nla_enc_key, *nla_opt_key, *nla_opt_msk = NULL; 711 const struct nlattr *nla_enc_key, *nla_opt_key, *nla_opt_msk = NULL;
712 int option_len, key_depth, msk_depth = 0; 712 int err, option_len, key_depth, msk_depth = 0;
713
714 err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS],
715 TCA_FLOWER_KEY_ENC_OPTS_MAX,
716 enc_opts_policy, extack);
717 if (err)
718 return err;
713 719
714 nla_enc_key = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS]); 720 nla_enc_key = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS]);
715 721
716 if (tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]) { 722 if (tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]) {
723 err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK],
724 TCA_FLOWER_KEY_ENC_OPTS_MAX,
725 enc_opts_policy, extack);
726 if (err)
727 return err;
728
717 nla_opt_msk = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]); 729 nla_opt_msk = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
718 msk_depth = nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]); 730 msk_depth = nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
719 } 731 }