1
0
Fork 0

net: Pass kern from net_proto_family.create to sk_alloc

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>
steinar/wifi_calib_4_9_kernel
Eric W. Biederman 2015-05-08 21:09:13 -05:00 committed by David S. Miller
parent eeb1bd5c40
commit 11aa9c28b4
59 changed files with 109 additions and 108 deletions

View File

@ -244,7 +244,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
if (!type) if (!type)
goto unlock; 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; err = -ENOMEM;
if (!sk2) if (!sk2)
goto unlock; goto unlock;
@ -324,7 +324,7 @@ static int alg_create(struct net *net, struct socket *sock, int protocol,
return -EPROTONOSUPPORT; return -EPROTONOSUPPORT;
err = -ENOMEM; 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) if (!sk)
goto out; goto out;

View File

@ -601,14 +601,14 @@ static const struct proto_ops data_sock_ops = {
}; };
static int 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; struct sock *sk;
if (sock->type != SOCK_DGRAM) if (sock->type != SOCK_DGRAM)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -756,14 +756,14 @@ static const struct proto_ops base_sock_ops = {
static int 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; struct sock *sk;
if (sock->type != SOCK_RAW) if (sock->type != SOCK_RAW)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -785,7 +785,7 @@ mISDN_sock_create(struct net *net, struct socket *sock, int proto, int kern)
switch (proto) { switch (proto) {
case ISDN_P_BASE: case ISDN_P_BASE:
err = base_sock_create(net, sock, proto); err = base_sock_create(net, sock, proto, kern);
break; break;
case ISDN_P_TE_S0: case ISDN_P_TE_S0:
case ISDN_P_NT_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_L2DTMF:
case ISDN_P_B_L2DSP: case ISDN_P_B_L2DSP:
case ISDN_P_B_L2DSPHDLC: case ISDN_P_B_L2DSPHDLC:
err = data_sock_create(net, sock, proto); err = data_sock_create(net, sock, proto, kern);
break; break;
default: default:
return err; return err;

View File

@ -476,7 +476,7 @@ static int macvtap_open(struct inode *inode, struct file *file)
err = -ENOMEM; err = -ENOMEM;
q = (struct macvtap_queue *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL, q = (struct macvtap_queue *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL,
&macvtap_proto); &macvtap_proto, 0);
if (!q) if (!q)
goto out; goto out;

View File

@ -546,11 +546,11 @@ static struct proto pppoe_sk_proto __read_mostly = {
* Initialize a new struct sock. * 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; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -118,7 +118,7 @@ static int pppox_create(struct net *net, struct socket *sock, int protocol,
!try_module_get(pppox_protos[protocol]->owner)) !try_module_get(pppox_protos[protocol]->owner))
goto out; goto out;
rc = pppox_protos[protocol]->create(net, sock); rc = pppox_protos[protocol]->create(net, sock, kern);
module_put(pppox_protos[protocol]->owner); module_put(pppox_protos[protocol]->owner);
out: out:

View File

@ -561,14 +561,14 @@ static void pptp_sock_destruct(struct sock *sk)
skb_queue_purge(&sk->sk_receive_queue); 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; int error = -ENOMEM;
struct sock *sk; struct sock *sk;
struct pppox_sock *po; struct pppox_sock *po;
struct pptp_opt *opt; 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) if (!sk)
goto out; goto out;

View File

@ -2148,7 +2148,7 @@ static int tun_chr_open(struct inode *inode, struct file * file)
DBG1(KERN_INFO, "tunX: tun_chr_open\n"); DBG1(KERN_INFO, "tunX: tun_chr_open\n");
tfile = (struct tun_file *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL, tfile = (struct tun_file *)sk_alloc(net, AF_UNSPEC, GFP_KERNEL,
&tun_proto); &tun_proto, 0);
if (!tfile) if (!tfile)
return -ENOMEM; return -ENOMEM;
RCU_INIT_POINTER(tfile->tun, NULL); RCU_INIT_POINTER(tfile->tun, NULL);

View File

@ -74,7 +74,7 @@ static inline struct sock *sk_pppox(struct pppox_sock *po)
struct module; struct module;
struct pppox_proto { 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, int (*ioctl)(struct socket *sock, unsigned int cmd,
unsigned long arg); unsigned long arg);
struct module *owner; struct module *owner;

View File

@ -74,7 +74,7 @@ void vsock_pending_work(struct work_struct *work);
struct sock *__vsock_create(struct net *net, struct sock *__vsock_create(struct net *net,
struct socket *sock, struct socket *sock,
struct sock *parent, struct sock *parent,
gfp_t priority, unsigned short type); gfp_t priority, unsigned short type, int kern);
/**** TRANSPORT ****/ /**** TRANSPORT ****/

View 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 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_free(struct sock *sk);
void llc_sk_reset(struct sock *sk); void llc_sk_reset(struct sock *sk);

View 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 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_free(struct sock *sk);
void sk_release_kernel(struct sock *sk); void sk_release_kernel(struct sock *sk);
struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority); struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority);

