net: Pass kern from net_proto_family.create to sk_alloc
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 9 May 2015 02:09:13 +0000 (21:09 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 11 May 2015 14:50:17 +0000 (10:50 -0400)
In preparation for changing how struct net is refcounted
on kernel sockets pass the knowledge that we are creating
a kernel socket from sock_create_kern through to sk_alloc.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
59 files changed:
crypto/af_alg.c
drivers/isdn/mISDN/socket.c
drivers/net/macvtap.c
drivers/net/ppp/pppoe.c
drivers/net/ppp/pppox.c
drivers/net/ppp/pptp.c
drivers/net/tun.c
include/linux/if_pppox.h
include/net/af_vsock.h
include/net/llc_conn.h
include/net/sock.h
net/appletalk/ddp.c
net/atm/common.c
net/atm/common.h
net/atm/pvc.c
net/atm/svc.c
net/ax25/af_ax25.c
net/bluetooth/bnep/sock.c
net/bluetooth/cmtp/sock.c
net/bluetooth/hci_sock.c
net/bluetooth/hidp/sock.c
net/bluetooth/l2cap_sock.c
net/bluetooth/rfcomm/sock.c
net/bluetooth/sco.c
net/caif/caif_socket.c
net/can/af_can.c
net/core/sock.c
net/decnet/af_decnet.c
net/ieee802154/socket.c
net/ipv4/af_inet.c
net/ipv6/af_inet6.c
net/ipx/af_ipx.c
net/irda/af_irda.c
net/iucv/af_iucv.c
net/key/af_key.c
net/l2tp/l2tp_ppp.c
net/llc/af_llc.c
net/llc/llc_conn.c
net/netlink/af_netlink.c
net/netrom/af_netrom.c
net/nfc/af_nfc.c
net/nfc/llcp.h
net/nfc/llcp_core.c
net/nfc/llcp_sock.c
net/nfc/nfc.h
net/nfc/rawsock.c
net/packet/af_packet.c
net/phonet/af_phonet.c
net/phonet/pep.c
net/rds/af_rds.c
net/rose/af_rose.c
net/rxrpc/af_rxrpc.c
net/sctp/ipv6.c
net/sctp/protocol.c
net/tipc/socket.c
net/unix/af_unix.c
net/vmw_vsock/af_vsock.c
net/vmw_vsock/vmci_transport.c
net/x25/af_x25.c

index f22cc56fd1b383f7ef37472808070e8e31120a11..5ad0d53545356147c2bf153e77eb15b199094596 100644 (file)
@@ -244,7 +244,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
        if (!type)
                goto unlock;
 
-       sk2 = sk_alloc(sock_net(sk), PF_ALG, GFP_KERNEL, &alg_proto);
+       sk2 = sk_alloc(sock_net(sk), PF_ALG, GFP_KERNEL, &alg_proto, 0);
        err = -ENOMEM;
        if (!sk2)
                goto unlock;
@@ -324,7 +324,7 @@ static int alg_create(struct net *net, struct socket *sock, int protocol,
                return -EPROTONOSUPPORT;
 
        err = -ENOMEM;
-       sk = sk_alloc(net, PF_ALG, GFP_KERNEL, &alg_proto);
+       sk = sk_alloc(net, PF_ALG, GFP_KERNEL, &alg_proto, kern);
        if (!sk)
                goto out;
 
index 8dc7290089bbc29ab8f2ec752c02dc3dfb73e806..0d29b5a6356d729a6ceb987bccc8c2dbe6779823 100644 (file)
@@ -601,14 +601,14 @@ static const struct proto_ops data_sock_ops = {
 };
 
 static int
-data_sock_create(struct net *net, struct socket *sock, int protocol)
+data_sock_create(struct net *net, struct socket *sock, int protocol, int kern)
 {
        struct sock *sk;
 
        if (sock->type != SOCK_DGRAM)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_ISDN, GFP_KERNEL, &mISDN_proto);
+       sk = sk_alloc(net, PF_ISDN, GFP_KERNEL, &mISDN_proto, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -756,14 +756,14 @@ static const struct proto_ops base_sock_ops = {
 
 
 static int
-base_sock_create(struct net *net, struct socket *sock, int protocol)
+base_sock_create(struct net *net, struct socket *sock, int protocol, int kern)
 {
        struct sock *sk;
 
        if (sock->type != SOCK_RAW)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_ISDN, GFP_KERNEL, &mISDN_proto);
+       sk = sk_alloc(net, PF_ISDN, GFP_KERNEL, &mISDN_proto, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -785,7 +785,7 @@ mISDN_sock_create(struct net *net, struct socket *sock, int proto, int kern)
 
        switch (proto) {
        case ISDN_P_BASE:
-               err = base_sock_create(net, sock, proto);
+               err = base_sock_create(net, sock, proto, kern);
                break;
        case ISDN_P_TE_S0:
        case ISDN_P_NT_S0:
@@ -799,7 +799,7 @@ mISDN_sock_create(struct net *net, struct socket *sock, int proto, int kern)
        case ISDN_P_B_L2DTMF:
        case ISDN_P_B_L2DSP:
        case ISDN_P_B_L2DSPHDLC:
-               err = data_sock_create(net, sock, proto);
+               err = data_sock_create(net, sock, proto, kern);
                break;
        default:
                return err;
index 8c350c5d54adab2556a9a1d7f2a56965b79f16b9..0398631a3c2474cf7eb94a9f5a99d53e970ca182 100644 (file)
@@ -476,7 +476,7 @@ static int macvtap_open(struct inode *inode, struct file *file)
 
        err = -ENOMEM;
        q = (struct macvtap_queue *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL,
-                                            &macvtap_proto);
+                                            &macvtap_proto, 0);
        if (!q)
                goto out;
 
index aa1dd926623ad622e3a15f905733e3d585aca871..f86c5ab334aa887f37a43644e7ec772e8341eb39 100644 (file)
@@ -546,11 +546,11 @@ static struct proto pppoe_sk_proto __read_mostly = {
  * Initialize a new struct sock.
  *
  **********************************************************************/
-static int pppoe_create(struct net *net, struct socket *sock)
+static int pppoe_create(struct net *net, struct socket *sock, int kern)
 {
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppoe_sk_proto);
+       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppoe_sk_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index 2940e9fe351b994029d8f26db30c86114a79e417..0e1b30622477b17b6fd038709eb11c763039fb87 100644 (file)
@@ -118,7 +118,7 @@ static int pppox_create(struct net *net, struct socket *sock, int protocol,
            !try_module_get(pppox_protos[protocol]->owner))
                goto out;
 
-       rc = pppox_protos[protocol]->create(net, sock);
+       rc = pppox_protos[protocol]->create(net, sock, kern);
 
        module_put(pppox_protos[protocol]->owner);
 out:
index e3bfbd4d01367fc32b063d3305b635006d3f9b03..14839bc0aaf5216ee1722b8c4b83ad83c5225858 100644 (file)
@@ -561,14 +561,14 @@ static void pptp_sock_destruct(struct sock *sk)
        skb_queue_purge(&sk->sk_receive_queue);
 }
 
-static int pptp_create(struct net *net, struct socket *sock)
+static int pptp_create(struct net *net, struct socket *sock, int kern)
 {
        int error = -ENOMEM;
        struct sock *sk;
        struct pppox_sock *po;
        struct pptp_opt *opt;
 
-       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pptp_sk_proto);
+       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pptp_sk_proto, kern);
        if (!sk)
                goto out;
 
index 3262f3e2b8b2c2a4acc1b107d1af007048f3c51f..1a1c4f7b3ec53d884c0ea3aed996d08d203ce6aa 100644 (file)
@@ -2148,7 +2148,7 @@ static int tun_chr_open(struct inode *inode, struct file * file)
        DBG1(KERN_INFO, "tunX: tun_chr_open\n");
 
        tfile = (struct tun_file *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL,
-                                           &tun_proto);
+                                           &tun_proto, 0);
        if (!tfile)
                return -ENOMEM;
        RCU_INIT_POINTER(tfile->tun, NULL);
index 66a7d7600f4343a809252ba809d92bca5bc7e8f9..b49cf923becc2405b3d99ef6f88e5a524423e7a3 100644 (file)
@@ -74,7 +74,7 @@ static inline struct sock *sk_pppox(struct pppox_sock *po)
 struct module;
 
 struct pppox_proto {
-       int             (*create)(struct net *net, struct socket *sock);
+       int             (*create)(struct net *net, struct socket *sock, int kern);
        int             (*ioctl)(struct socket *sock, unsigned int cmd,
                                 unsigned long arg);
        struct module   *owner;
index 172632dd9930d1d98a68e47076c97fba3bd2c7ae..db639a4c5ab84cab3339193010641f0b0187db48 100644 (file)
@@ -74,7 +74,7 @@ void vsock_pending_work(struct work_struct *work);
 struct sock *__vsock_create(struct net *net,
                            struct socket *sock,
                            struct sock *parent,
-                           gfp_t priority, unsigned short type);
+                           gfp_t priority, unsigned short type, int kern);
 
 /**** TRANSPORT ****/
 
index 0134681acc4cfe354c6546be1a1ffefa5c078cde..fe994d2e52869d06be7d26b48b942e666e60f2da 100644 (file)
@@ -96,7 +96,7 @@ static __inline__ char llc_backlog_type(struct sk_buff *skb)
 }
 
 struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority,
-                         struct proto *prot);
+                         struct proto *prot, int kern);
 void llc_sk_free(struct sock *sk);
 
 void llc_sk_reset(struct sock *sk);
