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>
This commit is contained in:
@@ -1425,7 +1425,8 @@ static int cbq_dump_rate(struct sk_buff *skb, struct cbq_class *cl)
|
||||
{
|
||||
unsigned char *b = skb_tail_pointer(skb);
|
||||
|
||||
NLA_PUT(skb, TCA_CBQ_RATE, sizeof(cl->R_tab->rate), &cl->R_tab->rate);
|
||||
if (nla_put(skb, TCA_CBQ_RATE, sizeof(cl->R_tab->rate), &cl->R_tab->rate))
|
||||
goto nla_put_failure;
|
||||
return skb->len;
|
||||
|
||||
nla_put_failure:
|
||||
@@ -1450,7 +1451,8 @@ static int cbq_dump_lss(struct sk_buff *skb, struct cbq_class *cl)
|
||||
opt.minidle = (u32)(-cl->minidle);
|
||||
opt.offtime = cl->offtime;
|
||||
opt.change = ~0;
|
||||
NLA_PUT(skb, TCA_CBQ_LSSOPT, sizeof(opt), &opt);
|
||||
if (nla_put(skb, TCA_CBQ_LSSOPT, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
return skb->len;
|
||||
|
||||
nla_put_failure:
|
||||
@@ -1468,7 +1470,8 @@ static int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
|
||||
opt.priority = cl->priority + 1;
|
||||
opt.cpriority = cl->cpriority + 1;
|
||||
opt.weight = cl->weight;
|
||||
NLA_PUT(skb, TCA_CBQ_WRROPT, sizeof(opt), &opt);
|
||||
if (nla_put(skb, TCA_CBQ_WRROPT, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
return skb->len;
|
||||
|
||||
nla_put_failure:
|
||||
@@ -1485,7 +1488,8 @@ static int cbq_dump_ovl(struct sk_buff *skb, struct cbq_class *cl)
|
||||
opt.priority2 = cl->priority2 + 1;
|
||||
opt.pad = 0;
|
||||
opt.penalty = cl->penalty;
|
||||
NLA_PUT(skb, TCA_CBQ_OVL_STRATEGY, sizeof(opt), &opt);
|
||||
if (nla_put(skb, TCA_CBQ_OVL_STRATEGY, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
return skb->len;
|
||||
|
||||
nla_put_failure:
|
||||
@@ -1502,7 +1506,8 @@ static int cbq_dump_fopt(struct sk_buff *skb, struct cbq_class *cl)
|
||||
opt.split = cl->split ? cl->split->common.classid : 0;
|
||||
opt.defmap = cl->defmap;
|
||||
opt.defchange = ~0;
|
||||
NLA_PUT(skb, TCA_CBQ_FOPT, sizeof(opt), &opt);
|
||||
if (nla_put(skb, TCA_CBQ_FOPT, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
return skb->len;
|
||||
|
||||
@@ -1521,7 +1526,8 @@ static int cbq_dump_police(struct sk_buff *skb, struct cbq_class *cl)
|
||||
opt.police = cl->police;
|
||||
opt.__res1 = 0;
|
||||
opt.__res2 = 0;
|
||||
NLA_PUT(skb, TCA_CBQ_POLICE, sizeof(opt), &opt);
|
||||
if (nla_put(skb, TCA_CBQ_POLICE, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
return skb->len;
|
||||
|
||||
|
Reference in New Issue
Block a user