View 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) if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
goto out; goto out;
rc = -ENOMEM; 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) if (!sk)
goto out; goto out;
rc = 0; rc = 0;

View File

@ -141,7 +141,7 @@ static struct proto vcc_proto = {
.release_cb = vcc_release_cb, .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 sock *sk;
struct atm_vcc *vcc; struct atm_vcc *vcc;
@ -149,7 +149,7 @@ int vcc_create(struct net *net, struct socket *sock, int protocol, int family)
sock->sk = NULL; sock->sk = NULL;
if (sock->type == SOCK_STREAM) if (sock->type == SOCK_STREAM)
return -EINVAL; return -EINVAL;
sk = sk_alloc(net, family, GFP_KERNEL, &vcc_proto); sk = sk_alloc(net, family, GFP_KERNEL, &vcc_proto, kern);
if (!sk) if (!sk)
return -ENOMEM; return -ENOMEM;
sock_init_data(sock, sk); sock_init_data(sock, sk);

View File

@ -10,7 +10,7 @@
#include <linux/poll.h> /* for poll_table */ #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_release(struct socket *sock);
int vcc_connect(struct socket *sock, int itf, short vpi, int vci); int vcc_connect(struct socket *sock, int itf, short vpi, int vci);
int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,

View File

@ -136,7 +136,7 @@ static int pvc_create(struct net *net, struct socket *sock, int protocol,
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
sock->ops = &pvc_proto_ops; 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 = { static const struct net_proto_family pvc_family_ops = {

View File

@ -660,7 +660,7 @@ static int svc_create(struct net *net, struct socket *sock, int protocol,
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
sock->ops = &svc_proto_ops; sock->ops = &svc_proto_ops;
error = vcc_create(net, sock, protocol, AF_ATMSVC); error = vcc_create(net, sock, protocol, AF_ATMSVC, kern);
if (error) if (error)
return error; return error;
ATM_SD(sock)->local.sas_family = AF_ATMSVC; ATM_SD(sock)->local.sas_family = AF_ATMSVC;

View File

@ -855,7 +855,7 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
return -ESOCKTNOSUPPORT; 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;
@ -881,7 +881,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
struct sock *sk; struct sock *sk;
ax25_cb *ax25, *oax25; 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) if (sk == NULL)
return NULL; return NULL;

View File

@ -202,7 +202,7 @@ static int bnep_sock_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_RAW) if (sock->type != SOCK_RAW)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -205,7 +205,7 @@ static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_RAW) if (sock->type != SOCK_RAW)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -1377,7 +1377,7 @@ static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
sock->ops = &hci_sock_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -235,7 +235,7 @@ static int hidp_sock_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_RAW) if (sock->type != SOCK_RAW)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -43,7 +43,7 @@ static struct bt_sock_list l2cap_sk_list = {
static const struct proto_ops l2cap_sock_ops; static const struct proto_ops l2cap_sock_ops;
static void l2cap_sock_init(struct sock *sk, struct sock *parent); static void l2cap_sock_init(struct sock *sk, struct sock *parent);
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 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) 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, sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
GFP_ATOMIC); GFP_ATOMIC, 0);
if (!sk) { if (!sk) {
release_sock(parent); release_sock(parent);
return NULL; return NULL;
@ -1523,12 +1523,12 @@ static struct proto l2cap_proto = {
}; };
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 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 sock *sk;
struct l2cap_chan *chan; 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) if (!sk)
return NULL; return NULL;
@ -1574,7 +1574,7 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
sock->ops = &l2cap_sock_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -269,12 +269,12 @@ static struct proto rfcomm_proto = {
.obj_size = sizeof(struct rfcomm_pinfo) .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 rfcomm_dlc *d;
struct sock *sk; struct sock *sk;
sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto); sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto, kern);
if (!sk) if (!sk)
return NULL; return NULL;
@ -324,7 +324,7 @@ static int rfcomm_sock_create(struct net *net, struct socket *sock,
sock->ops = &rfcomm_sock_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -969,7 +969,7 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *
goto done; 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) if (!sk)
goto done; goto done;

