Commit 9871f1ad authored by Vasiliy Kulikov's avatar Vasiliy Kulikov Committed by David S. Miller

ip: fix error handling in ip_finish_output2()

__neigh_create() returns either a pointer to struct neighbour or PTR_ERR().
But the caller expects it to return either a pointer or NULL.  Replace
the NULL check with IS_ERR() check.

The bug was introduced in a263b309
("ipv4: Make neigh lookups directly in output packet path.").
Signed-off-by: default avatarVasily Kulikov <segoon@openwall.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91d27a86
...@@ -197,7 +197,7 @@ static inline int ip_finish_output2(struct sk_buff *skb) ...@@ -197,7 +197,7 @@ static inline int ip_finish_output2(struct sk_buff *skb)
neigh = __ipv4_neigh_lookup_noref(dev, nexthop); neigh = __ipv4_neigh_lookup_noref(dev, nexthop);
if (unlikely(!neigh)) if (unlikely(!neigh))
neigh = __neigh_create(&arp_tbl, &nexthop, dev, false); neigh = __neigh_create(&arp_tbl, &nexthop, dev, false);
if (neigh) { if (!IS_ERR(neigh)) {
int res = dst_neigh_output(dst, neigh, skb); int res = dst_neigh_output(dst, neigh, skb);
rcu_read_unlock_bh(); rcu_read_unlock_bh();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment