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:
@@ -733,36 +733,44 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh,
|
||||
struct tc_u_hnode *ht = (struct tc_u_hnode *)fh;
|
||||
u32 divisor = ht->divisor + 1;
|
||||
|
||||
NLA_PUT_U32(skb, TCA_U32_DIVISOR, divisor);
|
||||
if (nla_put_u32(skb, TCA_U32_DIVISOR, divisor))
|
||||
goto nla_put_failure;
|
||||
} else {
|
||||
NLA_PUT(skb, TCA_U32_SEL,
|
||||
sizeof(n->sel) + n->sel.nkeys*sizeof(struct tc_u32_key),
|
||||
&n->sel);
|
||||
if (nla_put(skb, TCA_U32_SEL,
|
||||
sizeof(n->sel) + n->sel.nkeys*sizeof(struct tc_u32_key),
|
||||
&n->sel))
|
||||
goto nla_put_failure;
|
||||
if (n->ht_up) {
|
||||
u32 htid = n->handle & 0xFFFFF000;
|
||||
NLA_PUT_U32(skb, TCA_U32_HASH, htid);
|
||||
if (nla_put_u32(skb, TCA_U32_HASH, htid))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if (n->res.classid)
|
||||
NLA_PUT_U32(skb, TCA_U32_CLASSID, n->res.classid);
|
||||
if (n->ht_down)
|
||||
NLA_PUT_U32(skb, TCA_U32_LINK, n->ht_down->handle);
|
||||
if (n->res.classid &&
|
||||
nla_put_u32(skb, TCA_U32_CLASSID, n->res.classid))
|
||||
goto nla_put_failure;
|
||||
if (n->ht_down &&
|
||||
nla_put_u32(skb, TCA_U32_LINK, n->ht_down->handle))
|
||||
goto nla_put_failure;
|
||||
|
||||
#ifdef CONFIG_CLS_U32_MARK
|
||||
if (n->mark.val || n->mark.mask)
|
||||
NLA_PUT(skb, TCA_U32_MARK, sizeof(n->mark), &n->mark);
|
||||
if ((n->mark.val || n->mark.mask) &&
|
||||
nla_put(skb, TCA_U32_MARK, sizeof(n->mark), &n->mark))
|
||||
goto nla_put_failure;
|
||||
#endif
|
||||
|
||||
if (tcf_exts_dump(skb, &n->exts, &u32_ext_map) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
#ifdef CONFIG_NET_CLS_IND
|
||||
if (strlen(n->indev))
|
||||
NLA_PUT_STRING(skb, TCA_U32_INDEV, n->indev);
|
||||
if (strlen(n->indev) &&
|
||||
nla_put_string(skb, TCA_U32_INDEV, n->indev))
|
||||
goto nla_put_failure;
|
||||
#endif
|
||||
#ifdef CONFIG_CLS_U32_PERF
|
||||
NLA_PUT(skb, TCA_U32_PCNT,
|
||||
sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64),
|
||||
n->pf);
|
||||
if (nla_put(skb, TCA_U32_PCNT,
|
||||
sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64),
|
||||
n->pf))
|
||||
goto nla_put_failure;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user