View File

@ -460,11 +460,11 @@ static struct proto sco_proto = {
.obj_size = sizeof(struct sco_pinfo) .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; struct sock *sk;
sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto); sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
if (!sk) if (!sk)
return NULL; return NULL;
@ -501,7 +501,7 @@ static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
sock->ops = &sco_sock_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -1026,7 +1026,7 @@ static void sco_conn_ready(struct sco_conn *conn)
bh_lock_sock(parent); bh_lock_sock(parent);
sk = sco_sock_alloc(sock_net(parent), NULL, sk = sco_sock_alloc(sock_net(parent), NULL,
BTPROTO_SCO, GFP_ATOMIC); BTPROTO_SCO, GFP_ATOMIC, 0);
if (!sk) { if (!sk) {
bh_unlock_sock(parent); bh_unlock_sock(parent);
sco_conn_unlock(conn); sco_conn_unlock(conn);

View 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 * is really not used at all in the net/core or socket.c but the
* initialization makes sure that sock->state is not uninitialized. * 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -179,7 +179,7 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
sock->ops = cp->ops; 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) { if (!sk) {
err = -ENOMEM; err = -ENOMEM;
goto errout; goto errout;

View File

@ -1396,9 +1396,10 @@ EXPORT_SYMBOL_GPL(sock_update_netprioidx);
* @family: protocol family * @family: protocol family
* @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc) * @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
* @prot: struct proto associated with this new sock instance * @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 sock *sk_alloc(struct net *net, int family, gfp_t priority,
struct proto *prot) struct proto *prot, int kern)
{ {
struct sock *sk; struct sock *sk;

View File

@ -468,10 +468,10 @@ static struct proto dn_proto = {
.obj_size = sizeof(struct dn_sock), .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 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) if (!sk)
goto out; 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; return -ENOBUFS;
sk->sk_protocol = protocol; 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); cb = DN_SKB_CB(skb);
sk->sk_ack_backlog--; 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) { if (newsk == NULL) {
release_sock(sk); release_sock(sk);
kfree_skb(skb); kfree_skb(skb);

View File

@ -1014,7 +1014,7 @@ static int ieee802154_create(struct net *net, struct socket *sock,
} }
rc = -ENOMEM; rc = -ENOMEM;
sk = sk_alloc(net, PF_IEEE802154, GFP_KERNEL, proto); sk = sk_alloc(net, PF_IEEE802154, GFP_KERNEL, proto, kern);
if (!sk) if (!sk)
goto out; goto out;
rc = 0; rc = 0;

View File

@ -317,7 +317,7 @@ lookup_protocol:
WARN_ON(!answer_prot->slab); WARN_ON(!answer_prot->slab);
err = -ENOBUFS; 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) if (!sk)
goto out; goto out;

View File

@ -167,7 +167,7 @@ lookup_protocol:
WARN_ON(!answer_prot->slab); WARN_ON(!answer_prot->slab);
err = -ENOBUFS; 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) if (!sk)
goto out; goto out;

View File

@ -1347,7 +1347,7 @@ static int ipx_create(struct net *net, struct socket *sock, int protocol,
goto out; goto out;
rc = -ENOMEM; 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) if (!sk)
goto out; goto out;