index 3a4898ec8c67c5242e9467a0d32f2e68f3a55302..d8dcf91732b026b2be612194314fcb26751c874d 100644 (file)
@@ -1514,7 +1514,7 @@ static inline void unlock_sock_fast(struct sock *sk, bool slow)
 
 
 struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
-                     struct proto *prot);
+                     struct proto *prot, int kern);
 void sk_free(struct sock *sk);
 void sk_release_kernel(struct sock *sk);
 struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority);
index 3b7ad43c7dad948d192ace962f3a4d4422c47319..d5871ac493eb10c984b9e74f2beee3049bc79645 100644 (file)
@@ -1030,7 +1030,7 @@ static int atalk_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
                goto out;
        rc = -ENOMEM;
-       sk = sk_alloc(net, PF_APPLETALK, GFP_KERNEL, &ddp_proto);
+       sk = sk_alloc(net, PF_APPLETALK, GFP_KERNEL, &ddp_proto, kern);
        if (!sk)
                goto out;
        rc = 0;
index ed0466637e13326be6796e81cdd182d4096a1509..49a872db7e42581853cc2e8c1a6585285a3172d4 100644 (file)
@@ -141,7 +141,7 @@ static struct proto vcc_proto = {
        .release_cb = vcc_release_cb,
 };
 
