ipv6: Don't pass invalid dst_entry pointer to dst_release().
authorBoris Ostrovsky <boris.ostrovsky@amd.com>
Mon, 4 Apr 2011 20:07:26 +0000 (13:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Apr 2011 20:07:26 +0000 (13:07 -0700)
Make sure dst_release() is not called with error pointer. This is
similar to commit 4910ac6c526d2868adcb5893e0c428473de862b5 ("ipv4:
Don't ip_rt_put() an error pointer in RAW sockets.").

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/tcp_ipv6.c

index 2b0c186..56fa125 100644 (file)
@@ -503,6 +503,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
        dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false);
        if (IS_ERR(dst)) {
                err = PTR_ERR(dst);
        dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false);
        if (IS_ERR(dst)) {
                err = PTR_ERR(dst);
+               dst = NULL;
                goto done;
        }
        skb = tcp_make_synack(sk, dst, req, rvp);
                goto done;
        }
        skb = tcp_make_synack(sk, dst, req, rvp);