View File

@ -1100,7 +1100,7 @@ static int irda_create(struct net *net, struct socket *sock, int protocol,
} }
/* Allocate networking socket */ /* 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;

View File

@ -535,12 +535,12 @@ static void iucv_sock_init(struct sock *sk, struct sock *parent)
sk->sk_type = parent->sk_type; 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 sock *sk;
struct iucv_sock *iucv; 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) if (!sk)
return NULL; return NULL;
iucv = iucv_sk(sk); iucv = iucv_sk(sk);
@ -602,7 +602,7 @@ static int iucv_sock_create(struct net *net, struct socket *sock, int protocol,
return -ESOCKTNOSUPPORT; return -ESOCKTNOSUPPORT;
} }
sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL); sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL, kern);
if (!sk) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -1723,7 +1723,7 @@ static int iucv_callback_connreq(struct iucv_path *path,
} }
/* Create the new socket */ /* 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) { if (!nsk) {
err = pr_iucv->path_sever(path, user_data); err = pr_iucv->path_sever(path, user_data);
iucv_path_free(path); iucv_path_free(path);
@ -1933,7 +1933,7 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
goto out; 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); bh_lock_sock(sk);
if ((sk->sk_state != IUCV_LISTEN) || if ((sk->sk_state != IUCV_LISTEN) ||
sk_acceptq_is_full(sk) || sk_acceptq_is_full(sk) ||

View File

@ -149,7 +149,7 @@ static int pfkey_create(struct net *net, struct socket *sock, int protocol,
return -EPROTONOSUPPORT; return -EPROTONOSUPPORT;
err = -ENOMEM; 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) if (sk == NULL)
goto out; goto out;

View File

@ -542,12 +542,12 @@ static int pppol2tp_backlog_recv(struct sock *sk, struct sk_buff *skb)
/* socket() handler. Initialize a new struct sock. /* 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; int error = -ENOMEM;
struct sock *sk; 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) if (!sk)
goto out; goto out;

View 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)) { if (likely(sock->type == SOCK_DGRAM || sock->type == SOCK_STREAM)) {
rc = -ENOMEM; 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) { if (sk) {
rc = 0; rc = 0;
llc_ui_sk_init(sock, sk); llc_ui_sk_init(sock, sk);

View File

@ -768,7 +768,7 @@ static struct sock *llc_create_incoming_sock(struct sock *sk,
struct llc_addr *daddr) struct llc_addr *daddr)
{ {
struct sock *newsk = llc_sk_alloc(sock_net(sk), sk->sk_family, GFP_ATOMIC, 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); struct llc_sock *newllc, *llc = llc_sk(sk);
if (!newsk) 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 * Allocates a LLC sock and initializes it. Returns the new LLC sock
* or %NULL if there's no memory available for one * 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) if (!sk)
goto out; goto out;

View File

@ -1119,14 +1119,15 @@ static struct proto netlink_proto = {
}; };
static int __netlink_create(struct net *net, struct socket *sock, 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 sock *sk;
struct netlink_sock *nlk; struct netlink_sock *nlk;
sock->ops = &netlink_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;
@ -1188,7 +1189,7 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol,
if (err < 0) if (err < 0)
goto out; goto out;
err = __netlink_create(net, sock, cb_mutex, protocol); err = __netlink_create(net, sock, cb_mutex, protocol, kern);
if (err < 0) if (err < 0)
goto out_module; 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)) if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
return NULL; return NULL;
/* /*
* We have to just have a reference on the net from sk, but don't * 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. * 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. * So we create one inside init_net and the move it to net.
*/ */
if (__netlink_create(&init_net, sock, cb_mutex, unit, 0) < 0)
if (__netlink_create(&init_net, sock, cb_mutex, unit) < 0)
goto out_sock_release_nosk; goto out_sock_release_nosk;
sk = sock->sk; sk = sock->sk;

View File