-int vcc_create(struct net *net, struct socket *sock, int protocol, int family)
+int vcc_create(struct net *net, struct socket *sock, int protocol, int family, int kern)
 {
        struct sock *sk;
        struct atm_vcc *vcc;
@@ -149,7 +149,7 @@ int vcc_create(struct net *net, struct socket *sock, int protocol, int family)
        sock->sk = NULL;
        if (sock->type == SOCK_STREAM)
                return -EINVAL;
-       sk = sk_alloc(net, family, GFP_KERNEL, &vcc_proto);
+       sk = sk_alloc(net, family, GFP_KERNEL, &vcc_proto, kern);
        if (!sk)
                return -ENOMEM;
        sock_init_data(sock, sk);
index 4d6f5b2068ac704a7bbbc720b0d99174a7d523b6..959436b871822d0aad8769de9ee0f81e78cc1bfe 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/poll.h> /* for poll_table */
 
 
-int vcc_create(struct net *net, struct socket *sock, int protocol, int family);
+int vcc_create(struct net *net, struct socket *sock, int protocol, int family, int kern);
 int vcc_release(struct socket *sock);
 int vcc_connect(struct socket *sock, int itf, short vpi, int vci);
 int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
index ae0324021407c2b61aaf7c45a39bebb9d419972c..040207ec399fb45f5ac317c89f116d3020c8705d 100644 (file)
@@ -136,7 +136,7 @@ static int pvc_create(struct net *net, struct socket *sock, int protocol,
                return -EAFNOSUPPORT;
 
        sock->ops = &pvc_proto_ops;
-       return vcc_create(net, sock, protocol, PF_ATMPVC);
+       return vcc_create(net, sock, protocol, PF_ATMPVC, kern);
 }
 
 static const struct net_proto_family pvc_family_ops = {
index 1ba23f5018e76199a7fb19be5079b512822f3dab..3fa0a9ee98d19ba5635554362ce23c3f80f0de69 100644 (file)
@@ -660,7 +660,7 @@ static int svc_create(struct net *net, struct socket *sock, int protocol,
                return -EAFNOSUPPORT;
 
        sock->ops = &svc_proto_ops;
-       error = vcc_create(net, sock, protocol, AF_ATMSVC);
+       error = vcc_create(net, sock, protocol, AF_ATMSVC, kern);
        if (error)
                return error;
        ATM_SD(sock)->local.sas_family = AF_ATMSVC;
index 330c1f4a5a0b6edfca55bece27b38d1e30482d55..4273533d22b1d56f0c3a34d61336f144a227932c 100644 (file)
@@ -855,7 +855,7 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
                return -ESOCKTNOSUPPORT;
        }
 
-       sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto);
+       sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
        if (sk == NULL)
                return -ENOMEM;
 
@@ -881,7 +881,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
        struct sock *sk;
        ax25_cb *ax25, *oax25;
 
-       sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC,       osk->sk_prot);
+       sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
        if (sk == NULL)
                return NULL;
 
index bde2bdd9e929e854c9e2d001a7bf9e6a364d6a2c..b5116fa9835e1d0875ace8529f1ff00d1a347a96 100644 (file)
@@ -202,7 +202,7 @@ static int bnep_sock_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_RAW)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &bnep_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &bnep_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index d82787d417bdc242483de3ab4bac4bc7a91eca62..ce86a7bae844c3b98bbfeff25a8c3fabb43d0737 100644 (file)
@@ -205,7 +205,7 @@ static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_RAW)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &cmtp_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &cmtp_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index 56f9edbf3d05dc6a2c6ba4f42174b2314d5e920d..5b14dcafcd084103eee55be0929b180b99e7bb94 100644 (file)
@@ -1377,7 +1377,7 @@ static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
 
        sock->ops = &hci_sock_ops;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index cb3fdde1968a0fabafe038382dbdf9dacd3e331f..008ba439bd62ae2e55a7ff92900ebb88339d67d1 100644 (file)
@@ -235,7 +235,7 @@ static int hidp_sock_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_RAW)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hidp_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hidp_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index a7278f05eafbbda65da7c991820474a95e4e1a3c..244287706f910bdaf69afaef98cf2706cd301654 100644 (file)
@@ -43,7 +43,7 @@ static struct bt_sock_list l2cap_sk_list = {
 static const struct proto_ops l2cap_sock_ops;
 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
-                                    int proto, gfp_t prio);
+                                    int proto, gfp_t prio, int kern);
 
 bool l2cap_is_socket(struct socket *sock)
 {
@@ -1193,7 +1193,7 @@ static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
        }
 
        sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
-                             GFP_ATOMIC);
+                             GFP_ATOMIC, 0);
        if (!sk) {
                release_sock(parent);
                return NULL;
@@ -1523,12 +1523,12 @@ static struct proto l2cap_proto = {
 };
 
 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
-                                    int proto, gfp_t prio)
+                                    int proto, gfp_t prio, int kern)
 {
        struct sock *sk;
        struct l2cap_chan *chan;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern);
        if (!sk)
                return NULL;
 
@@ -1574,7 +1574,7 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
 
        sock->ops = &l2cap_sock_ops;
 
-       sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
+       sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
        if (!sk)
                return -ENOMEM;
 
index 825e8fb5114b16a5276bf7c6ee251883c6f0bfd2..b2338e971b335c3d100337709a42a729a5df188a 100644 (file)
@@ -269,12 +269,12 @@ static struct proto rfcomm_proto = {
        .obj_size       = sizeof(struct rfcomm_pinfo)
 };
 
-static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
+static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
 {
        struct rfcomm_dlc *d;
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto, kern);
        if (!sk)
                return NULL;
 
@@ -324,7 +324,7 @@ static int rfcomm_sock_create(struct net *net, struct socket *sock,
 
        sock->ops = &rfcomm_sock_ops;
 
-       sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC);
+       sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -969,7 +969,7 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *
                goto done;
        }
 
