diff options
Diffstat (limited to 'net/ipv6')
| -rw-r--r-- | net/ipv6/ip6mr.c | 4 | ||||
| -rw-r--r-- | net/ipv6/ndisc.c | 5 | 
2 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index c7e95c8c579..5aa3981a392 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -1926,8 +1926,10 @@ static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,  	};  	dst = ip6_route_output(net, NULL, &fl6); -	if (!dst) +	if (dst->error) { +		dst_release(dst);  		goto out_free; +	}  	skb_dst_drop(skb);  	skb_dst_set(skb, dst); diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index d8f02ef88e5..c964958ac47 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1545,9 +1545,10 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,  			 &saddr_buf, &ipv6_hdr(skb)->saddr, dev->ifindex);  	dst = ip6_route_output(net, NULL, &fl6); -	if (dst == NULL) +	if (dst->error) { +		dst_release(dst);  		return; - +	}  	dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), NULL, 0);  	if (IS_ERR(dst))  		return;  |