|
@@ -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,
|