-       sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
+       sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC, 0);
        if (!sk)
                goto done;
 
index 4322c833e74891d20a627f21e64cdedd67cd806f..6b6e59dc54cf6000af76da743412c6d66c497138 100644 (file)
@@ -460,11 +460,11 @@ static struct proto sco_proto = {
        .obj_size       = sizeof(struct sco_pinfo)
 };
 
-static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
+static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
 {
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
+       sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
        if (!sk)
                return NULL;
 
@@ -501,7 +501,7 @@ static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
 
        sock->ops = &sco_sock_ops;
 
-       sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
+       sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -1026,7 +1026,7 @@ static void sco_conn_ready(struct sco_conn *conn)
                bh_lock_sock(parent);
 
                sk = sco_sock_alloc(sock_net(parent), NULL,
-                                   BTPROTO_SCO, GFP_ATOMIC);
+                                   BTPROTO_SCO, GFP_ATOMIC, 0);
                if (!sk) {
                        bh_unlock_sock(parent);
                        sco_conn_unlock(conn);
index 4ec0c803aef112196657503cd615fe7a83e800bb..78a04ebb113c356d634ebb921fc0e72cf5e3d082 100644 (file)
@@ -1047,7 +1047,7 @@ static int caif_create(struct net *net, struct socket *sock, int protocol,
         * is really not used at all in the net/core or socket.c but the
         * initialization makes sure that sock->state is not uninitialized.
         */
-       sk = sk_alloc(net, PF_CAIF, GFP_KERNEL, &prot);
+       sk = sk_alloc(net, PF_CAIF, GFP_KERNEL, &prot, kern);
        if (!sk)
                return -ENOMEM;
 
index 32d710eaf1fc991b2ef4638fe8ccc95b84352ace..d4d404bdfc9a5d142ab18fa685aa62829d5e56c5 100644 (file)
@@ -179,7 +179,7 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
 
        sock->ops = cp->ops;
 
-       sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot);
+       sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot, kern);
        if (!sk) {
                err = -ENOMEM;
                goto errout;
index e891bcf325ca759c9b7498f29ec76aa946198d5e..cbc3789b830c74d3d683a1615f83721a5d256075 100644 (file)
@@ -1396,9 +1396,10 @@ EXPORT_SYMBOL_GPL(sock_update_netprioidx);
  *     @family: protocol family
  *     @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
  *     @prot: struct proto associated with this new sock instance
+ *     @kern: is this to be a kernel socket?
  */
 struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
-                     struct proto *prot)
+                     struct proto *prot, int kern)
 {
        struct sock *sk;
 
index 754484b3cd0e8cc2f92f2800f89dd71762b733d8..675cf94e04f862b77644f86628af6e8a46933055 100644 (file)
@@ -468,10 +468,10 @@ static struct proto dn_proto = {
        .obj_size               = sizeof(struct dn_sock),
 };
 
-static struct sock *dn_alloc_sock(struct net *net, struct socket *sock, gfp_t gfp)
+static struct sock *dn_alloc_sock(struct net *net, struct socket *sock, gfp_t gfp, int kern)
 {
        struct dn_scp *scp;
-       struct sock *sk = sk_alloc(net, PF_DECnet, gfp, &dn_proto);
+       struct sock *sk = sk_alloc(net, PF_DECnet, gfp, &dn_proto, kern);
 
        if  (!sk)
                goto out;
@@ -693,7 +693,7 @@ static int dn_create(struct net *net, struct socket *sock, int protocol,
        }
 
 
-       if ((sk = dn_alloc_sock(net, sock, GFP_KERNEL)) == NULL)
+       if ((sk = dn_alloc_sock(net, sock, GFP_KERNEL, kern)) == NULL)
                return -ENOBUFS;
 
        sk->sk_protocol = protocol;
@@ -1096,7 +1096,7 @@ static int dn_accept(struct socket *sock, struct socket *newsock, int flags)
 
        cb = DN_SKB_CB(skb);
        sk->sk_ack_backlog--;
-       newsk = dn_alloc_sock(sock_net(sk), newsock, sk->sk_allocation);
+       newsk = dn_alloc_sock(sock_net(sk), newsock, sk->sk_allocation, 0);
        if (newsk == NULL) {
                release_sock(sk);
                kfree_skb(skb);
index b60c65f70346a48623209dc93fb06273d445fb7b..7aaaf967df58d2339a03898065094ef1a30c51d2 100644 (file)
@@ -1014,7 +1014,7 @@ static int ieee802154_create(struct net *net, struct socket *sock,
        }
 
        rc = -ENOMEM;
-       sk = sk_alloc(net, PF_IEEE802154, GFP_KERNEL, proto);
+       sk = sk_alloc(net, PF_IEEE802154, GFP_KERNEL, proto, kern);
        if (!sk)
                goto out;
        rc = 0;
index 09f4d024dfe507b72fc1efd620bf60e676de93fd..e2dd9cb99d61b128d8491bc4c7cd878b9f11a5f9 100644 (file)
@@ -317,7 +317,7 @@ lookup_protocol:
        WARN_ON(!answer_prot->slab);
 
        err = -ENOBUFS;
-       sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot);
+       sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot, kern);
        if (!sk)
                goto out;
 
index 4632afa57e05c7f1d01b2f0c2991ae8b25548c86..f3866c0b6cfe6d89afe86fcff133dc913a87a42d 100644 (file)
@@ -167,7 +167,7 @@ lookup_protocol:
        WARN_ON(!answer_prot->slab);
 
        err = -ENOBUFS;
-       sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot);
+       sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot, kern);
        if (!sk)
                goto out;
 
