Skip to content

Commit d317e4f

Browse files
committed
netfilter: ipv4: 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>
1 parent f3756b7 commit d317e4f

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,9 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len)
303303
static int ipv4_tuple_to_nlattr(struct sk_buff *skb,
304304
const struct nf_conntrack_tuple *tuple)
305305
{
306-
NLA_PUT_BE32(skb, CTA_IP_V4_SRC, tuple->src.u3.ip);
307-
NLA_PUT_BE32(skb, CTA_IP_V4_DST, tuple->dst.u3.ip);
306+
if (nla_put_be32(skb, CTA_IP_V4_SRC, tuple->src.u3.ip) ||
307+
nla_put_be32(skb, CTA_IP_V4_DST, tuple->dst.u3.ip))
308+
goto nla_put_failure;
308309
return 0;
309310

310311
nla_put_failure:

net/ipv4/netfilter/nf_conntrack_proto_icmp.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,10 @@ icmp_error(struct net *net, struct nf_conn *tmpl,
228228
static int icmp_tuple_to_nlattr(struct sk_buff *skb,
229229
const struct nf_conntrack_tuple *t)
230230
{
231-
NLA_PUT_BE16(skb, CTA_PROTO_ICMP_ID, t->src.u.icmp.id);
232-
NLA_PUT_U8(skb, CTA_PROTO_ICMP_TYPE, t->dst.u.icmp.type);
233-
NLA_PUT_U8(skb, CTA_PROTO_ICMP_CODE, t->dst.u.icmp.code);
234-
231+
if (nla_put_be16(skb, CTA_PROTO_ICMP_ID, t->src.u.icmp.id) ||
232+
nla_put_u8(skb, CTA_PROTO_ICMP_TYPE, t->dst.u.icmp.type) ||
233+
nla_put_u8(skb, CTA_PROTO_ICMP_CODE, t->dst.u.icmp.code))
234+
goto nla_put_failure;
235235
return 0;
236236

237237
nla_put_failure:
@@ -293,8 +293,8 @@ icmp_timeout_obj_to_nlattr(struct sk_buff *skb, const void *data)
293293
{
294294
const unsigned int *timeout = data;
295295

296-
NLA_PUT_BE32(skb, CTA_TIMEOUT_ICMP_TIMEOUT, htonl(*timeout / HZ));
297-
296+
if (nla_put_be32(skb, CTA_TIMEOUT_ICMP_TIMEOUT, htonl(*timeout / HZ)))
297+
goto nla_put_failure;
298298
return 0;
299299

300300
nla_put_failure:

0 commit comments

Comments
 (0)