diff options
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 2342545a5ee9..9360d3be94f0 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -529,8 +529,8 @@ void ndisc_send_skb(struct sk_buff *skb, | |||
529 | return; | 529 | return; |
530 | } | 530 | } |
531 | 531 | ||
532 | err = xfrm_lookup(net, &dst, &fl, NULL, 0); | 532 | dst = xfrm_lookup(net, dst, &fl, NULL, 0); |
533 | if (err < 0) { | 533 | if (IS_ERR(dst)) { |
534 | kfree_skb(skb); | 534 | kfree_skb(skb); |
535 | return; | 535 | return; |
536 | } | 536 | } |
@@ -1542,8 +1542,8 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1542 | if (dst == NULL) | 1542 | if (dst == NULL) |
1543 | return; | 1543 | return; |
1544 | 1544 | ||
1545 | err = xfrm_lookup(net, &dst, &fl, NULL, 0); | 1545 | dst = xfrm_lookup(net, dst, &fl, NULL, 0); |
1546 | if (err) | 1546 | if (IS_ERR(dst)) |
1547 | return; | 1547 | return; |
1548 | 1548 | ||
1549 | rt = (struct rt6_info *) dst; | 1549 | rt = (struct rt6_info *) dst; |
@@ -1553,7 +1553,9 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1553 | "ICMPv6 Redirect: destination is not a neighbour.\n"); | 1553 | "ICMPv6 Redirect: destination is not a neighbour.\n"); |
1554 | goto release; | 1554 | goto release; |
1555 | } | 1555 | } |
1556 | if (!xrlim_allow(dst, 1*HZ)) | 1556 | if (!rt->rt6i_peer) |
1557 | rt6_bind_peer(rt, 1); | ||
1558 | if (inet_peer_xrlim_allow(rt->rt6i_peer, 1*HZ)) | ||
1557 | goto release; | 1559 | goto release; |
1558 | 1560 | ||
1559 | if (dev->addr_len) { | 1561 | if (dev->addr_len) { |