index 4ea5d7497b5f29ac41a00783c48d1898aa769937..48d0dc89b58de8aae5f128145634070a77d7c281 100644 (file)
@@ -1347,7 +1347,7 @@ static int ipx_create(struct net *net, struct socket *sock, int protocol,
                goto out;
 
        rc = -ENOMEM;
-       sk = sk_alloc(net, PF_IPX, GFP_KERNEL, &ipx_proto);
+       sk = sk_alloc(net, PF_IPX, GFP_KERNEL, &ipx_proto, kern);
        if (!sk)
                goto out;
 
index ee0ea25c8e7aa9ddd182c0bb284c75a5c0a198bf..fae6822cc367631ca403cc6207f800cf2571dfea 100644 (file)
@@ -1100,7 +1100,7 @@ static int irda_create(struct net *net, struct socket *sock, int protocol,
        }
 
        /* Allocate networking socket */
-       sk = sk_alloc(net, PF_IRDA, GFP_KERNEL, &irda_proto);
+       sk = sk_alloc(net, PF_IRDA, GFP_KERNEL, &irda_proto, kern);
        if (sk == NULL)
                return -ENOMEM;
 
index 6daa52a18d40ca2a40f702acefccd01e6b145f36..918151c113480d6651c3f2c406fea7546ebddd22 100644 (file)
@@ -535,12 +535,12 @@ static void iucv_sock_init(struct sock *sk, struct sock *parent)
                sk->sk_type = parent->sk_type;
 }
 
-static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio)
+static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio, int kern)
 {
        struct sock *sk;
        struct iucv_sock *iucv;
 
-       sk = sk_alloc(&init_net, PF_IUCV, prio, &iucv_proto);
+       sk = sk_alloc(&init_net, PF_IUCV, prio, &iucv_proto, kern);
        if (!sk)
                return NULL;
        iucv = iucv_sk(sk);
@@ -602,7 +602,7 @@ static int iucv_sock_create(struct net *net, struct socket *sock, int protocol,
                return -ESOCKTNOSUPPORT;
        }
 
-       sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL);
+       sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -1723,7 +1723,7 @@ static int iucv_callback_connreq(struct iucv_path *path,
        }
 
        /* Create the new socket */
-       nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC);
+       nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
        if (!nsk) {
                err = pr_iucv->path_sever(path, user_data);
                iucv_path_free(path);
@@ -1933,7 +1933,7 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
                goto out;
        }
 
