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:
@ -572,25 +572,32 @@ static int flow_dump(struct tcf_proto *tp, unsigned long fh,
|
||||
if (nest == NULL)
|
||||
goto nla_put_failure;
|
||||
|
||||
NLA_PUT_U32(skb, TCA_FLOW_KEYS, f->keymask);
|
||||
NLA_PUT_U32(skb, TCA_FLOW_MODE, f->mode);
|
||||
if (nla_put_u32(skb, TCA_FLOW_KEYS, f->keymask) ||
|
||||
nla_put_u32(skb, TCA_FLOW_MODE, f->mode))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (f->mask != ~0 || f->xor != 0) {
|
||||
NLA_PUT_U32(skb, TCA_FLOW_MASK, f->mask);
|
||||
NLA_PUT_U32(skb, TCA_FLOW_XOR, f->xor);
|
||||
if (nla_put_u32(skb, TCA_FLOW_MASK, f->mask) ||
|
||||
nla_put_u32(skb, TCA_FLOW_XOR, f->xor))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
if (f->rshift)
|
||||
NLA_PUT_U32(skb, TCA_FLOW_RSHIFT, f->rshift);
|
||||
if (f->addend)
|
||||
NLA_PUT_U32(skb, TCA_FLOW_ADDEND, f->addend);
|
||||
if (f->rshift &&
|
||||
nla_put_u32(skb, TCA_FLOW_RSHIFT, f->rshift))
|
||||
goto nla_put_failure;
|
||||
if (f->addend &&
|
||||
nla_put_u32(skb, TCA_FLOW_ADDEND, f->addend))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (f->divisor)
|
||||
NLA_PUT_U32(skb, TCA_FLOW_DIVISOR, f->divisor);
|
||||
if (f->baseclass)
|
||||
NLA_PUT_U32(skb, TCA_FLOW_BASECLASS, f->baseclass);
|
||||
if (f->divisor &&
|
||||
nla_put_u32(skb, TCA_FLOW_DIVISOR, f->divisor))
|
||||
goto nla_put_failure;
|
||||
if (f->baseclass &&
|
||||
nla_put_u32(skb, TCA_FLOW_BASECLASS, f->baseclass))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (f->perturb_period)
|
||||
NLA_PUT_U32(skb, TCA_FLOW_PERTURB, f->perturb_period / HZ);
|
||||
if (f->perturb_period &&
|
||||
nla_put_u32(skb, TCA_FLOW_PERTURB, f->perturb_period / HZ))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0)
|
||||
goto nla_put_failure;
|
||||
|
Reference in New Issue
Block a user