aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-03-29 05:11:39 -0400
committerDavid S. Miller <davem@davemloft.net>2012-04-01 18:11:37 -0400
commit1b34ec43c9b3de44a5420841ab293d1b2035a94c (patch)
tree8d6cf966c813e0e61001655179b5ef8e5f1b54b3
parent9360ffd1859720f6520cf59241909b74dae369d0 (diff)
pkt_sched: Stop using NLA_PUT*().
These macros contain a hidden goto, and are thus extremely error prone and make code hard to audit. Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/sched/act_api.c9
-rw-r--r--net/sched/act_csum.c6
-rw-r--r--net/sched/act_gact.c9
-rw-r--r--net/sched/act_ipt.c14
-rw-r--r--net/sched/act_mirred.c6
-rw-r--r--net/sched/act_nat.c6
-rw-r--r--net/sched/act_pedit.c6
-rw-r--r--net/sched/act_police.c13
-rw-r--r--net/sched/act_simple.c8
-rw-r--r--net/sched/act_skbedit.c27
-rw-r--r--net/sched/cls_api.c3
-rw-r--r--net/sched/cls_basic.c5
-rw-r--r--net/sched/cls_flow.c35
-rw-r--r--net/sched/cls_fw.c15
-rw-r--r--net/sched/cls_route.c16
-rw-r--r--net/sched/cls_rsvp.h16
-rw-r--r--net/sched/cls_tcindex.c14
-rw-r--r--net/sched/cls_u32.c40
-rw-r--r--net/sched/em_meta.c19
-rw-r--r--net/sched/ematch.c6
-rw-r--r--net/sched/sch_api.c9
-rw-r--r--net/sched/sch_atm.c21
-rw-r--r--net/sched/sch_cbq.c18
-rw-r--r--net/sched/sch_choke.c5
-rw-r--r--net/sched/sch_drr.c3
-rw-r--r--net/sched/sch_dsmark.c18
-rw-r--r--net/sched/sch_fifo.c3
-rw-r--r--net/sched/sch_generic.c3
-rw-r--r--net/sched/sch_gred.c6
-rw-r--r--net/sched/sch_hfsc.c6
-rw-r--r--net/sched/sch_htb.c6
-rw-r--r--net/sched/sch_mqprio.c3
-rw-r--r--net/sched/sch_multiq.c3
-rw-r--r--net/sched/sch_netem.c21
-rw-r--r--net/sched/sch_prio.c3
-rw-r--r--net/sched/sch_qfq.c5
-rw-r--r--net/sched/sch_red.c5
-rw-r--r--net/sched/sch_sfb.c3
-rw-r--r--net/sched/sch_sfq.c3
-rw-r--r--net/sched/sch_tbf.c3
40 files changed, 263 insertions, 157 deletions
diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index 93fdf131bd75..5cfb160df063 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -127,7 +127,8 @@ static int tcf_del_walker(struct sk_buff *skb, struct tc_action *a,
127 nest = nla_nest_start(skb, a->order); 127 nest = nla_nest_start(skb, a->order);
128 if (nest == NULL) 128 if (nest == NULL)
129 goto nla_put_failure; 129 goto nla_put_failure;
130 NLA_PUT_STRING(skb, TCA_KIND, a->ops->kind); 130 if (nla_put_string(skb, TCA_KIND, a->ops->kind))
131 goto nla_put_failure;
131 for (i = 0; i < (hinfo->hmask + 1); i++) { 132 for (i = 0; i < (hinfo->hmask + 1); i++) {
132 p = hinfo->htab[tcf_hash(i, hinfo->hmask)]; 133 p = hinfo->htab[tcf_hash(i, hinfo->hmask)];
133 134
@@ -139,7 +140,8 @@ static int tcf_del_walker(struct sk_buff *skb, struct tc_action *a,
139 p = s_p; 140 p = s_p;
140 } 141 }
141 } 142 }
142 NLA_PUT_U32(skb, TCA_FCNT, n_i); 143 if (nla_put_u32(skb, TCA_FCNT, n_i))
144 goto nla_put_failure;
143 nla_nest_end(skb, nest); 145 nla_nest_end(skb, nest);
144 146
145 return n_i; 147 return n_i;
@@ -437,7 +439,8 @@ tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int bind, int ref)
437 if (a->ops == NULL || a->ops->dump == NULL) 439 if (a->ops == NULL || a->ops->dump == NULL)
438 return err; 440 return err;
439 441
440 NLA_PUT_STRING(skb, TCA_KIND, a->ops->kind); 442 if (nla_put_string(skb, TCA_KIND, a->ops->kind))
443 goto nla_put_failure;
441 if (tcf_action_copy_stats(skb, a, 0)) 444 if (tcf_action_copy_stats(skb, a, 0))
442 goto nla_put_failure; 445 goto nla_put_failure;
443 nest = nla_nest_start(skb, TCA_OPTIONS); 446 nest = nla_nest_start(skb, TCA_OPTIONS);
diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
index 453a73431ac4..882124ceb70c 100644
--- a/net/sched/act_csum.c
+++ b/net/sched/act_csum.c
@@ -550,11 +550,13 @@ static int tcf_csum_dump(struct sk_buff *skb,
550 }; 550 };
551 struct tcf_t t; 551 struct tcf_t t;
552 552
553 NLA_PUT(skb, TCA_CSUM_PARMS, sizeof(opt), &opt); 553 if (nla_put(skb, TCA_CSUM_PARMS, sizeof(opt), &opt))
554 goto nla_put_failure;
554 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); 555 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
555 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); 556 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
556 t.expires = jiffies_to_clock_t(p->tcf_tm.expires); 557 t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
557 NLA_PUT(skb, TCA_CSUM_TM, sizeof(t), &t); 558 if (nla_put(skb, TCA_CSUM_TM, sizeof(t), &t))
559 goto nla_put_failure;
558 560
559 return skb->len; 561 return skb->len;
560 562
diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c
index b77f5a06a658..f10fb8256442 100644
--- a/net/sched/act_gact.c
+++ b/net/sched/act_gact.c
@@ -162,7 +162,8 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int
162 }; 162 };
163 struct tcf_t t; 163 struct tcf_t t;
164 164
165 NLA_PUT(skb, TCA_GACT_PARMS, sizeof(opt), &opt); 165 if (nla_put(skb, TCA_GACT_PARMS, sizeof(opt), &opt))
166 goto nla_put_failure;
166#ifdef CONFIG_GACT_PROB 167#ifdef CONFIG_GACT_PROB
167 if (gact->tcfg_ptype) { 168 if (gact->tcfg_ptype) {
168 struct tc_gact_p p_opt = { 169 struct tc_gact_p p_opt = {
@@ -171,13 +172,15 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int
171 .ptype = gact->tcfg_ptype, 172 .ptype = gact->tcfg_ptype,
172 }; 173 };
173 174
174 NLA_PUT(skb, TCA_GACT_PROB, sizeof(p_opt), &p_opt); 175 if (nla_put(skb, TCA_GACT_PROB, sizeof(p_opt), &p_opt))
176 goto nla_put_failure;
175 } 177 }
176#endif 178#endif
177 t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install); 179 t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install);
178 t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse); 180 t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse);
179 t.expires = jiffies_to_clock_t(gact->tcf_tm.expires); 181 t.expires = jiffies_to_clock_t(gact->tcf_tm.expires);
180 NLA_PUT(skb, TCA_GACT_TM, sizeof(t), &t); 182 if (nla_put(skb, TCA_GACT_TM, sizeof(t), &t))
183 goto nla_put_failure;
181 return skb->len; 184 return skb->len;
182 185
183nla_put_failure: 186nla_put_failure:
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
index 60f8f616e8fa..0beba0e5312e 100644
--- a/net/sched/act_ipt.c
+++ b/net/sched/act_ipt.c
@@ -267,15 +267,17 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind, int
267 c.refcnt = ipt->tcf_refcnt - ref; 267 c.refcnt = ipt->tcf_refcnt - ref;
268 strcpy(t->u.user.name, ipt->tcfi_t->u.kernel.target->name); 268 strcpy(t->u.user.name, ipt->tcfi_t->u.kernel.target->name);
269 269
270 NLA_PUT(skb, TCA_IPT_TARG, ipt->tcfi_t->u.user.target_size, t); 270 if (nla_put(skb, TCA_IPT_TARG, ipt->tcfi_t->u.user.target_size, t) ||
271 NLA_PUT_U32(skb, TCA_IPT_INDEX, ipt->tcf_index); 271 nla_put_u32(skb, TCA_IPT_INDEX, ipt->tcf_index) ||
272 NLA_PUT_U32(skb, TCA_IPT_HOOK, ipt->tcfi_hook); 272 nla_put_u32(skb, TCA_IPT_HOOK, ipt->tcfi_hook) ||
273 NLA_PUT(skb, TCA_IPT_CNT, sizeof(struct tc_cnt), &c); 273 nla_put(skb, TCA_IPT_CNT, sizeof(struct tc_cnt), &c) ||
274 NLA_PUT_STRING(skb, TCA_IPT_TABLE, ipt->tcfi_tname); 274 nla_put_string(skb, TCA_IPT_TABLE, ipt->tcfi_tname))
275 goto nla_put_failure;
275 tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install); 276 tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install);
276 tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse); 277 tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse);
277 tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires); 278 tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires);
278 NLA_PUT(skb, TCA_IPT_TM, sizeof (tm), &tm); 279 if (nla_put(skb, TCA_IPT_TM, sizeof (tm), &tm))
280 goto nla_put_failure;
279 kfree(t); 281 kfree(t);
280 return skb->len; 282 return skb->len;
281 283
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index e051398fdf6b..d583aea3b3df 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -227,11 +227,13 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i
227 }; 227 };
228 struct tcf_t t; 228 struct tcf_t t;
229 229
230 NLA_PUT(skb, TCA_MIRRED_PARMS, sizeof(opt), &opt); 230 if (nla_put(skb, TCA_MIRRED_PARMS, sizeof(opt), &opt))
231 goto nla_put_failure;
231 t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install); 232 t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install);
232 t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse); 233 t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse);
233 t.expires = jiffies_to_clock_t(m->tcf_tm.expires); 234 t.expires = jiffies_to_clock_t(m->tcf_tm.expires);
234 NLA_PUT(skb, TCA_MIRRED_TM, sizeof(t), &t); 235 if (nla_put(skb, TCA_MIRRED_TM, sizeof(t), &t))
236 goto nla_put_failure;
235 return skb->len; 237 return skb->len;
236 238
237nla_put_failure: 239nla_put_failure:
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 001d1b354869..b5d029eb44f2 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -284,11 +284,13 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a,
284 }; 284 };
285 struct tcf_t t; 285 struct tcf_t t;
286 286
287 NLA_PUT(skb, TCA_NAT_PARMS, sizeof(opt), &opt); 287 if (nla_put(skb, TCA_NAT_PARMS, sizeof(opt), &opt))
288 goto nla_put_failure;
288 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); 289 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
289 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); 290 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
290 t.expires = jiffies_to_clock_t(p->tcf_tm.expires); 291 t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
291 NLA_PUT(skb, TCA_NAT_TM, sizeof(t), &t); 292 if (nla_put(skb, TCA_NAT_TM, sizeof(t), &t))
293 goto nla_put_failure;
292 294
293 return skb->len; 295 return skb->len;
294 296
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index 10d3aed86560..26aa2f6ce257 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -215,11 +215,13 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a,
215 opt->refcnt = p->tcf_refcnt - ref; 215 opt->refcnt = p->tcf_refcnt - ref;
216 opt->bindcnt = p->tcf_bindcnt - bind; 216 opt->bindcnt = p->tcf_bindcnt - bind;
217 217
218 NLA_PUT(skb, TCA_PEDIT_PARMS, s, opt); 218 if (nla_put(skb, TCA_PEDIT_PARMS, s, opt))
219 goto nla_put_failure;
219 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); 220 t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
220 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); 221 t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
221 t.expires = jiffies_to_clock_t(p->tcf_tm.expires); 222 t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
222 NLA_PUT(skb, TCA_PEDIT_TM, sizeof(t), &t); 223 if (nla_put(skb, TCA_PEDIT_TM, sizeof(t), &t))
224 goto nla_put_failure;
223 kfree(opt); 225 kfree(opt);
224 return skb->len; 226 return skb->len;
225 227
diff --git a/net/sched/act_police.c b/net/sched/act_police.c
index 6fb3f5af0f85..a9de23297d47 100644
--- a/net/sched/act_police.c
+++ b/net/sched/act_police.c
@@ -356,11 +356,14 @@ tcf_act_police_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ref)
356 opt.rate = police->tcfp_R_tab->rate; 356 opt.rate = police->tcfp_R_tab->rate;
357 if (police->tcfp_P_tab) 357 if (police->tcfp_P_tab)
358 opt.peakrate = police->tcfp_P_tab->rate; 358 opt.peakrate = police->tcfp_P_tab->rate;
359 NLA_PUT(skb, TCA_POLICE_TBF, sizeof(opt), &opt); 359 if (nla_put(skb, TCA_POLICE_TBF, sizeof(opt), &opt))
360 if (police->tcfp_result) 360 goto nla_put_failure;
361 NLA_PUT_U32(skb, TCA_POLICE_RESULT, police->tcfp_result); 361 if (police->tcfp_result &&
362 if (police->tcfp_ewma_rate) 362 nla_put_u32(skb, TCA_POLICE_RESULT, police->tcfp_result))
363 NLA_PUT_U32(skb, TCA_POLICE_AVRATE, police->tcfp_ewma_rate); 363 goto nla_put_failure;
364 if (police->tcfp_ewma_rate &&
365 nla_put_u32(skb, TCA_POLICE_AVRATE, police->tcfp_ewma_rate))
366 goto nla_put_failure;
364 return skb->len; 367 return skb->len;
365 368
366nla_put_failure: 369nla_put_failure:
diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c
index 73e0a3ab4d55..3922f2a2821b 100644
--- a/net/sched/act_simple.c
+++ b/net/sched/act_simple.c
@@ -172,12 +172,14 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a,
172 }; 172 };
173 struct tcf_t t; 173 struct tcf_t t;
174 174
175 NLA_PUT(skb, TCA_DEF_PARMS, sizeof(opt), &opt); 175 if (nla_put(skb, TCA_DEF_PARMS, sizeof(opt), &opt) ||
176 NLA_PUT_STRING(skb, TCA_DEF_DATA, d->tcfd_defdata); 176 nla_put_string(skb, TCA_DEF_DATA, d->tcfd_defdata))
177 goto nla_put_failure;
177 t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); 178 t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install);
178 t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); 179 t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse);
179 t.expires = jiffies_to_clock_t(d->tcf_tm.expires); 180 t.expires = jiffies_to_clock_t(d->tcf_tm.expires);
180 NLA_PUT(skb, TCA_DEF_TM, sizeof(t), &t); 181 if (nla_put(skb, TCA_DEF_TM, sizeof(t), &t))
182 goto nla_put_failure;
181 return skb->len; 183 return skb->len;
182 184
183nla_put_failure: 185nla_put_failure:
diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
index 35dbbe91027e..476e0fac6712 100644
--- a/net/sched/act_skbedit.c
+++ b/net/sched/act_skbedit.c
@@ -166,20 +166,25 @@ static int tcf_skbedit_dump(struct sk_buff *skb, struct tc_action *a,
166 }; 166 };
167 struct tcf_t t; 167 struct tcf_t t;
168 168
169 NLA_PUT(skb, TCA_SKBEDIT_PARMS, sizeof(opt), &opt); 169 if (nla_put(skb, TCA_SKBEDIT_PARMS, sizeof(opt), &opt))
170 if (d->flags & SKBEDIT_F_PRIORITY) 170 goto nla_put_failure;
171 NLA_PUT(skb, TCA_SKBEDIT_PRIORITY, sizeof(d->priority), 171 if ((d->flags & SKBEDIT_F_PRIORITY) &&
172 &d->priority); 172 nla_put(skb, TCA_SKBEDIT_PRIORITY, sizeof(d->priority),
173 if (d->flags & SKBEDIT_F_QUEUE_MAPPING) 173 &d->priority))
174 NLA_PUT(skb, TCA_SKBEDIT_QUEUE_MAPPING, 174 goto nla_put_failure;
175 sizeof(d->queue_mapping), &d->queue_mapping); 175 if ((d->flags & SKBEDIT_F_QUEUE_MAPPING) &&
176 if (d->flags & SKBEDIT_F_MARK) 176 nla_put(skb, TCA_SKBEDIT_QUEUE_MAPPING,
177 NLA_PUT(skb, TCA_SKBEDIT_MARK, sizeof(d->mark), 177 sizeof(d->queue_mapping), &d->queue_mapping))
178 &d->mark); 178 goto nla_put_failure;
179 if ((d->flags & SKBEDIT_F_MARK) &&
180 nla_put(skb, TCA_SKBEDIT_MARK, sizeof(d->mark),
181 &d->mark))
182 goto nla_put_failure;
179 t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); 183 t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install);
180 t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); 184 t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse);
181 t.expires = jiffies_to_clock_t(d->tcf_tm.expires); 185 t.expires = jiffies_to_clock_t(d->tcf_tm.expires);
182 NLA_PUT(skb, TCA_SKBEDIT_TM, sizeof(t), &t); 186 if (nla_put(skb, TCA_SKBEDIT_TM, sizeof(t), &t))
187 goto nla_put_failure;
183 return skb->len; 188 return skb->len;
184 189
185nla_put_failure: 190nla_put_failure:
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index a69d44f1dac5..f452f696b4b3 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -357,7 +357,8 @@ static int tcf_fill_node(struct sk_buff *skb, struct tcf_proto *tp,
357 tcm->tcm_ifindex = qdisc_dev(tp->q)->ifindex; 357 tcm->tcm_ifindex = qdisc_dev(tp->q)->ifindex;
358 tcm->tcm_parent = tp->classid; 358 tcm->tcm_parent = tp->classid;
359 tcm->tcm_info = TC_H_MAKE(tp->prio, tp->protocol); 359 tcm->tcm_info = TC_H_MAKE(tp->prio, tp->protocol);
360 NLA_PUT_STRING(skb, TCA_KIND, tp->ops->kind); 360 if (nla_put_string(skb, TCA_KIND, tp->ops->kind))
361 goto nla_put_failure;
361 tcm->tcm_handle = fh; 362 tcm->tcm_handle = fh;
362 if (RTM_DELTFILTER != event) { 363 if (RTM_DELTFILTER != event) {
363 tcm->tcm_handle = 0; 364 tcm->tcm_handle = 0;
diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c
index ea1f70b5a5f4..590960a22a77 100644
--- a/net/sched/cls_basic.c
+++ b/net/sched/cls_basic.c
@@ -257,8 +257,9 @@ static int basic_dump(struct tcf_proto *tp, unsigned long fh,
257 if (nest == NULL) 257 if (nest == NULL)
258 goto nla_put_failure; 258 goto nla_put_failure;
259 259
260 if (f->res.classid) 260 if (f->res.classid &&
261 NLA_PUT_U32(skb, TCA_BASIC_CLASSID, f->res.classid); 261 nla_put_u32(skb, TCA_BASIC_CLASSID, f->res.classid))
262 goto nla_put_failure;
262 263
263 if (tcf_exts_dump(skb, &f->exts, &basic_ext_map) < 0 || 264 if (tcf_exts_dump(skb, &f->exts, &basic_ext_map) < 0 ||
264 tcf_em_tree_dump(skb, &f->ematches, TCA_BASIC_EMATCHES) < 0) 265 tcf_em_tree_dump(skb, &f->ematches, TCA_BASIC_EMATCHES) < 0)
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c
index 1d8bd0dbcd1f..ccd08c8dc6a7 100644
--- a/net/sched/cls_flow.c
+++ b/net/sched/cls_flow.c
@@ -572,25 +572,32 @@ static int flow_dump(struct tcf_proto *tp, unsigned long fh,
572 if (nest == NULL) 572 if (nest == NULL)
573 goto nla_put_failure; 573 goto nla_put_failure;
574 574
575 NLA_PUT_U32(skb, TCA_FLOW_KEYS, f->keymask); 575 if (nla_put_u32(skb, TCA_FLOW_KEYS, f->keymask) ||
576 NLA_PUT_U32(skb, TCA_FLOW_MODE, f->mode); 576 nla_put_u32(skb, TCA_FLOW_MODE, f->mode))
577 goto nla_put_failure;
577 578
578 if (f->mask != ~0 || f->xor != 0) { 579 if (f->mask != ~0 || f->xor != 0) {
579 NLA_PUT_U32(skb, TCA_FLOW_MASK, f->mask); 580 if (nla_put_u32(skb, TCA_FLOW_MASK, f->mask) ||
580 NLA_PUT_U32(skb, TCA_FLOW_XOR, f->xor); 581 nla_put_u32(skb, TCA_FLOW_XOR, f->xor))
582 goto nla_put_failure;
581 } 583 }
582 if (f->rshift) 584 if (f->rshift &&
583 NLA_PUT_U32(skb, TCA_FLOW_RSHIFT, f->rshift); 585 nla_put_u32(skb, TCA_FLOW_RSHIFT, f->rshift))
584 if (f->addend) 586 goto nla_put_failure;
585 NLA_PUT_U32(skb, TCA_FLOW_ADDEND, f->addend); 587 if (f->addend &&
588 nla_put_u32(skb, TCA_FLOW_ADDEND, f->addend))
589 goto nla_put_failure;
586 590
587 if (f->divisor) 591 if (f->divisor &&
588 NLA_PUT_U32(skb, TCA_FLOW_DIVISOR, f->divisor); 592 nla_put_u32(skb, TCA_FLOW_DIVISOR, f->divisor))
589 if (f->baseclass) 593 goto nla_put_failure;
590 NLA_PUT_U32(skb, TCA_FLOW_BASECLASS, f->baseclass); 594 if (f->baseclass &&
595 nla_put_u32(skb, TCA_FLOW_BASECLASS, f->baseclass))
596 goto nla_put_failure;
591 597
592 if (f->perturb_period) 598 if (f->perturb_period &&
593 NLA_PUT_U32(skb, TCA_FLOW_PERTURB, f->perturb_period / HZ); 599 nla_put_u32(skb, TCA_FLOW_PERTURB, f->perturb_period / HZ))
600 goto nla_put_failure;
594 601
595 if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0) 602 if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0)
596 goto nla_put_failure; 603 goto nla_put_failure;
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
index 389af152ec45..8384a4797240 100644
--- a/net/sched/cls_fw.c
+++ b/net/sched/cls_fw.c
@@ -346,14 +346,17 @@ static int fw_dump(struct tcf_proto *tp, unsigned long fh,
346 if (nest == NULL) 346 if (nest == NULL)
347 goto nla_put_failure; 347 goto nla_put_failure;
348 348
349 if (f->res.classid) 349 if (f->res.classid &&
350 NLA_PUT_U32(skb, TCA_FW_CLASSID, f->res.classid); 350 nla_put_u32(skb, TCA_FW_CLASSID, f->res.classid))
351 goto nla_put_failure;
351#ifdef CONFIG_NET_CLS_IND 352#ifdef CONFIG_NET_CLS_IND
352 if (strlen(f->indev)) 353 if (strlen(f->indev) &&
353 NLA_PUT_STRING(skb, TCA_FW_INDEV, f->indev); 354 nla_put_string(skb, TCA_FW_INDEV, f->indev))
355 goto nla_put_failure;
354#endif /* CONFIG_NET_CLS_IND */ 356#endif /* CONFIG_NET_CLS_IND */
355 if (head->mask != 0xFFFFFFFF) 357 if (head->mask != 0xFFFFFFFF &&
356 NLA_PUT_U32(skb, TCA_FW_MASK, head->mask); 358 nla_put_u32(skb, TCA_FW_MASK, head->mask))
359 goto nla_put_failure;
357 360
358 if (tcf_exts_dump(skb, &f->exts, &fw_ext_map) < 0) 361 if (tcf_exts_dump(skb, &f->exts, &fw_ext_map) < 0)
359 goto nla_put_failure; 362 goto nla_put_failure;
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index 13ab66e9df58..36fec4227401 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -571,17 +571,21 @@ static int route4_dump(struct tcf_proto *tp, unsigned long fh,
571 571
572 if (!(f->handle & 0x8000)) { 572 if (!(f->handle & 0x8000)) {
573 id = f->id & 0xFF; 573 id = f->id & 0xFF;
574 NLA_PUT_U32(skb, TCA_ROUTE4_TO, id); 574 if (nla_put_u32(skb, TCA_ROUTE4_TO, id))
575 goto nla_put_failure;
575 } 576 }
576 if (f->handle & 0x80000000) { 577 if (f->handle & 0x80000000) {
577 if ((f->handle >> 16) != 0xFFFF) 578 if ((f->handle >> 16) != 0xFFFF &&
578 NLA_PUT_U32(skb, TCA_ROUTE4_IIF, f->iif); 579 nla_put_u32(skb, TCA_ROUTE4_IIF, f->iif))
580 goto nla_put_failure;
579 } else { 581 } else {
580 id = f->id >> 16; 582 id = f->id >> 16;
581 NLA_PUT_U32(skb, TCA_ROUTE4_FROM, id); 583 if (nla_put_u32(skb, TCA_ROUTE4_FROM, id))
584 goto nla_put_failure;
582 } 585 }
583 if (f->res.classid) 586 if (f->res.classid &&
584 NLA_PUT_U32(skb, TCA_ROUTE4_CLASSID, f->res.classid); 587 nla_put_u32(skb, TCA_ROUTE4_CLASSID, f->res.classid))
588 goto nla_put_failure;
585 589
586 if (tcf_exts_dump(skb, &f->exts, &route_ext_map) < 0) 590 if (tcf_exts_dump(skb, &f->exts, &route_ext_map) < 0)
587 goto nla_put_failure; 591 goto nla_put_failure;
diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h
index b01427924f81..18ab93ec8d7e 100644
--- a/net/sched/cls_rsvp.h
+++ b/net/sched/cls_rsvp.h
@@ -615,18 +615,22 @@ static int rsvp_dump(struct tcf_proto *tp, unsigned long fh,
615 if (nest == NULL) 615 if (nest == NULL)
616 goto nla_put_failure; 616 goto nla_put_failure;
617 617
618 NLA_PUT(skb, TCA_RSVP_DST, sizeof(s->dst), &s->dst); 618 if (nla_put(skb, TCA_RSVP_DST, sizeof(s->dst), &s->dst))
619 goto nla_put_failure;
619 pinfo.dpi = s->dpi; 620 pinfo.dpi = s->dpi;
620 pinfo.spi = f->spi; 621 pinfo.spi = f->spi;
621 pinfo.protocol = s->protocol; 622 pinfo.protocol = s->protocol;
622 pinfo.tunnelid = s->tunnelid; 623 pinfo.tunnelid = s->tunnelid;
623 pinfo.tunnelhdr = f->tunnelhdr; 624 pinfo.tunnelhdr = f->tunnelhdr;
624 pinfo.pad = 0; 625 pinfo.pad = 0;
625 NLA_PUT(skb, TCA_RSVP_PINFO, sizeof(pinfo), &pinfo); 626 if (nla_put(skb, TCA_RSVP_PINFO, sizeof(pinfo), &pinfo))
626 if (f->res.classid) 627 goto nla_put_failure;
627 NLA_PUT_U32(skb, TCA_RSVP_CLASSID, f->res.classid); 628 if (f->res.classid &&
628 if (((f->handle >> 8) & 0xFF) != 16) 629 nla_put_u32(skb, TCA_RSVP_CLASSID, f->res.classid))
629 NLA_PUT(skb, TCA_RSVP_SRC, sizeof(f->src), f->src); 630 goto nla_put_failure;
631 if (((f->handle >> 8) & 0xFF) != 16 &&
632 nla_put(skb, TCA_RSVP_SRC, sizeof(f->src), f->src))
633 goto nla_put_failure;
630 634
631 if (tcf_exts_dump(skb, &f->exts, &rsvp_ext_map) < 0) 635 if (tcf_exts_dump(skb, &f->exts, &rsvp_ext_map) < 0)
632 goto nla_put_failure; 636 goto nla_put_failure;
diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
index dbe199234c63..fe29420d0b0e 100644
--- a/net/sched/cls_tcindex.c
+++ b/net/sched/cls_tcindex.c
@@ -438,10 +438,11 @@ static int tcindex_dump(struct tcf_proto *tp, unsigned long fh,
438 438
439 if (!fh) { 439 if (!fh) {
440 t->tcm_handle = ~0; /* whatever ... */ 440 t->tcm_handle = ~0; /* whatever ... */
441 NLA_PUT_U32(skb, TCA_TCINDEX_HASH, p->hash); 441 if (nla_put_u32(skb, TCA_TCINDEX_HASH, p->hash) ||
442 NLA_PUT_U16(skb, TCA_TCINDEX_MASK, p->mask); 442 nla_put_u16(skb, TCA_TCINDEX_MASK, p->mask) ||
443 NLA_PUT_U32(skb, TCA_TCINDEX_SHIFT, p->shift); 443 nla_put_u32(skb, TCA_TCINDEX_SHIFT, p->shift) ||
444 NLA_PUT_U32(skb, TCA_TCINDEX_FALL_THROUGH, p->fall_through); 444 nla_put_u32(skb, TCA_TCINDEX_FALL_THROUGH, p->fall_through))
445 goto nla_put_failure;
445 nla_nest_end(skb, nest); 446 nla_nest_end(skb, nest);
446 } else { 447 } else {
447 if (p->perfect) { 448 if (p->perfect) {
@@ -460,8 +461,9 @@ static int tcindex_dump(struct tcf_proto *tp, unsigned long fh,
460 } 461 }
461 } 462 }
462 pr_debug("handle = %d\n", t->tcm_handle); 463 pr_debug("handle = %d\n", t->tcm_handle);
463 if (r->res.class) 464 if (r->res.class &&
464 NLA_PUT_U32(skb, TCA_TCINDEX_CLASSID, r->res.classid); 465 nla_put_u32(skb, TCA_TCINDEX_CLASSID, r->res.classid))
466 goto nla_put_failure;
465 467
466 if (tcf_exts_dump(skb, &r->exts, &tcindex_ext_map) < 0) 468 if (tcf_exts_dump(skb, &r->exts, &tcindex_ext_map) < 0)
467 goto nla_put_failure; 469 goto nla_put_failure;
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index 939b627b4795..591b006a8c5a 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -733,36 +733,44 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh,
733 struct tc_u_hnode *ht = (struct tc_u_hnode *)fh; 733 struct tc_u_hnode *ht = (struct tc_u_hnode *)fh;
734 u32 divisor = ht->divisor + 1; 734 u32 divisor = ht->divisor + 1;
735 735
736 NLA_PUT_U32(skb, TCA_U32_DIVISOR, divisor); 736 if (nla_put_u32(skb, TCA_U32_DIVISOR, divisor))
737 goto nla_put_failure;
737 } else { 738 } else {
738 NLA_PUT(skb, TCA_U32_SEL, 739 if (nla_put(skb, TCA_U32_SEL,
739 sizeof(n->sel) + n->sel.nkeys*sizeof(struct tc_u32_key), 740 sizeof(n->sel) + n->sel.nkeys*sizeof(struct tc_u32_key),
740 &n->sel); 741 &n->sel))
742 goto nla_put_failure;
741 if (n->ht_up) { 743 if (n->ht_up) {
742 u32 htid = n->handle & 0xFFFFF000; 744 u32 htid = n->handle & 0xFFFFF000;
743 NLA_PUT_U32(skb, TCA_U32_HASH, htid); 745 if (nla_put_u32(skb, TCA_U32_HASH, htid))
746 goto nla_put_failure;
744 } 747 }
745 if (n->res.classid) 748 if (n->res.classid &&
746 NLA_PUT_U32(skb, TCA_U32_CLASSID, n->res.classid); 749 nla_put_u32(skb, TCA_U32_CLASSID, n->res.classid))
747 if (n->ht_down) 750 goto nla_put_failure;
748 NLA_PUT_U32(skb, TCA_U32_LINK, n->ht_down->handle); 751 if (n->ht_down &&
752 nla_put_u32(skb, TCA_U32_LINK, n->ht_down->handle))
753 goto nla_put_failure;
749 754
750#ifdef CONFIG_CLS_U32_MARK 755#ifdef CONFIG_CLS_U32_MARK
751 if (n->mark.val || n->mark.mask) 756 if ((n->mark.val || n->mark.mask) &&
752 NLA_PUT(skb, TCA_U32_MARK, sizeof(n->mark), &n->mark); 757 nla_put(skb, TCA_U32_MARK, sizeof(n->mark), &n->mark))
758 goto nla_put_failure;
753#endif 759#endif
754 760
755 if (tcf_exts_dump(skb, &n->exts, &u32_ext_map) < 0) 761 if (tcf_exts_dump(skb, &n->exts, &u32_ext_map) < 0)
756 goto nla_put_failure; 762 goto nla_put_failure;
757 763
758#ifdef CONFIG_NET_CLS_IND 764#ifdef CONFIG_NET_CLS_IND
759 if (strlen(n->indev)) 765 if (strlen(n->indev) &&
760 NLA_PUT_STRING(skb, TCA_U32_INDEV, n->indev); 766 nla_put_string(skb, TCA_U32_INDEV, n->indev))
767 goto nla_put_failure;
761#endif 768#endif
762#ifdef CONFIG_CLS_U32_PERF 769#ifdef CONFIG_CLS_U32_PERF
763 NLA_PUT(skb, TCA_U32_PCNT, 770 if (nla_put(skb, TCA_U32_PCNT,
764 sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64), 771 sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64),
765 n->pf); 772 n->pf))
773 goto nla_put_failure;
766#endif 774#endif
767 } 775 }
768 776
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c
index 1363bf14e61b..4790c696cbce 100644
--- a/net/sched/em_meta.c
+++ b/net/sched/em_meta.c
@@ -585,8 +585,9 @@ static void meta_var_apply_extras(struct meta_value *v,
585 585
586static int meta_var_dump(struct sk_buff *skb, struct meta_value *v, int tlv) 586static int meta_var_dump(struct sk_buff *skb, struct meta_value *v, int tlv)
587{ 587{
588 if (v->val && v->len) 588 if (v->val && v->len &&
589 NLA_PUT(skb, tlv, v->len, (void *) v->val); 589 nla_put(skb, tlv, v->len, (void *) v->val))
590 goto nla_put_failure;
590 return 0; 591 return 0;
591 592
592nla_put_failure: 593nla_put_failure:
@@ -636,10 +637,13 @@ static void meta_int_apply_extras(struct meta_value *v,
636 637
637static int meta_int_dump(struct sk_buff *skb, struct meta_value *v, int tlv) 638static int meta_int_dump(struct sk_buff *skb, struct meta_value *v, int tlv)
638{ 639{
639 if (v->len == sizeof(unsigned long)) 640 if (v->len == sizeof(unsigned long)) {
640 NLA_PUT(skb, tlv, sizeof(unsigned long), &v->val); 641 if (nla_put(skb, tlv, sizeof(unsigned long), &v->val))
641 else if (v->len == sizeof(u32)) 642 goto nla_put_failure;
642 NLA_PUT_U32(skb, tlv, v->val); 643 } else if (v->len == sizeof(u32)) {
644 if (nla_put_u32(skb, tlv, v->val))
645 goto nla_put_failure;
646 }
643 647
644 return 0; 648 return 0;
645 649
@@ -831,7 +835,8 @@ static int em_meta_dump(struct sk_buff *skb, struct tcf_ematch *em)
831 memcpy(&hdr.left, &meta->lvalue.hdr, sizeof(hdr.left)); 835 memcpy(&hdr.left, &meta->lvalue.hdr, sizeof(hdr.left));
832 memcpy(&hdr.right, &meta->rvalue.hdr, sizeof(hdr.right)); 836 memcpy(&hdr.right, &meta->rvalue.hdr, sizeof(hdr.right));
833 837
834 NLA_PUT(skb, TCA_EM_META_HDR, sizeof(hdr), &hdr); 838 if (nla_put(skb, TCA_EM_META_HDR, sizeof(hdr), &hdr))
839 goto nla_put_failure;
835 840
836 ops = meta_type_ops(&meta->lvalue); 841 ops = meta_type_ops(&meta->lvalue);
837 if (ops->dump(skb, &meta->lvalue, TCA_EM_META_LVALUE) < 0 || 842 if (ops->dump(skb, &meta->lvalue, TCA_EM_META_LVALUE) < 0 ||
diff --git a/net/sched/ematch.c b/net/sched/ematch.c
index 88d93eb92507..aca233c2b848 100644
--- a/net/sched/ematch.c
+++ b/net/sched/ematch.c
@@ -441,7 +441,8 @@ int tcf_em_tree_dump(struct sk_buff *skb, struct tcf_ematch_tree *tree, int tlv)
441 if (top_start == NULL) 441 if (top_start == NULL)
442 goto nla_put_failure; 442 goto nla_put_failure;
443 443
444 NLA_PUT(skb, TCA_EMATCH_TREE_HDR, sizeof(tree->hdr), &tree->hdr); 444 if (nla_put(skb, TCA_EMATCH_TREE_HDR, sizeof(tree->hdr), &tree->hdr))
445 goto nla_put_failure;
445 446
446 list_start = nla_nest_start(skb, TCA_EMATCH_TREE_LIST); 447 list_start = nla_nest_start(skb, TCA_EMATCH_TREE_LIST);
447 if (list_start == NULL) 448 if (list_start == NULL)
@@ -457,7 +458,8 @@ int tcf_em_tree_dump(struct sk_buff *skb, struct tcf_ematch_tree *tree, int tlv)
457 .flags = em->flags 458 .flags = em->flags
458 }; 459 };
459 460
460 NLA_PUT(skb, i + 1, sizeof(em_hdr), &em_hdr); 461 if (nla_put(skb, i + 1, sizeof(em_hdr), &em_hdr))
462 goto nla_put_failure;
461 463
462 if (em->ops && em->ops->dump) { 464 if (em->ops && em->ops->dump) {
463 if (em->ops->dump(skb, em) < 0) 465 if (em->ops->dump(skb, em) < 0)
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 3d8981fde301..d2daefcc205f 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -426,7 +426,8 @@ static int qdisc_dump_stab(struct sk_buff *skb, struct qdisc_size_table *stab)
426 nest = nla_nest_start(skb, TCA_STAB); 426 nest = nla_nest_start(skb, TCA_STAB);
427 if (nest == NULL) 427 if (nest == NULL)
428 goto nla_put_failure; 428 goto nla_put_failure;
429 NLA_PUT(skb, TCA_STAB_BASE, sizeof(stab->szopts), &stab->szopts); 429 if (nla_put(skb, TCA_STAB_BASE, sizeof(stab->szopts), &stab->szopts))
430 goto nla_put_failure;
430 nla_nest_end(skb, nest); 431 nla_nest_end(skb, nest);
431 432
432 return skb->len; 433 return skb->len;
@@ -1201,7 +1202,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid,
1201 tcm->tcm_parent = clid; 1202 tcm->tcm_parent = clid;
1202 tcm->tcm_handle = q->handle; 1203 tcm->tcm_handle = q->handle;
1203 tcm->tcm_info = atomic_read(&q->refcnt); 1204 tcm->tcm_info = atomic_read(&q->refcnt);
1204 NLA_PUT_STRING(skb, TCA_KIND, q->ops->id); 1205 if (nla_put_string(skb, TCA_KIND, q->ops->id))
1206 goto nla_put_failure;
1205 if (q->ops->dump && q->ops->dump(q, skb) < 0) 1207 if (q->ops->dump && q->ops->dump(q, skb) < 0)
1206 goto nla_put_failure; 1208 goto nla_put_failure;
1207 q->qstats.qlen = q->q.qlen; 1209 q->qstats.qlen = q->q.qlen;
@@ -1505,7 +1507,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q,
1505 tcm->tcm_parent = q->handle; 1507 tcm->tcm_parent = q->handle;
1506 tcm->tcm_handle = q->handle; 1508 tcm->tcm_handle = q->handle;
1507 tcm->tcm_info = 0; 1509 tcm->tcm_info = 0;
1508 NLA_PUT_STRING(skb, TCA_KIND, q->ops->id); 1510 if (nla_put_string(skb, TCA_KIND, q->ops->id))
1511 goto nla_put_failure;
1509 if (cl_ops->dump && cl_ops->dump(q, cl, skb, tcm) < 0) 1512 if (cl_ops->dump && cl_ops->dump(q, cl, skb, tcm) < 0)
1510 goto nla_put_failure; 1513 goto nla_put_failure;
1511 1514
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
index e25e49061a0d..a77a4fbc069a 100644
--- a/net/sched/sch_atm.c
+++ b/net/sched/sch_atm.c
@@ -601,7 +601,8 @@ static int atm_tc_dump_class(struct Qdisc *sch, unsigned long cl,
601 if (nest == NULL) 601 if (nest == NULL)
602 goto nla_put_failure; 602 goto nla_put_failure;
603 603
604 NLA_PUT(skb, TCA_ATM_HDR, flow->hdr_len, flow->hdr); 604 if (nla_put(skb, TCA_ATM_HDR, flow->hdr_len, flow->hdr))
605 goto nla_put_failure;
605 if (flow->vcc) { 606 if (flow->vcc) {
606 struct sockaddr_atmpvc pvc; 607 struct sockaddr_atmpvc pvc;
607 int state; 608 int state;
@@ -610,15 +611,19 @@ static int atm_tc_dump_class(struct Qdisc *sch, unsigned long cl,
610 pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1; 611 pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1;
611 pvc.sap_addr.vpi = flow->vcc->vpi; 612 pvc.sap_addr.vpi = flow->vcc->vpi;
612 pvc.sap_addr.vci = flow->vcc->vci; 613 pvc.sap_addr.vci = flow->vcc->vci;
613 NLA_PUT(skb, TCA_ATM_ADDR, sizeof(pvc), &pvc); 614 if (nla_put(skb, TCA_ATM_ADDR, sizeof(pvc), &pvc))
615 goto nla_put_failure;
614 state = ATM_VF2VS(flow->vcc->flags); 616 state = ATM_VF2VS(flow->vcc->flags);
615 NLA_PUT_U32(skb, TCA_ATM_STATE, state); 617 if (nla_put_u32(skb, TCA_ATM_STATE, state))
618 goto nla_put_failure;
619 }
620 if (flow->excess) {
621 if (nla_put_u32(skb, TCA_ATM_EXCESS, flow->classid))
622 goto nla_put_failure;
623 } else {
624 if (nla_put_u32(skb, TCA_ATM_EXCESS, 0))
625 goto nla_put_failure;
616 } 626 }
617 if (flow->excess)
618 NLA_PUT_U32(skb, TCA_ATM_EXCESS, flow->classid);
619 else
620 NLA_PUT_U32(skb, TCA_ATM_EXCESS, 0);
621
622 nla_nest_end(skb, nest); 627 nla_nest_end(skb, nest);
623 return skb->len; 628 return skb->len;
624 629
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 24d94c097b35..6aabd77d1cfd 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -1425,7 +1425,8 @@ static int cbq_dump_rate(struct sk_buff *skb, struct cbq_class *cl)
1425{ 1425{
1426 unsigned char *b = skb_tail_pointer(skb); 1426 unsigned char *b = skb_tail_pointer(skb);
1427 1427
1428 NLA_PUT(skb, TCA_CBQ_RATE, sizeof(cl->R_tab->rate), &cl->R_tab->rate); 1428 if (nla_put(skb, TCA_CBQ_RATE, sizeof(cl->R_tab->rate), &cl->R_tab->rate))
1429 goto nla_put_failure;
1429 return skb->len; 1430 return skb->len;
1430 1431
1431nla_put_failure: 1432nla_put_failure:
@@ -1450,7 +1451,8 @@ static int cbq_dump_lss(struct sk_buff *skb, struct cbq_class *cl)
1450 opt.minidle = (u32)(-cl->minidle); 1451 opt.minidle = (u32)(-cl->minidle);
1451 opt.offtime = cl->offtime; 1452 opt.offtime = cl->offtime;
1452 opt.change = ~0; 1453 opt.change = ~0;
1453 NLA_PUT(skb, TCA_CBQ_LSSOPT, sizeof(opt), &opt); 1454 if (nla_put(skb, TCA_CBQ_LSSOPT, sizeof(opt), &opt))
1455 goto nla_put_failure;
1454 return skb->len; 1456 return skb->len;
1455 1457
1456nla_put_failure: 1458nla_put_failure:
@@ -1468,7 +1470,8 @@ static int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
1468 opt.priority = cl->priority + 1; 1470 opt.priority = cl->priority + 1;
1469 opt.cpriority = cl->cpriority + 1; 1471 opt.cpriority = cl->cpriority + 1;
1470 opt.weight = cl->weight; 1472 opt.weight = cl->weight;
1471 NLA_PUT(skb, TCA_CBQ_WRROPT, sizeof(opt), &opt); 1473 if (nla_put(skb, TCA_CBQ_WRROPT, sizeof(opt), &opt))
1474 goto nla_put_failure;
1472 return skb->len; 1475 return skb->len;
1473 1476
1474nla_put_failure: 1477nla_put_failure:
@@ -1485,7 +1488,8 @@ static int cbq_dump_ovl(struct sk_buff *skb, struct cbq_class *cl)
1485 opt.priority2 = cl->priority2 + 1; 1488 opt.priority2 = cl->priority2 + 1;
1486 opt.pad = 0; 1489 opt.pad = 0;
1487 opt.penalty = cl->penalty; 1490 opt.penalty = cl->penalty;
1488 NLA_PUT(skb, TCA_CBQ_OVL_STRATEGY, sizeof(opt), &opt); 1491 if (nla_put(skb, TCA_CBQ_OVL_STRATEGY, sizeof(opt), &opt))
1492 goto nla_put_failure;
1489 return skb->len; 1493 return skb->len;
1490 1494
1491nla_put_failure: 1495nla_put_failure:
@@ -1502,7 +1506,8 @@ static int cbq_dump_fopt(struct sk_buff *skb, struct cbq_class *cl)
1502 opt.split = cl->split ? cl->split->common.classid : 0; 1506 opt.split = cl->split ? cl->split->common.classid : 0;
1503 opt.defmap = cl->defmap; 1507 opt.defmap = cl->defmap;
1504 opt.defchange = ~0; 1508 opt.defchange = ~0;
1505 NLA_PUT(skb, TCA_CBQ_FOPT, sizeof(opt), &opt); 1509 if (nla_put(skb, TCA_CBQ_FOPT, sizeof(opt), &opt))
1510 goto nla_put_failure;
1506 } 1511 }
1507 return skb->len; 1512 return skb->len;
1508 1513
@@ -1521,7 +1526,8 @@ static int cbq_dump_police(struct sk_buff *skb, struct cbq_class *cl)
1521 opt.police = cl->police; 1526 opt.police = cl->police;
1522 opt.__res1 = 0; 1527 opt.__res1 = 0;
1523 opt.__res2 = 0; 1528 opt.__res2 = 0;
1524 NLA_PUT(skb, TCA_CBQ_POLICE, sizeof(opt), &opt); 1529 if (nla_put(skb, TCA_CBQ_POLICE, sizeof(opt), &opt))
1530 goto nla_put_failure;
1525 } 1531 }
1526 return skb->len; 1532 return skb->len;
1527 1533
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
index 7e267d7b9c75..81445cc8196f 100644
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -515,8 +515,9 @@ static int choke_dump(struct Qdisc *sch, struct sk_buff *skb)
515 if (opts == NULL) 515 if (opts == NULL)
516 goto nla_put_failure; 516 goto nla_put_failure;
517 517
518 NLA_PUT(skb, TCA_CHOKE_PARMS, sizeof(opt), &opt); 518 if (nla_put(skb, TCA_CHOKE_PARMS, sizeof(opt), &opt) ||
519 NLA_PUT_U32(skb, TCA_CHOKE_MAX_P, q->parms.max_P); 519 nla_put_u32(skb, TCA_CHOKE_MAX_P, q->parms.max_P))
520 goto nla_put_failure;
520 return nla_nest_end(skb, opts); 521 return nla_nest_end(skb, opts);
521 522
522nla_put_failure: 523nla_put_failure:
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
index 6b7fe4a84f13..c2189879359b 100644
--- a/net/sched/sch_drr.c
+++ b/net/sched/sch_drr.c
@@ -260,7 +260,8 @@ static int drr_dump_class(struct Qdisc *sch, unsigned long arg,
260 nest = nla_nest_start(skb, TCA_OPTIONS); 260 nest = nla_nest_start(skb, TCA_OPTIONS);
261 if (nest == NULL) 261 if (nest == NULL)
262 goto nla_put_failure; 262 goto nla_put_failure;
263 NLA_PUT_U32(skb, TCA_DRR_QUANTUM, cl->quantum); 263 if (nla_put_u32(skb, TCA_DRR_QUANTUM, cl->quantum))
264 goto nla_put_failure;
264 return nla_nest_end(skb, nest); 265 return nla_nest_end(skb, nest);
265 266
266nla_put_failure: 267nla_put_failure:
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
index 2c790204d042..389b856c6653 100644
--- a/net/sched/sch_dsmark.c
+++ b/net/sched/sch_dsmark.c
@@ -429,8 +429,9 @@ static int dsmark_dump_class(struct Qdisc *sch, unsigned long cl,
429 opts = nla_nest_start(skb, TCA_OPTIONS); 429 opts = nla_nest_start(skb, TCA_OPTIONS);
430 if (opts == NULL) 430 if (opts == NULL)
431 goto nla_put_failure; 431 goto nla_put_failure;
432 NLA_PUT_U8(skb, TCA_DSMARK_MASK, p->mask[cl - 1]); 432 if (nla_put_u8(skb, TCA_DSMARK_MASK, p->mask[cl - 1]) ||
433 NLA_PUT_U8(skb, TCA_DSMARK_VALUE, p->value[cl - 1]); 433 nla_put_u8(skb, TCA_DSMARK_VALUE, p->value[cl - 1]))
434 goto nla_put_failure;
434 435
435 return nla_nest_end(skb, opts); 436 return nla_nest_end(skb, opts);
436 437
@@ -447,13 +448,16 @@ static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb)
447 opts = nla_nest_start(skb, TCA_OPTIONS); 448 opts = nla_nest_start(skb, TCA_OPTIONS);
448 if (opts == NULL) 449 if (opts == NULL)
449 goto nla_put_failure; 450 goto nla_put_failure;
450 NLA_PUT_U16(skb, TCA_DSMARK_INDICES, p->indices); 451 if (nla_put_u16(skb, TCA_DSMARK_INDICES, p->indices))
452 goto nla_put_failure;
451 453
452 if (p->default_index != NO_DEFAULT_INDEX) 454 if (p->default_index != NO_DEFAULT_INDEX &&
453 NLA_PUT_U16(skb, TCA_DSMARK_DEFAULT_INDEX, p->default_index); 455 nla_put_u16(skb, TCA_DSMARK_DEFAULT_INDEX, p->default_index))
456 goto nla_put_failure;
454 457
455 if (p->set_tc_index) 458 if (p->set_tc_index &&
456 NLA_PUT_FLAG(skb, TCA_DSMARK_SET_TC_INDEX); 459 nla_put_flag(skb, TCA_DSMARK_SET_TC_INDEX))
460 goto nla_put_failure;
457 461
458 return nla_nest_end(skb, opts); 462 return nla_nest_end(skb, opts);
459 463
diff --git a/net/sched/sch_fifo.c b/net/sched/sch_fifo.c
index 66effe2da8e0..e15a9eb29087 100644
--- a/net/sched/sch_fifo.c
+++ b/net/sched/sch_fifo.c
@@ -85,7 +85,8 @@ static int fifo_dump(struct Qdisc *sch, struct sk_buff *skb)
85{ 85{
86 struct tc_fifo_qopt opt = { .limit = sch->limit }; 86 struct tc_fifo_qopt opt = { .limit = sch->limit };
87 87
88 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 88 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
89 goto nla_put_failure;
89 return skb->len; 90 return skb->len;
90 91
91nla_put_failure: 92nla_put_failure:
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 67fc573e013a..0eb1202c22a6 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -512,7 +512,8 @@ static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
512 struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS }; 512 struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS };
513 513
514 memcpy(&opt.priomap, prio2band, TC_PRIO_MAX + 1); 514 memcpy(&opt.priomap, prio2band, TC_PRIO_MAX + 1);
515 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 515 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
516 goto nla_put_failure;
516 return skb->len; 517 return skb->len;
517 518
518nla_put_failure: 519nla_put_failure:
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
index 0b15236be7b6..55e3310edc94 100644
--- a/net/sched/sch_gred.c
+++ b/net/sched/sch_gred.c
@@ -521,14 +521,16 @@ static int gred_dump(struct Qdisc *sch, struct sk_buff *skb)
521 opts = nla_nest_start(skb, TCA_OPTIONS); 521 opts = nla_nest_start(skb, TCA_OPTIONS);
522 if (opts == NULL) 522 if (opts == NULL)
523 goto nla_put_failure; 523 goto nla_put_failure;
524 NLA_PUT(skb, TCA_GRED_DPS, sizeof(sopt), &sopt); 524 if (nla_put(skb, TCA_GRED_DPS, sizeof(sopt), &sopt))
525 goto nla_put_failure;
525 526
526 for (i = 0; i < MAX_DPs; i++) { 527 for (i = 0; i < MAX_DPs; i++) {
527 struct gred_sched_data *q = table->tab[i]; 528 struct gred_sched_data *q = table->tab[i];
528 529
529 max_p[i] = q ? q->parms.max_P : 0; 530 max_p[i] = q ? q->parms.max_P : 0;
530 } 531 }
531 NLA_PUT(skb, TCA_GRED_MAX_P, sizeof(max_p), max_p); 532 if (nla_put(skb, TCA_GRED_MAX_P, sizeof(max_p), max_p))
533 goto nla_put_failure;
532 534
533 parms = nla_nest_start(skb, TCA_GRED_PARMS); 535 parms = nla_nest_start(skb, TCA_GRED_PARMS);
534 if (parms == NULL) 536 if (parms == NULL)
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
index 9bdca2e011e9..8db3e2c72827 100644
--- a/net/sched/sch_hfsc.c
+++ b/net/sched/sch_hfsc.c
@@ -1305,7 +1305,8 @@ hfsc_dump_sc(struct sk_buff *skb, int attr, struct internal_sc *sc)
1305 tsc.m1 = sm2m(sc->sm1); 1305 tsc.m1 = sm2m(sc->sm1);
1306 tsc.d = dx2d(sc->dx); 1306 tsc.d = dx2d(sc->dx);
1307 tsc.m2 = sm2m(sc->sm2); 1307 tsc.m2 = sm2m(sc->sm2);
1308 NLA_PUT(skb, attr, sizeof(tsc), &tsc); 1308 if (nla_put(skb, attr, sizeof(tsc), &tsc))
1309 goto nla_put_failure;
1309 1310
1310 return skb->len; 1311 return skb->len;
1311 1312
@@ -1573,7 +1574,8 @@ hfsc_dump_qdisc(struct Qdisc *sch, struct sk_buff *skb)
1573 } 1574 }
1574 1575
1575 qopt.defcls = q->defcls; 1576 qopt.defcls = q->defcls;
1576 NLA_PUT(skb, TCA_OPTIONS, sizeof(qopt), &qopt); 1577 if (nla_put(skb, TCA_OPTIONS, sizeof(qopt), &qopt))
1578 goto nla_put_failure;
1577 return skb->len; 1579 return skb->len;
1578 1580
1579 nla_put_failure: 1581 nla_put_failure:
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 29b942ce9e82..2ea6f196e3c8 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -1051,7 +1051,8 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
1051 nest = nla_nest_start(skb, TCA_OPTIONS); 1051 nest = nla_nest_start(skb, TCA_OPTIONS);
1052 if (nest == NULL) 1052 if (nest == NULL)
1053 goto nla_put_failure; 1053 goto nla_put_failure;
1054 NLA_PUT(skb, TCA_HTB_INIT, sizeof(gopt), &gopt); 1054 if (nla_put(skb, TCA_HTB_INIT, sizeof(gopt), &gopt))
1055 goto nla_put_failure;
1055 nla_nest_end(skb, nest); 1056 nla_nest_end(skb, nest);
1056 1057
1057 spin_unlock_bh(root_lock); 1058 spin_unlock_bh(root_lock);
@@ -1090,7 +1091,8 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
1090 opt.quantum = cl->quantum; 1091 opt.quantum = cl->quantum;
1091 opt.prio = cl->prio; 1092 opt.prio = cl->prio;
1092 opt.level = cl->level; 1093 opt.level = cl->level;
1093 NLA_PUT(skb, TCA_HTB_PARMS, sizeof(opt), &opt); 1094 if (nla_put(skb, TCA_HTB_PARMS, sizeof(opt), &opt))
1095 goto nla_put_failure;
1094 1096
1095 nla_nest_end(skb, nest); 1097 nla_nest_end(skb, nest);
1096 spin_unlock_bh(root_lock); 1098 spin_unlock_bh(root_lock);
diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
index 28de43092330..d1831ca966d4 100644
--- a/net/sched/sch_mqprio.c
+++ b/net/sched/sch_mqprio.c
@@ -247,7 +247,8 @@ static int mqprio_dump(struct Qdisc *sch, struct sk_buff *skb)
247 opt.offset[i] = dev->tc_to_txq[i].offset; 247 opt.offset[i] = dev->tc_to_txq[i].offset;
248 } 248 }
249 249
250 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 250 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
251 goto nla_put_failure;
251 252
252 return skb->len; 253 return skb->len;
253nla_put_failure: 254nla_put_failure:
diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c
index 49131d7a7446..2a2b096d9a66 100644
--- a/net/sched/sch_multiq.c
+++ b/net/sched/sch_multiq.c
@@ -284,7 +284,8 @@ static int multiq_dump(struct Qdisc *sch, struct sk_buff *skb)
284 opt.bands = q->bands; 284 opt.bands = q->bands;
285 opt.max_bands = q->max_bands; 285 opt.max_bands = q->max_bands;
286 286
287 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 287 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
288 goto nla_put_failure;
288 289
289 return skb->len; 290 return skb->len;
290 291
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 5da548fa7ae9..110973145a4b 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -834,7 +834,8 @@ static int dump_loss_model(const struct netem_sched_data *q,
834 .p23 = q->clg.a5, 834 .p23 = q->clg.a5,
835 }; 835 };
836 836
837 NLA_PUT(skb, NETEM_LOSS_GI, sizeof(gi), &gi); 837 if (nla_put(skb, NETEM_LOSS_GI, sizeof(gi), &gi))
838 goto nla_put_failure;
838 break; 839 break;
839 } 840 }
840 case CLG_GILB_ELL: { 841 case CLG_GILB_ELL: {
@@ -845,7 +846,8 @@ static int dump_loss_model(const struct netem_sched_data *q,
845 .k1 = q->clg.a4, 846 .k1 = q->clg.a4,
846 }; 847 };
847 848
848 NLA_PUT(skb, NETEM_LOSS_GE, sizeof(ge), &ge); 849 if (nla_put(skb, NETEM_LOSS_GE, sizeof(ge), &ge))
850 goto nla_put_failure;
849 break; 851 break;
850 } 852 }
851 } 853 }
@@ -874,26 +876,31 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb)
874 qopt.loss = q->loss; 876 qopt.loss = q->loss;
875 qopt.gap = q->gap; 877 qopt.gap = q->gap;
876 qopt.duplicate = q->duplicate; 878 qopt.duplicate = q->duplicate;
877 NLA_PUT(skb, TCA_OPTIONS, sizeof(qopt), &qopt); 879 if (nla_put(skb, TCA_OPTIONS, sizeof(qopt), &qopt))
880 goto nla_put_failure;
878 881
879 cor.delay_corr = q->delay_cor.rho; 882 cor.delay_corr = q->delay_cor.rho;
880 cor.loss_corr = q->loss_cor.rho; 883 cor.loss_corr = q->loss_cor.rho;
881 cor.dup_corr = q->dup_cor.rho; 884 cor.dup_corr = q->dup_cor.rho;
882 NLA_PUT(skb, TCA_NETEM_CORR, sizeof(cor), &cor); 885 if (nla_put(skb, TCA_NETEM_CORR, sizeof(cor), &cor))
886 goto nla_put_failure;
883 887
884 reorder.probability = q->reorder; 888 reorder.probability = q->reorder;
885 reorder.correlation = q->reorder_cor.rho; 889 reorder.correlation = q->reorder_cor.rho;
886 NLA_PUT(skb, TCA_NETEM_REORDER, sizeof(reorder), &reorder); 890 if (nla_put(skb, TCA_NETEM_REORDER, sizeof(reorder), &reorder))
891 goto nla_put_failure;
887 892
888 corrupt.probability = q->corrupt; 893 corrupt.probability = q->corrupt;
889 corrupt.correlation = q->corrupt_cor.rho; 894 corrupt.correlation = q->corrupt_cor.rho;
890 NLA_PUT(skb, TCA_NETEM_CORRUPT, sizeof(corrupt), &corrupt); 895 if (nla_put(skb, TCA_NETEM_CORRUPT, sizeof(corrupt), &corrupt))
896 goto nla_put_failure;
891 897
892 rate.rate = q->rate; 898 rate.rate = q->rate;
893 rate.packet_overhead = q->packet_overhead; 899 rate.packet_overhead = q->packet_overhead;
894 rate.cell_size = q->cell_size; 900 rate.cell_size = q->cell_size;
895 rate.cell_overhead = q->cell_overhead; 901 rate.cell_overhead = q->cell_overhead;
896 NLA_PUT(skb, TCA_NETEM_RATE, sizeof(rate), &rate); 902 if (nla_put(skb, TCA_NETEM_RATE, sizeof(rate), &rate))
903 goto nla_put_failure;
897 904
898 if (dump_loss_model(q, skb) != 0) 905 if (dump_loss_model(q, skb) != 0)
899 goto nla_put_failure; 906 goto nla_put_failure;
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c
index b5d56a22b1d2..79359b69ad8d 100644
--- a/net/sched/sch_prio.c
+++ b/net/sched/sch_prio.c
@@ -247,7 +247,8 @@ static int prio_dump(struct Qdisc *sch, struct sk_buff *skb)
247 opt.bands = q->bands; 247 opt.bands = q->bands;
248 memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX + 1); 248 memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX + 1);
249 249
250 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 250 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
251 goto nla_put_failure;
251 252
252 return skb->len; 253 return skb->len;
253 254
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index e68cb440756a..9af01f3df18c 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -429,8 +429,9 @@ static int qfq_dump_class(struct Qdisc *sch, unsigned long arg,
429 nest = nla_nest_start(skb, TCA_OPTIONS); 429 nest = nla_nest_start(skb, TCA_OPTIONS);
430 if (nest == NULL) 430 if (nest == NULL)
431 goto nla_put_failure; 431 goto nla_put_failure;
432 NLA_PUT_U32(skb, TCA_QFQ_WEIGHT, ONE_FP/cl->inv_w); 432 if (nla_put_u32(skb, TCA_QFQ_WEIGHT, ONE_FP/cl->inv_w) ||
433 NLA_PUT_U32(skb, TCA_QFQ_LMAX, cl->lmax); 433 nla_put_u32(skb, TCA_QFQ_LMAX, cl->lmax))
434 goto nla_put_failure;
434 return nla_nest_end(skb, nest); 435 return nla_nest_end(skb, nest);
435 436
436nla_put_failure: 437nla_put_failure:
diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
index a5cc3012cf42..633e32defdcc 100644
--- a/net/sched/sch_red.c
+++ b/net/sched/sch_red.c
@@ -272,8 +272,9 @@ static int red_dump(struct Qdisc *sch, struct sk_buff *skb)
272 opts = nla_nest_start(skb, TCA_OPTIONS); 272 opts = nla_nest_start(skb, TCA_OPTIONS);
273 if (opts == NULL) 273 if (opts == NULL)
274 goto nla_put_failure; 274 goto nla_put_failure;
275 NLA_PUT(skb, TCA_RED_PARMS, sizeof(opt), &opt); 275 if (nla_put(skb, TCA_RED_PARMS, sizeof(opt), &opt) ||
276 NLA_PUT_U32(skb, TCA_RED_MAX_P, q->parms.max_P); 276 nla_put_u32(skb, TCA_RED_MAX_P, q->parms.max_P))
277 goto nla_put_failure;
277 return nla_nest_end(skb, opts); 278 return nla_nest_end(skb, opts);
278 279
279nla_put_failure: 280nla_put_failure:
diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c
index d7eea99333e9..74305c883bd3 100644
--- a/net/sched/sch_sfb.c
+++ b/net/sched/sch_sfb.c
@@ -570,7 +570,8 @@ static int sfb_dump(struct Qdisc *sch, struct sk_buff *skb)
570 570
571 sch->qstats.backlog = q->qdisc->qstats.backlog; 571 sch->qstats.backlog = q->qdisc->qstats.backlog;
572 opts = nla_nest_start(skb, TCA_OPTIONS); 572 opts = nla_nest_start(skb, TCA_OPTIONS);
573 NLA_PUT(skb, TCA_SFB_PARMS, sizeof(opt), &opt); 573 if (nla_put(skb, TCA_SFB_PARMS, sizeof(opt), &opt))
574 goto nla_put_failure;
574 return nla_nest_end(skb, opts); 575 return nla_nest_end(skb, opts);
575 576
576nla_put_failure: 577nla_put_failure:
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index 02a21abea65e..d3a1bc26dbfc 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -812,7 +812,8 @@ static int sfq_dump(struct Qdisc *sch, struct sk_buff *skb)
812 memcpy(&opt.stats, &q->stats, sizeof(opt.stats)); 812 memcpy(&opt.stats, &q->stats, sizeof(opt.stats));
813 opt.flags = q->flags; 813 opt.flags = q->flags;
814 814
815 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 815 if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
816 goto nla_put_failure;
816 817
817 return skb->len; 818 return skb->len;
818 819
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
index b8e156319d7b..4b056c15e90c 100644
--- a/net/sched/sch_tbf.c
+++ b/net/sched/sch_tbf.c
@@ -359,7 +359,8 @@ static int tbf_dump(struct Qdisc *sch, struct sk_buff *skb)
359 memset(&opt.peakrate, 0, sizeof(opt.peakrate)); 359 memset(&opt.peakrate, 0, sizeof(opt.peakrate));
360 opt.mtu = q->mtu; 360 opt.mtu = q->mtu;
361 opt.buffer = q->buffer; 361 opt.buffer = q->buffer;
362 NLA_PUT(skb, TCA_TBF_PARMS, sizeof(opt), &opt); 362 if (nla_put(skb, TCA_TBF_PARMS, sizeof(opt), &opt))
363 goto nla_put_failure;
363 364
364 nla_nest_end(skb, nest); 365 nla_nest_end(skb, nest);
365 return skb->len; 366 return skb->len;