-       nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC);
+       nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
        bh_lock_sock(sk);
        if ((sk->sk_state != IUCV_LISTEN) ||
            sk_acceptq_is_full(sk) ||
index f0d52d721b3a4405b47f38d8f5d6c1990cbf8b5f..9e834ec475a9c202d4427d7a2b7f21511a1d6eea 100644 (file)
@@ -149,7 +149,7 @@ static int pfkey_create(struct net *net, struct socket *sock, int protocol,
                return -EPROTONOSUPPORT;
 
        err = -ENOMEM;
-       sk = sk_alloc(net, PF_KEY, GFP_KERNEL, &key_proto);
+       sk = sk_alloc(net, PF_KEY, GFP_KERNEL, &key_proto, kern);
        if (sk == NULL)
                goto out;
 
index e9b0dec56b8e80e13ea780d11bb56e921814c317..f56c9f69e9f288b2d1f9da53257a5f64bf5dd067 100644 (file)
@@ -542,12 +542,12 @@ static int pppol2tp_backlog_recv(struct sock *sk, struct sk_buff *skb)
 
 /* socket() handler. Initialize a new struct sock.
  */
-static int pppol2tp_create(struct net *net, struct socket *sock)
+static int pppol2tp_create(struct net *net, struct socket *sock, int kern)
 {
        int error = -ENOMEM;
        struct sock *sk;
 
-       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppol2tp_sk_proto);
+       sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppol2tp_sk_proto, kern);
        if (!sk)
                goto out;
 
index 17a8dff0609066e338b528328c4ed01259314d43..8fd9febaa5bad8150bdf632b97221a140e0e3cbd 100644 (file)
@@ -168,7 +168,7 @@ static int llc_ui_create(struct net *net, struct socket *sock, int protocol,
 
        if (likely(sock->type == SOCK_DGRAM || sock->type == SOCK_STREAM)) {
                rc = -ENOMEM;
-               sk = llc_sk_alloc(net, PF_LLC, GFP_KERNEL, &llc_proto);
+               sk = llc_sk_alloc(net, PF_LLC, GFP_KERNEL, &llc_proto, kern);
                if (sk) {
                        rc = 0;
                        llc_ui_sk_init(sock, sk);
index 81a61fce3afbfee10bd4e20ffecb4f861364c121..3e821daf9dd4a2fbf00550591e92b153efd4a73a 100644 (file)
@@ -768,7 +768,7 @@ static struct sock *llc_create_incoming_sock(struct sock *sk,
                                             struct llc_addr *daddr)
 {
        struct sock *newsk = llc_sk_alloc(sock_net(sk), sk->sk_family, GFP_ATOMIC,
-                                         sk->sk_prot);
+                                         sk->sk_prot, 0);
        struct llc_sock *newllc, *llc = llc_sk(sk);
 
        if (!newsk)
@@ -931,9 +931,9 @@ static void llc_sk_init(struct sock *sk)
  *     Allocates a LLC sock and initializes it. Returns the new LLC sock
  *     or %NULL if there's no memory available for one
  */
-struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority, struct proto *prot)
+struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority, struct proto *prot, int kern)
 {
-       struct sock *sk = sk_alloc(net, family, priority, prot);
+       struct sock *sk = sk_alloc(net, family, priority, prot, kern);
 
        if (!sk)
                goto out;
index a5fff75accf8babec5f526f93111c223eb4a7d19..be6665ab7f409f0b8e5856c3abf893a9232492a8 100644 (file)
@@ -1119,14 +1119,15 @@ static struct proto netlink_proto = {
 };
 
 static int __netlink_create(struct net *net, struct socket *sock,
-                           struct mutex *cb_mutex, int protocol)
+                           struct mutex *cb_mutex, int protocol,
+                           int kern)
 {
        struct sock *sk;
        struct netlink_sock *nlk;
 
        sock->ops = &netlink_ops;
 
-       sk = sk_alloc(net, PF_NETLINK, GFP_KERNEL, &netlink_proto);
+       sk = sk_alloc(net, PF_NETLINK, GFP_KERNEL, &netlink_proto, kern);
        if (!sk)
                return -ENOMEM;
 
@@ -1188,7 +1189,7 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol,
        if (err < 0)
                goto out;
 
-       err = __netlink_create(net, sock, cb_mutex, protocol);
+       err = __netlink_create(net, sock, cb_mutex, protocol, kern);
        if (err < 0)
                goto out_module;
 
@@ -2515,14 +2516,12 @@ __netlink_kernel_create(struct net *net, int unit, struct module *module,
 
        if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
                return NULL;
-
        /*
         * We have to just have a reference on the net from sk, but don't
         * get_net it. Besides, we cannot get and then put the net here.
         * So we create one inside init_net and the move it to net.
         */
-
-       if (__netlink_create(&init_net, sock, cb_mutex, unit) < 0)
+       if (__netlink_create(&init_net, sock, cb_mutex, unit, 0) < 0)
                goto out_sock_release_nosk;
 
        sk = sock->sk;
index b987fd56c3c52935d85a0f8f710814a7f9f5798d..ed212ffc1d9d3159ccbf4b8ac5681606b8446069 100644 (file)
@@ -433,7 +433,7 @@ static int nr_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_SEQPACKET || protocol != 0)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_NETROM, GFP_ATOMIC, &nr_proto);
+       sk = sk_alloc(net, PF_NETROM, GFP_ATOMIC, &nr_proto, kern);
        if (sk  == NULL)
                return -ENOMEM;
 
@@ -476,7 +476,7 @@ static struct sock *nr_make_new(struct sock *osk)
        if (osk->sk_type != SOCK_SEQPACKET)
                return NULL;
 
-       sk = sk_alloc(sock_net(osk), PF_NETROM, GFP_ATOMIC, osk->sk_prot);
+       sk = sk_alloc(sock_net(osk), PF_NETROM, GFP_ATOMIC, osk->sk_prot, 0);
        if (sk == NULL)
                return NULL;
 
index 2277276f52bcd2f375f0319476b1cfecdf6b2d76..54e40fa47822673d760862a67fa1955ebbd0143b 100644 (file)
@@ -40,7 +40,7 @@ static int nfc_sock_create(struct net *net, struct socket *sock, int proto,
 
        read_lock(&proto_tab_lock);
        if (proto_tab[proto] && try_module_get(proto_tab[proto]->owner)) {
-               rc = proto_tab[proto]->create(net, sock, proto_tab[proto]);
+               rc = proto_tab[proto]->create(net, sock, proto_tab[proto], kern);
                module_put(proto_tab[proto]->owner);
        }
        read_unlock(&proto_tab_lock);
index de1789e3cc82fc137221535fa3bdf5fa77120c77..1f68724d44d3bad684382afc04b38a01bff9bd3b 100644 (file)
@@ -225,7 +225,7 @@ void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local,
                               struct sk_buff *skb, u8 direction);
 
 /* Sock API */
-struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp);
+struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp, int kern);
 void nfc_llcp_sock_free(struct nfc_llcp_sock *sock);
 void nfc_llcp_accept_unlink(struct sock *sk);
 void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk);
index b18f07ccb504c0f8c2aea36be80069a0376def76..98876274a1eea22b709403dde2c5702b1387a0be 100644 (file)
@@ -934,7 +934,7 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local,
                sock->ssap = ssap;
        }
 
-       new_sk = nfc_llcp_sock_alloc(NULL, parent->sk_type, GFP_ATOMIC);
+       new_sk = nfc_llcp_sock_alloc(NULL, parent->sk_type, GFP_ATOMIC, 0);
        if (new_sk == NULL) {
                reason = LLCP_DM_REJ;
                release_sock(&sock->sk);
index 9578bd6a4f3e2efd565c4626a718f8ecc6f967c4..b7de0da46acddc1eaaf041dedfbc9e2cf3697559 100644 (file)
@@ -942,12 +942,12 @@ static void llcp_sock_destruct(struct sock *sk)
        }
 }
 
-struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp)
+struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp, int kern)
 {
        struct sock *sk;
        struct nfc_llcp_sock *llcp_sock;
 
-       sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto);
+       sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern);
        if (!sk)
                return NULL;
 
@@ -993,7 +993,7 @@ void nfc_llcp_sock_free(struct nfc_llcp_sock *sock)
 }
 
 static int llcp_sock_create(struct net *net, struct socket *sock,
-                           const struct nfc_protocol *nfc_proto)
+                           const struct nfc_protocol *nfc_proto, int kern)
 {
        struct sock *sk;
 
@@ -1009,7 +1009,7 @@ static int llcp_sock_create(struct net *net, struct socket *sock,
        else
                sock->ops = &llcp_sock_ops;
 
-       sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC);
+       sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern);
        if (sk == NULL)
                return -ENOMEM;
 
