diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/sched/cls_flower.c | 14 |
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 | } |
