diff --git a/[refs] b/[refs] index 35c3c4a6ab5c..1f47f5d46e0f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e23ebf0fa9e1548c94d8277e393be97ba48faa06 +refs/heads/master: 2dad81adf2c49aa9f8bb7e7c48dff9261bd58396 diff --git a/trunk/net/ipv6/netfilter.c b/trunk/net/ipv6/netfilter.c index 30fcee465448..8992cf6651d4 100644 --- a/trunk/net/ipv6/netfilter.c +++ b/trunk/net/ipv6/netfilter.c @@ -100,9 +100,16 @@ static int nf_ip6_route(struct net *net, struct dst_entry **dst, .pinet6 = (struct ipv6_pinfo *) &fake_pinfo, }; const void *sk = strict ? &fake_sk : NULL; - - *dst = ip6_route_output(net, sk, &fl->u.ip6); - return (*dst)->error; + struct dst_entry *result; + int err; + + result = ip6_route_output(net, sk, &fl->u.ip6); + err = result->error; + if (err) + dst_release(result); + else + *dst = result; + return err; } __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,