index a8ce80b47720a6425c857a660895418b1c00d84f..5c93e8412a2639f3d1c77cf7ee5e15a95991a858 100644 (file)
@@ -30,7 +30,7 @@ struct nfc_protocol {
        struct proto *proto;
        struct module *owner;
        int (*create)(struct net *net, struct socket *sock,
-                     const struct nfc_protocol *nfc_proto);
+                     const struct nfc_protocol *nfc_proto, int kern);
 };
 
 struct nfc_rawsock {
index 82b4e8024778019b80f6b59ba9a4242d015d4b2f..e9a91488fe3d388d90f24b3a2e645bbf71cdb60a 100644 (file)
@@ -334,7 +334,7 @@ static void rawsock_destruct(struct sock *sk)
 }
 
 static int rawsock_create(struct net *net, struct socket *sock,
-                         const struct nfc_protocol *nfc_proto)
+                         const struct nfc_protocol *nfc_proto, int kern)
 {
        struct sock *sk;
 
@@ -348,7 +348,7 @@ static int rawsock_create(struct net *net, struct socket *sock,
        else
                sock->ops = &rawsock_ops;
 
-       sk = sk_alloc(net, PF_NFC, GFP_ATOMIC, nfc_proto->proto);
+       sk = sk_alloc(net, PF_NFC, GFP_ATOMIC, nfc_proto->proto, kern);
        if (!sk)
                return -ENOMEM;
 
index 5102c3cc4eec4ecec6698859935d7769d37a174c..94713276a1d9dadbbd7df7a3684b49bbbf3052f8 100644 (file)
@@ -2832,7 +2832,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
        sock->state = SS_UNCONNECTED;
 
        err = -ENOBUFS;
-       sk = sk_alloc(net, PF_PACKET, GFP_KERNEL, &packet_proto);
+       sk = sk_alloc(net, PF_PACKET, GFP_KERNEL, &packet_proto, kern);
        if (sk == NULL)
                goto out;
 
index 32ab87d3482864279ed768c30a965a31f9ffc561..10d42f3220ab469b3e23050c99af72cb39c81452 100644 (file)
@@ -97,7 +97,7 @@ static int pn_socket_create(struct net *net, struct socket *sock, int protocol,
                goto out;
        }
 
-       sk = sk_alloc(net, PF_PHONET, GFP_KERNEL, pnp->prot);
+       sk = sk_alloc(net, PF_PHONET, GFP_KERNEL, pnp->prot, kern);
        if (sk == NULL) {
                err = -ENOMEM;
                goto out;
index 6de2aeb98a1fc99fa7b75430f048060fac6c191b..850a86cde0b3f6eab5b7aa09f4e6ffa66ccd6ed6 100644 (file)
@@ -845,7 +845,7 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp)
        }
 
        /* Create a new to-be-accepted sock */
-       newsk = sk_alloc(sock_net(sk), PF_PHONET, GFP_KERNEL, sk->sk_prot);
+       newsk = sk_alloc(sock_net(sk), PF_PHONET, GFP_KERNEL, sk->sk_prot, 0);
        if (!newsk) {
                pep_reject_conn(sk, skb, PN_PIPE_ERR_OVERLOAD, GFP_KERNEL);
                err = -ENOBUFS;
index 10443377fb9d8f5b5cb928647fa58c03001a072b..3d83641f2861f7561fbf1a7bea0b5db9a7063d75 100644 (file)
@@ -440,7 +440,7 @@ static int rds_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_SEQPACKET || protocol)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, AF_RDS, GFP_ATOMIC, &rds_proto);
+       sk = sk_alloc(net, AF_RDS, GFP_ATOMIC, &rds_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index 8ae603069a1a1706982dc0b7affd5443cb912308..36dbc2da366180b871db29e2d1af324a15d8d6e0 100644 (file)
@@ -520,7 +520,7 @@ static int rose_create(struct net *net, struct socket *sock, int protocol,
        if (sock->type != SOCK_SEQPACKET || protocol != 0)
                return -ESOCKTNOSUPPORT;
 
-       sk = sk_alloc(net, PF_ROSE, GFP_ATOMIC, &rose_proto);
+       sk = sk_alloc(net, PF_ROSE, GFP_ATOMIC, &rose_proto, kern);
        if (sk == NULL)
                return -ENOMEM;
 
@@ -559,7 +559,7 @@ static struct sock *rose_make_new(struct sock *osk)
        if (osk->sk_type != SOCK_SEQPACKET)
                return NULL;
 
-       sk = sk_alloc(sock_net(osk), PF_ROSE, GFP_ATOMIC, &rose_proto);
+       sk = sk_alloc(sock_net(osk), PF_ROSE, GFP_ATOMIC, &rose_proto, 0);
        if (sk == NULL)
                return NULL;
 
index 0095b9a0b779ca9fcc212f2c495acce399ec1550..25d60ed15284a56b1a2f6b9bc8c680f0c9f567c0 100644 (file)
@@ -632,7 +632,7 @@ static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
        sock->ops = &rxrpc_rpc_ops;
        sock->state = SS_UNCONNECTED;
 
-       sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto);
+       sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto, kern);
        if (!sk)
                return -ENOMEM;
 
