diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 32b03a13f9b2..ee137d5c20a4 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -1092,6 +1092,9 @@ static int fl_set_geneve_opt(const struct nlattr *nla, struct fl_flow_key *key, if (option_len > sizeof(struct geneve_opt)) data_len = option_len - sizeof(struct geneve_opt); + if (key->enc_opts.len > FLOW_DIS_TUN_OPTS_MAX - 4) + return -ERANGE; + opt = (struct geneve_opt *)&key->enc_opts.data[key->enc_opts.len]; memset(opt, 0xff, option_len); opt->length = data_len / 4;