@ -433,7 +433,7 @@ static int nr_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_SEQPACKET || protocol != 0) if (sock->type != SOCK_SEQPACKET || protocol != 0)
return -ESOCKTNOSUPPORT; 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;
@ -476,7 +476,7 @@ static struct sock *nr_make_new(struct sock *osk)
if (osk->sk_type != SOCK_SEQPACKET) if (osk->sk_type != SOCK_SEQPACKET)
return NULL; 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) if (sk == NULL)
return NULL; return NULL;

View File

@ -40,7 +40,7 @@ static int nfc_sock_create(struct net *net, struct socket *sock, int proto,
read_lock(&proto_tab_lock); read_lock(&proto_tab_lock);
if (proto_tab[proto] && try_module_get(proto_tab[proto]->owner)) { 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); module_put(proto_tab[proto]->owner);
} }
read_unlock(&proto_tab_lock); read_unlock(&proto_tab_lock);

View File

@ -225,7 +225,7 @@ void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local,
struct sk_buff *skb, u8 direction); struct sk_buff *skb, u8 direction);
/* Sock API */ /* 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_sock_free(struct nfc_llcp_sock *sock);
void nfc_llcp_accept_unlink(struct sock *sk); void nfc_llcp_accept_unlink(struct sock *sk);
void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk); void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk);

View File

@ -934,7 +934,7 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local,
sock->ssap = ssap; 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) { if (new_sk == NULL) {
reason = LLCP_DM_REJ; reason = LLCP_DM_REJ;
release_sock(&sock->sk); release_sock(&sock->sk);

View 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 sock *sk;
struct nfc_llcp_sock *llcp_sock; 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) if (!sk)
return NULL; 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, 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; struct sock *sk;
@ -1009,7 +1009,7 @@ static int llcp_sock_create(struct net *net, struct socket *sock,
else else
sock->ops = &llcp_sock_ops; 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;

View File

@ -30,7 +30,7 @@ struct nfc_protocol {
struct proto *proto; struct proto *proto;
struct module *owner; struct module *owner;
int (*create)(struct net *net, struct socket *sock, 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 { struct nfc_rawsock {

View File

@ -334,7 +334,7 @@ static void rawsock_destruct(struct sock *sk)
} }
static int rawsock_create(struct net *net, struct socket *sock, 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; struct sock *sk;
@ -348,7 +348,7 @@ static int rawsock_create(struct net *net, struct socket *sock,
else else
sock->ops = &rawsock_ops; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -2832,7 +2832,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
sock->state = SS_UNCONNECTED; sock->state = SS_UNCONNECTED;
err = -ENOBUFS; 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) if (sk == NULL)
goto out; goto out;

View File

@ -97,7 +97,7 @@ static int pn_socket_create(struct net *net, struct socket *sock, int protocol,
goto out; 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) { if (sk == NULL) {
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;

View 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 */ /* 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) { if (!newsk) {
pep_reject_conn(sk, skb, PN_PIPE_ERR_OVERLOAD, GFP_KERNEL); pep_reject_conn(sk, skb, PN_PIPE_ERR_OVERLOAD, GFP_KERNEL);
err = -ENOBUFS; err = -ENOBUFS;

View File

@ -440,7 +440,7 @@ static int rds_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_SEQPACKET || protocol) if (sock->type != SOCK_SEQPACKET || protocol)
return -ESOCKTNOSUPPORT; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View File

@ -520,7 +520,7 @@ static int rose_create(struct net *net, struct socket *sock, int protocol,
if (sock->type != SOCK_SEQPACKET || protocol != 0) if (sock->type != SOCK_SEQPACKET || protocol != 0)
return -ESOCKTNOSUPPORT; 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;
@ -559,7 +559,7 @@ static struct sock *rose_make_new(struct sock *osk)
if (osk->sk_type != SOCK_SEQPACKET) if (osk->sk_type != SOCK_SEQPACKET)
return NULL; 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) if (sk == NULL)
return NULL; return NULL;

View File

@ -632,7 +632,7 @@ static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
sock->ops = &rxrpc_rpc_ops; sock->ops = &rxrpc_rpc_ops;
sock->state = SS_UNCONNECTED; 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) if (!sk)
return -ENOMEM; return -ENOMEM;

View 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 ipv6_pinfo *newnp, *np = inet6_sk(sk);
struct sctp6_sock *newsctp6sk; 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) if (!newsk)
goto out; goto out;

View File

@ -550,7 +550,7 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk,
struct sctp_association *asoc) struct sctp_association *asoc)
{ {
struct sock *newsk = sk_alloc(sock_net(sk), PF_INET, GFP_KERNEL, struct sock *newsk = sk_alloc(sock_net(sk), PF_INET, GFP_KERNEL,
sk->sk_prot); sk->sk_prot, 0);
struct inet_sock *newinet; struct inet_sock *newinet;
if (!newsk) if (!newsk)

View File

@ -342,7 +342,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
} }
/* Allocate socket's protocol area */ /* 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) if (sk == NULL)
return -ENOMEM; return -ENOMEM;

View File

@ -620,7 +620,7 @@ static struct proto unix_proto = {
*/ */
static struct lock_class_key af_unix_sk_receive_queue_lock_key; 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 sock *sk = NULL;
struct unix_sock *u; 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()) if (atomic_long_read(&unix_nr_socks) > 2 * get_max_files())
goto out; 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) if (!sk)
goto out; goto out;
@ -688,7 +688,7 @@ static int unix_create(struct net *net, struct socket *sock, int protocol,
return -ESOCKTNOSUPPORT; return -ESOCKTNOSUPPORT;
} }
return unix_create1(net, sock) ? 0 : -ENOMEM; return unix_create1(net, sock, kern) ? 0 : -ENOMEM;
} }
static int unix_release(struct socket *sock) static int unix_release(struct socket *sock)
@ -1088,7 +1088,7 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
err = -ENOMEM; err = -ENOMEM;
/* create new sock for complete connection */ /* create new sock for complete connection */
newsk = unix_create1(sock_net(sk), NULL); newsk = unix_create1(sock_net(sk), NULL, 0);
if (newsk == NULL) if (newsk == NULL)
goto out; goto out;