index 0e4198ee237086e01e546432b38ee49d046837a1..e703ff7fed40a88676d8c4a8919a766fa86365de 100644 (file)
@@ -635,7 +635,7 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
        struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
        struct sctp6_sock *newsctp6sk;
 
-       newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot);
+       newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot, 0);
        if (!newsk)
                goto out;
 
index 53b7acde9aa37bf3d4029c459421564d5270f4c0..59e80356672bdf89777265ae1f8c384792dfb98c 100644 (file)
@@ -550,7 +550,7 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk,
                                             struct sctp_association *asoc)
 {
        struct sock *newsk = sk_alloc(sock_net(sk), PF_INET, GFP_KERNEL,
-                       sk->sk_prot);
+                       sk->sk_prot, 0);
        struct inet_sock *newinet;
 
        if (!newsk)
index 9074b5cede38b8edd75890b684a706d96b9f71ba..8f3c8e2cef8e15d359a43445ae265741068b0f5c 100644 (file)
@@ -342,7 +342,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
        }
 
        /* Allocate socket's protocol area */
-       sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto);
+       sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto, kern);
        if (sk == NULL)
                return -ENOMEM;
 
index 5266ea7b922b76d1977dea57cc7c227594c49285..941b3d26e3bf75dc357480d2b37e97fb8d7d7937 100644 (file)
@@ -620,7 +620,7 @@ static struct proto unix_proto = {
  */
 static struct lock_class_key af_unix_sk_receive_queue_lock_key;
 
-static struct sock *unix_create1(struct net *net, struct socket *sock)
+static struct sock *unix_create1(struct net *net, struct socket *sock, int kern)
 {
        struct sock *sk = NULL;
        struct unix_sock *u;
@@ -629,7 +629,7 @@ static struct sock *unix_create1(struct net *net, struct socket *sock)
        if (atomic_long_read(&unix_nr_socks) > 2 * get_max_files())
                goto out;
 
-       sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto);
+       sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto, kern);
        if (!sk)
                goto out;
 
@@ -688,7 +688,7 @@ static int unix_create(struct net *net, struct socket *sock, int protocol,
                return -ESOCKTNOSUPPORT;
        }
 
-       return unix_create1(net, sock) ? 0 : -ENOMEM;
+       return unix_create1(net, sock, kern) ? 0 : -ENOMEM;
 }
 
 static int unix_release(struct socket *sock)
@@ -1088,7 +1088,7 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
        err = -ENOMEM;
 
        /* create new sock for complete connection */
-       newsk = unix_create1(sock_net(sk), NULL);
+       newsk = unix_create1(sock_net(sk), NULL, 0);
        if (newsk == NULL)
                goto out;
 
index 2ec86e652a19802ec7f81e7443d29bbdf468b174..df5fc6b340f1bbde621fbe84fa44e0af6e2e00af 100644 (file)
@@ -581,13 +581,14 @@ struct sock *__vsock_create(struct net *net,
                            struct socket *sock,
                            struct sock *parent,
                            gfp_t priority,
-                           unsigned short type)
+                           unsigned short type,
+                           int kern)
 {
        struct sock *sk;
        struct vsock_sock *psk;
        struct vsock_sock *vsk;
 
-       sk = sk_alloc(net, AF_VSOCK, priority, &vsock_proto);
+       sk = sk_alloc(net, AF_VSOCK, priority, &vsock_proto, kern);
        if (!sk)
                return NULL;
 
@@ -1866,7 +1867,7 @@ static int vsock_create(struct net *net, struct socket *sock,
 
        sock->state = SS_UNCONNECTED;
 
-       return __vsock_create(net, sock, NULL, GFP_KERNEL, 0) ? 0 : -ENOMEM;
+       return __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern) ? 0 : -ENOMEM;
 }
 
 static const struct net_proto_family vsock_family_ops = {
index c294da095461bcf67f662d751d00d7156c092366..1f63daff39659e08561862cfd71220ffc6949291 100644 (file)
@@ -1022,7 +1022,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
        }
 
        pending = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-                                sk->sk_type);
+                                sk->sk_type, 0);
        if (!pending) {
                vmci_transport_send_reset(sk, pkt);
                return -ENOMEM;
index c3ab230e4493fbb0d63b50c3befe1d15aeda802e..a750f330b8ddca8e0ea3e5d8eb88e68f6038e149 100644 (file)
@@ -515,10 +515,10 @@ static struct proto x25_proto = {
        .obj_size = sizeof(struct x25_sock),
 };
 
-static struct sock *x25_alloc_socket(struct net *net)
+static struct sock *x25_alloc_socket(struct net *net, int kern)
 {
        struct x25_sock *x25;
-       struct sock *sk = sk_alloc(net, AF_X25, GFP_ATOMIC, &x25_proto);
+       struct sock *sk = sk_alloc(net, AF_X25, GFP_ATOMIC, &x25_proto, kern);
 
        if (!sk)
                goto out;
@@ -553,7 +553,7 @@ static int x25_create(struct net *net, struct socket *sock, int protocol,
                goto out;
 
        rc = -ENOBUFS;
-       if ((sk = x25_alloc_socket(net)) == NULL)
+       if ((sk = x25_alloc_socket(net, kern)) == NULL)
                goto out;
 
        x25 = x25_sk(sk);
@@ -602,7 +602,7 @@ static struct sock *x25_make_new(struct sock *osk)
        if (osk->sk_type != SOCK_SEQPACKET)
                goto out;
 
-       if ((sk = x25_alloc_socket(sock_net(osk))) == NULL)
+       if ((sk = x25_alloc_socket(sock_net(osk), 0)) == NULL)
                goto out;
 
        x25 = x25_sk(sk);