int err;
 
        if (*dst == NULL)
-               *dst = ip6_route_output(&init_net, sk, fl);
+               *dst = ip6_route_output(sk->sk_net, sk, fl);
 
        if ((err = (*dst)->error))
                goto out_err_release;
                                dst_release(*dst);
                                memcpy(&fl_gw, fl, sizeof(struct flowi));
                                memset(&fl_gw.fl6_dst, 0, sizeof(struct in6_addr));
-                               *dst = ip6_route_output(&init_net, sk, &fl_gw);
+                               *dst = ip6_route_output(sk->sk_net, sk, &fl_gw);
                                if ((err = (*dst)->error))
                                        goto out_err_release;
                        }
 
        fl.fl_ip_sport = t1->source;
        security_skb_classify_flow(skb, &fl);
 
-       /* sk = NULL, but it is safe for now. RST socket required. */
-       if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
+       /* Pass a socket to ip6_dst_lookup either it is for RST
+        * Underlying function will use this to retrieve the network
+        * namespace
+        */
+       if (!ip6_dst_lookup(tcp6_socket->sk, &buff->dst, &fl)) {
 
                if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
                        ip6_xmit(tcp6_socket->sk, buff, &fl, NULL, 0);
        fl.fl_ip_sport = t1->source;
        security_skb_classify_flow(skb, &fl);
 
-       if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
+       if (!ip6_dst_lookup(tcp6_socket->sk, &buff->dst, &fl)) {
                if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
                        ip6_xmit(tcp6_socket->sk, buff, &fl, NULL, 0);
                        TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);