On Sat, Jun 09, 2018 at 10:35:48PM +0000, Fu, Qiaobin wrote: ... > @@ -73,6 +100,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr > *nla, > struct tc_skbedit *parm; > struct tcf_skbedit *d; > u32 flags = 0, *priority = NULL, *mark = NULL, *mask = NULL; > + u64 *pure_flags = NULL; > u16 *queue_mapping = NULL, *ptype = NULL; > bool exists = false; > int ret = 0, err; > @@ -114,6 +142,11 @@ static int tcf_skbedit_init(struct net *net, struct > nlattr *nla, > mask = nla_data(tb[TCA_SKBEDIT_MASK]); > } > > + if (tb[TCA_SKBEDIT_FLAGS] != NULL) { > + pure_flags = nla_data(tb[TCA_SKBEDIT_FLAGS]); > + flags |= *pure_flags;
It shouldn't allow setting flags other than the expected ones. > + } > + > parm = nla_data(tb[TCA_SKBEDIT_PARMS]); > > exists = tcf_idr_check(tn, parm->index, a, bind);