提交 7c801189 编写于 作者: D David S. Miller

nfnetlink_acct: 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: NDavid S. Miller <davem@davemloft.net>
上级 48f03bda
...@@ -109,7 +109,8 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 pid, u32 seq, u32 type, ...@@ -109,7 +109,8 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 pid, u32 seq, u32 type,
nfmsg->version = NFNETLINK_V0; nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = 0; nfmsg->res_id = 0;
NLA_PUT_STRING(skb, NFACCT_NAME, acct->name); if (nla_put_string(skb, NFACCT_NAME, acct->name))
goto nla_put_failure;
if (type == NFNL_MSG_ACCT_GET_CTRZERO) { if (type == NFNL_MSG_ACCT_GET_CTRZERO) {
pkts = atomic64_xchg(&acct->pkts, 0); pkts = atomic64_xchg(&acct->pkts, 0);
...@@ -118,9 +119,10 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 pid, u32 seq, u32 type, ...@@ -118,9 +119,10 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 pid, u32 seq, u32 type,
pkts = atomic64_read(&acct->pkts); pkts = atomic64_read(&acct->pkts);
bytes = atomic64_read(&acct->bytes); bytes = atomic64_read(&acct->bytes);
} }
NLA_PUT_BE64(skb, NFACCT_PKTS, cpu_to_be64(pkts)); if (nla_put_be64(skb, NFACCT_PKTS, cpu_to_be64(pkts)) ||
NLA_PUT_BE64(skb, NFACCT_BYTES, cpu_to_be64(bytes)); nla_put_be64(skb, NFACCT_BYTES, cpu_to_be64(bytes)) ||
NLA_PUT_BE32(skb, NFACCT_USE, htonl(atomic_read(&acct->refcnt))); nla_put_be32(skb, NFACCT_USE, htonl(atomic_read(&acct->refcnt))))
goto nla_put_failure;
nlmsg_end(skb, nlh); nlmsg_end(skb, nlh);
return skb->len; return skb->len;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册