]> err.no Git - linux-2.6/blobdiff - net/ipv4/af_inet.c
netns: Fix arbitrary net_device-s corruptions on net_ns stop.
[linux-2.6] / net / ipv4 / af_inet.c
index 7ab0bd64c9d17a73df6605d6289ba5e5dfe1321f..24eca23c2db3159c91898bd7fefe8bbb501f1233 100644 (file)
@@ -1077,7 +1077,7 @@ static int inet_sk_reselect_saddr(struct sock *sk)
 
        if (sysctl_ip_dynaddr > 1) {
                printk(KERN_INFO "%s(): shifting inet->"
-                                "saddr from %d.%d.%d.%d to %d.%d.%d.%d\n",
+                                "saddr from " NIPQUAD_FMT " to " NIPQUAD_FMT "\n",
                       __func__,
                       NIPQUAD(old_saddr),
                       NIPQUAD(new_saddr));
@@ -1234,7 +1234,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features)
                segs = ops->gso_segment(skb, features);
        rcu_read_unlock();
 
-       if (!segs || unlikely(IS_ERR(segs)))
+       if (!segs || IS_ERR(segs))
                goto out;
 
        skb = segs;
@@ -1250,19 +1250,23 @@ out:
        return segs;
 }
 
-int inet_ctl_sock_create(struct socket **sock, unsigned short family,
-                        unsigned short type, unsigned char protocol)
+int inet_ctl_sock_create(struct sock **sk, unsigned short family,
+                        unsigned short type, unsigned char protocol,
+                        struct net *net)
 {
-       int rc = sock_create_kern(family, type, protocol, sock);
+       struct socket *sock;
+       int rc = sock_create_kern(family, type, protocol, &sock);
 
        if (rc == 0) {
-               (*sock)->sk->sk_allocation = GFP_ATOMIC;
-               inet_sk((*sock)->sk)->uc_ttl = -1;
+               *sk = sock->sk;
+               (*sk)->sk_allocation = GFP_ATOMIC;
                /*
                 * Unhash it so that IP input processing does not even see it,
                 * we do not wish this socket to see incoming packets.
                 */
-               (*sock)->sk->sk_prot->unhash((*sock)->sk);
+               (*sk)->sk_prot->unhash(*sk);
+
+               sk_change_net(*sk, net);
        }
        return rc;
 }