View File

@ -581,13 +581,14 @@ struct sock *__vsock_create(struct net *net,
struct socket *sock, struct socket *sock,
struct sock *parent, struct sock *parent,
gfp_t priority, gfp_t priority,
unsigned short type) unsigned short type,
int kern)
{ {
struct sock *sk; struct sock *sk;
struct vsock_sock *psk; struct vsock_sock *psk;
struct vsock_sock *vsk; 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) if (!sk)
return NULL; return NULL;
@ -1866,7 +1867,7 @@ static int vsock_create(struct net *net, struct socket *sock,
sock->state = SS_UNCONNECTED; 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 = { static const struct net_proto_family vsock_family_ops = {

View File

@ -1022,7 +1022,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
} }
pending = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL, pending = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
sk->sk_type); sk->sk_type, 0);
if (!pending) { if (!pending) {
vmci_transport_send_reset(sk, pkt); vmci_transport_send_reset(sk, pkt);
return -ENOMEM; return -ENOMEM;

View File

@ -515,10 +515,10 @@ static struct proto x25_proto = {
.obj_size = sizeof(struct x25_sock), .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 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) if (!sk)
goto out; goto out;
@ -553,7 +553,7 @@ static int x25_create(struct net *net, struct socket *sock, int protocol,
goto out; goto out;
rc = -ENOBUFS; rc = -ENOBUFS;
if ((sk = x25_alloc_socket(net)) == NULL) if ((sk = x25_alloc_socket(net, kern)) == NULL)
goto out; goto out;
x25 = x25_sk(sk); x25 = x25_sk(sk);
@ -602,7 +602,7 @@ static struct sock *x25_make_new(struct sock *osk)
if (osk->sk_type != SOCK_SEQPACKET) if (osk->sk_type != SOCK_SEQPACKET)
goto out; goto out;
if ((sk = x25_alloc_socket(sock_net(osk))) == NULL) if ((sk = x25_alloc_socket(sock_net(osk), 0)) == NULL)
goto out; goto out;
x25 = x25_sk(sk); x25 = x25_sk(sk);