diff options
Diffstat (limited to 'net/sched/cls_basic.c')
-rw-r--r-- | net/sched/cls_basic.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c index 979cd2683b46..7c7a82138f76 100644 --- a/net/sched/cls_basic.c +++ b/net/sched/cls_basic.c | |||
@@ -129,31 +129,22 @@ static int basic_set_parms(struct net *net, struct tcf_proto *tp, | |||
129 | struct nlattr *est, bool ovr) | 129 | struct nlattr *est, bool ovr) |
130 | { | 130 | { |
131 | int err; | 131 | int err; |
132 | struct tcf_exts e; | ||
133 | 132 | ||
134 | err = tcf_exts_init(&e, TCA_BASIC_ACT, TCA_BASIC_POLICE); | 133 | err = tcf_exts_validate(net, tp, tb, est, &f->exts, ovr); |
135 | if (err < 0) | 134 | if (err < 0) |
136 | return err; | 135 | return err; |
137 | err = tcf_exts_validate(net, tp, tb, est, &e, ovr); | ||
138 | if (err < 0) | ||
139 | goto errout; | ||
140 | 136 | ||
141 | err = tcf_em_tree_validate(tp, tb[TCA_BASIC_EMATCHES], &f->ematches); | 137 | err = tcf_em_tree_validate(tp, tb[TCA_BASIC_EMATCHES], &f->ematches); |
142 | if (err < 0) | 138 | if (err < 0) |
143 | goto errout; | 139 | return err; |
144 | 140 | ||
145 | if (tb[TCA_BASIC_CLASSID]) { | 141 | if (tb[TCA_BASIC_CLASSID]) { |
146 | f->res.classid = nla_get_u32(tb[TCA_BASIC_CLASSID]); | 142 | f->res.classid = nla_get_u32(tb[TCA_BASIC_CLASSID]); |
147 | tcf_bind_filter(tp, &f->res, base); | 143 | tcf_bind_filter(tp, &f->res, base); |
148 | } | 144 | } |
149 | 145 | ||
150 | tcf_exts_change(tp, &f->exts, &e); | ||
151 | f->tp = tp; | 146 | f->tp = tp; |
152 | |||
153 | return 0; | 147 | return 0; |
154 | errout: | ||
155 | tcf_exts_destroy(&e); | ||
156 | return err; | ||
157 | } | 148 | } |
158 | 149 | ||
159 | static int basic_change(struct net *net, struct sk_buff *in_skb, | 150 | static int basic_change(struct net *net, struct sk_buff *in_skb, |