kraxel / rpms / kernel

Forked from rpms/kernel 2 years ago
Clone
Kyle McMartin 14fe094
commit abbee616fa69a781c6e58249318a7ae6796a3394
Kyle McMartin 14fe094
Author: Eric Paris <eparis@redhat.com>
Kyle McMartin 14fe094
Date:   Thu Nov 5 20:45:52 2009 -0800
Kyle McMartin 14fe094
Kyle McMartin 14fe094
    net: check kern before calling security subsystem
Kyle McMartin 14fe094
    
Kyle McMartin 14fe094
    Before calling capable(CAP_NET_RAW) check if this operations is on behalf
Kyle McMartin 14fe094
    of the kernel or on behalf of userspace.  Do not do the security check if
Kyle McMartin 14fe094
    it is on behalf of the kernel.
Kyle McMartin 14fe094
    
Kyle McMartin 14fe094
    Signed-off-by: Eric Paris <eparis@redhat.com>
Kyle McMartin 14fe094
    Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Kyle McMartin 14fe094
    Signed-off-by: David S. Miller <davem@davemloft.net>
Kyle McMartin 14fe094
Kyle McMartin 14fe094
commit 8b7950c0735ab6228f08e7b19fc0f94c09c7f2ba
Kyle McMartin 14fe094
Author: Eric Paris <eparis@redhat.com>
Kyle McMartin 14fe094
Date:   Thu Nov 5 22:18:14 2009 -0800
Kyle McMartin 14fe094
Kyle McMartin 14fe094
    net: pass kern to net_proto_family create function
Kyle McMartin 14fe094
    
Kyle McMartin 14fe094
    The generic __sock_create function has a kern argument which allows the
Kyle McMartin 14fe094
    security system to make decisions based on if a socket is being created by
Kyle McMartin 14fe094
    the kernel or by userspace.  This patch passes that flag to the
Kyle McMartin 14fe094
    net_proto_family specific create function, so it can do the same thing.
Kyle McMartin 14fe094
    
Kyle McMartin 14fe094
    Signed-off-by: Eric Paris <eparis@redhat.com>
Kyle McMartin 14fe094
    Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Kyle McMartin 14fe094
    Signed-off-by: David S. Miller <davem@davemloft.net>
Kyle McMartin 14fe094
Kyle McMartin 14fe094
---
Kyle McMartin 14fe094
 drivers/isdn/mISDN/socket.c    |    2 +-
Kyle McMartin 14fe094
 drivers/net/pppox.c            |    3 ++-
Kyle McMartin 14fe094
 include/linux/net.h            |    3 ++-
Kyle McMartin 14fe094
 net/appletalk/ddp.c            |    3 ++-
Kyle McMartin 14fe094
 net/atm/pvc.c                  |    3 ++-
Kyle McMartin 14fe094
 net/atm/svc.c                  |    7 ++++---
Kyle McMartin 14fe094
 net/ax25/af_ax25.c             |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/af_bluetooth.c   |    5 +++--
Kyle McMartin 14fe094
 net/bluetooth/bnep/sock.c      |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/cmtp/sock.c      |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/hci_sock.c       |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/hidp/sock.c      |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/l2cap.c          |    5 +++--
Kyle McMartin 14fe094
 net/bluetooth/rfcomm/sock.c    |    3 ++-
Kyle McMartin 14fe094
 net/bluetooth/sco.c            |    3 ++-
Kyle McMartin 14fe094
 net/can/af_can.c               |    3 ++-
Kyle McMartin 14fe094
 net/decnet/af_decnet.c         |    3 ++-
Kyle McMartin 14fe094
 net/econet/af_econet.c         |    3 ++-
Kyle McMartin 14fe094
 net/ieee802154/af_ieee802154.c |    2 +-
Kyle McMartin 14fe094
 net/ipv4/af_inet.c             |    5 +++--
Kyle McMartin 14fe094
 net/ipv6/af_inet6.c            |    5 +++--
Kyle McMartin 14fe094
 net/ipx/af_ipx.c               |    3 ++-
Kyle McMartin 14fe094
 net/irda/af_irda.c             |    7 ++++---
Kyle McMartin 14fe094
 net/iucv/af_iucv.c             |    3 ++-
Kyle McMartin 14fe094
 net/key/af_key.c               |    3 ++-
Kyle McMartin 14fe094
 net/llc/af_llc.c               |    5 ++++-
Kyle McMartin 14fe094
 net/netlink/af_netlink.c       |    3 ++-
Kyle McMartin 14fe094
 net/netrom/af_netrom.c         |    3 ++-
Kyle McMartin 14fe094
 net/packet/af_packet.c         |    3 ++-
Kyle McMartin 14fe094
 net/phonet/af_phonet.c         |    3 ++-
Kyle McMartin 14fe094
 net/rds/af_rds.c               |    3 ++-
Kyle McMartin 14fe094
 net/rose/af_rose.c             |    3 ++-
Kyle McMartin 14fe094
 net/rxrpc/af_rxrpc.c           |    3 ++-
Kyle McMartin 14fe094
 net/socket.c                   |    2 +-
Kyle McMartin 14fe094
 net/tipc/socket.c              |    6 ++++--
Kyle McMartin 14fe094
 net/unix/af_unix.c             |    3 ++-
Kyle McMartin 14fe094
 net/x25/af_x25.c               |    3 ++-
Kyle McMartin 14fe094
 37 files changed, 83 insertions(+), 46 deletions(-)
Kyle McMartin 14fe094
Kyle McMartin 14fe094
diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
Kyle McMartin 14fe094
index feb0fa4..8167346 100644
Kyle McMartin 14fe094
--- a/drivers/isdn/mISDN/socket.c
Kyle McMartin 14fe094
+++ b/drivers/isdn/mISDN/socket.c
Kyle McMartin 14fe094
@@ -779,7 +779,7 @@ base_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 static int
Kyle McMartin 14fe094
-mISDN_sock_create(struct net *net, struct socket *sock, int proto)
Kyle McMartin 14fe094
+mISDN_sock_create(struct net *net, struct socket *sock, int proto, int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	int err = -EPROTONOSUPPORT;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/drivers/net/pppox.c b/drivers/net/pppox.c
Kyle McMartin 14fe094
index 4f6d33f..a155baf 100644
Kyle McMartin 14fe094
--- a/drivers/net/pppox.c
Kyle McMartin 14fe094
+++ b/drivers/net/pppox.c
Kyle McMartin 14fe094
@@ -104,7 +104,8 @@ int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 EXPORT_SYMBOL(pppox_ioctl);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int pppox_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int pppox_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	int rc = -EPROTOTYPE;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/include/linux/net.h b/include/linux/net.h
Kyle McMartin 14fe094
index 529a093..3a63efd 100644
Kyle McMartin 14fe094
--- a/include/linux/net.h
Kyle McMartin 14fe094
+++ b/include/linux/net.h
Kyle McMartin 14fe094
@@ -200,7 +200,8 @@ struct proto_ops {
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 struct net_proto_family {
Kyle McMartin 14fe094
 	int		family;
Kyle McMartin 14fe094
-	int		(*create)(struct net *net, struct socket *sock, int protocol);
Kyle McMartin 14fe094
+	int		(*create)(struct net *net, struct socket *sock,
Kyle McMartin 14fe094
+				  int protocol, int kern);
Kyle McMartin 14fe094
 	struct module	*owner;
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
Kyle McMartin 14fe094
index b1a4290..7c22d90 100644
Kyle McMartin 14fe094
--- a/net/appletalk/ddp.c
Kyle McMartin 14fe094
+++ b/net/appletalk/ddp.c
Kyle McMartin 14fe094
@@ -1021,7 +1021,8 @@ static struct proto ddp_proto = {
Kyle McMartin 14fe094
  * Create a socket. Initialise the socket, blank the addresses
Kyle McMartin 14fe094
  * set the state.
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
-static int atalk_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int atalk_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	int rc = -ESOCKTNOSUPPORT;
Kyle McMartin 14fe094
diff --git a/net/atm/pvc.c b/net/atm/pvc.c
Kyle McMartin 14fe094
index d4c0245..e879725 100644
Kyle McMartin 14fe094
--- a/net/atm/pvc.c
Kyle McMartin 14fe094
+++ b/net/atm/pvc.c
Kyle McMartin 14fe094
@@ -127,7 +127,8 @@ static const struct proto_ops pvc_proto_ops = {
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int pvc_create(struct net *net, struct socket *sock,int protocol)
Kyle McMartin 14fe094
+static int pvc_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	if (net != &init_net)
Kyle McMartin 14fe094
 		return -EAFNOSUPPORT;
Kyle McMartin 14fe094
diff --git a/net/atm/svc.c b/net/atm/svc.c
Kyle McMartin 14fe094
index f90d143..ed096a6 100644
Kyle McMartin 14fe094
--- a/net/atm/svc.c
Kyle McMartin 14fe094
+++ b/net/atm/svc.c
Kyle McMartin 14fe094
@@ -25,7 +25,7 @@
Kyle McMartin 14fe094
 #include "signaling.h"
Kyle McMartin 14fe094
 #include "addr.h"
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int svc_create(struct net *net, struct socket *sock,int protocol);
Kyle McMartin 14fe094
+static int svc_create(struct net *net, struct socket *sock, int protocol, int kern);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 /*
Kyle McMartin 14fe094
  * Note: since all this is still nicely synchronized with the signaling demon,
Kyle McMartin 14fe094
@@ -330,7 +330,7 @@ static int svc_accept(struct socket *sock,struct socket *newsock,int flags)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	lock_sock(sk);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-	error = svc_create(sock_net(sk), newsock,0);
Kyle McMartin 14fe094
+	error = svc_create(sock_net(sk), newsock, 0, 0);
Kyle McMartin 14fe094
 	if (error)
Kyle McMartin 14fe094
 		goto out;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
@@ -650,7 +650,8 @@ static const struct proto_ops svc_proto_ops = {
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int svc_create(struct net *net, struct socket *sock,int protocol)
Kyle McMartin 14fe094
+static int svc_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	int error;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
Kyle McMartin 14fe094
index f454607..274d5c0 100644
Kyle McMartin 14fe094
--- a/net/ax25/af_ax25.c
Kyle McMartin 14fe094
+++ b/net/ax25/af_ax25.c
Kyle McMartin 14fe094
@@ -800,7 +800,8 @@ static struct proto ax25_proto = {
Kyle McMartin 14fe094
 	.obj_size = sizeof(struct sock),
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int ax25_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int ax25_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	ax25_cb *ax25;
Kyle McMartin 14fe094
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
Kyle McMartin 14fe094
index 8cfb5a8..af074ed 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/af_bluetooth.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/af_bluetooth.c
Kyle McMartin 14fe094
@@ -126,7 +126,8 @@ int bt_sock_unregister(int proto)
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 EXPORT_SYMBOL(bt_sock_unregister);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int bt_sock_create(struct net *net, struct socket *sock, int proto)
Kyle McMartin 14fe094
+static int bt_sock_create(struct net *net, struct socket *sock, int proto,
Kyle McMartin 14fe094
+			  int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	int err;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
@@ -144,7 +145,7 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto)
Kyle McMartin 14fe094
 	read_lock(&bt_proto_lock);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
Kyle McMartin 14fe094
-		err = bt_proto[proto]->create(net, sock, proto);
Kyle McMartin 14fe094
+		err = bt_proto[proto]->create(net, sock, proto, kern);
Kyle McMartin 14fe094
 		bt_sock_reclassify_lock(sock, proto);
Kyle McMartin 14fe094
 		module_put(bt_proto[proto]->owner);
Kyle McMartin 14fe094
 	}
Kyle McMartin 14fe094
diff --git a/net/bluetooth/bnep/sock.c b/net/bluetooth/bnep/sock.c
Kyle McMartin 14fe094
index e857628..ee86b31 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/bnep/sock.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/bnep/sock.c
Kyle McMartin 14fe094
@@ -195,7 +195,8 @@ static struct proto bnep_proto = {
Kyle McMartin 14fe094
 	.obj_size	= sizeof(struct bt_sock)
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int bnep_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int bnep_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			    int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/bluetooth/cmtp/sock.c b/net/bluetooth/cmtp/sock.c
Kyle McMartin 14fe094
index 16b0fad..536482f 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/cmtp/sock.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/cmtp/sock.c
Kyle McMartin 14fe094
@@ -190,7 +190,8 @@ static struct proto cmtp_proto = {
Kyle McMartin 14fe094
 	.obj_size	= sizeof(struct bt_sock)
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			    int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
Kyle McMartin 14fe094
index 75302a9..94a138f 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/hci_sock.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/hci_sock.c
Kyle McMartin 14fe094
@@ -621,7 +621,8 @@ static struct proto hci_sk_proto = {
Kyle McMartin 14fe094
 	.obj_size	= sizeof(struct hci_pinfo)
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int hci_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			   int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/bluetooth/hidp/sock.c b/net/bluetooth/hidp/sock.c
Kyle McMartin 14fe094
index 37c9d7d..40fac2c 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/hidp/sock.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/hidp/sock.c
Kyle McMartin 14fe094
@@ -241,7 +241,8 @@ static struct proto hidp_proto = {
Kyle McMartin 14fe094
 	.obj_size	= sizeof(struct bt_sock)
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int hidp_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int hidp_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			    int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
Kyle McMartin 14fe094
index 8d1c4a9..0fdf477 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/l2cap.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/l2cap.c
Kyle McMartin 14fe094
@@ -819,7 +819,8 @@ static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int p
Kyle McMartin 14fe094
 	return sk;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			     int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
@@ -831,7 +832,7 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
 			sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
Kyle McMartin 14fe094
 		return -ESOCKTNOSUPPORT;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-	if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
Kyle McMartin 14fe094
+	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
Kyle McMartin 14fe094
 		return -EPERM;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	sock->ops = &l2cap_sock_ops;
Kyle McMartin 14fe094
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
Kyle McMartin 14fe094
index 30a3649..f596455 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/rfcomm/sock.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/rfcomm/sock.c
Kyle McMartin 14fe094
@@ -323,7 +323,8 @@ static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int
Kyle McMartin 14fe094
 	return sk;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int rfcomm_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int rfcomm_sock_create(struct net *net, struct socket *sock,
Kyle McMartin 14fe094
+			      int protocol, int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
Kyle McMartin 14fe094
index 5c0685e..2c06950 100644
Kyle McMartin 14fe094
--- a/net/bluetooth/sco.c
Kyle McMartin 14fe094
+++ b/net/bluetooth/sco.c
Kyle McMartin 14fe094
@@ -430,7 +430,8 @@ static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int pro
Kyle McMartin 14fe094
 	return sk;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int sco_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			   int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/can/af_can.c b/net/can/af_can.c
Kyle McMartin 14fe094
index 6068321..bcd546f 100644
Kyle McMartin 14fe094
--- a/net/can/af_can.c
Kyle McMartin 14fe094
+++ b/net/can/af_can.c
Kyle McMartin 14fe094
@@ -114,7 +114,8 @@ static void can_sock_destruct(struct sock *sk)
Kyle McMartin 14fe094
 	skb_queue_purge(&sk->sk_receive_queue);
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int can_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int can_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct can_proto *cp;
Kyle McMartin 14fe094
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
Kyle McMartin 14fe094
index 7a58c87..5540230 100644
Kyle McMartin 14fe094
--- a/net/decnet/af_decnet.c
Kyle McMartin 14fe094
+++ b/net/decnet/af_decnet.c
Kyle McMartin 14fe094
@@ -675,7 +675,8 @@ char *dn_addr2asc(__u16 addr, char *buf)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int dn_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int dn_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		     int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c
Kyle McMartin 14fe094
index 0e0254f..b9d5f2f 100644
Kyle McMartin 14fe094
--- a/net/econet/af_econet.c
Kyle McMartin 14fe094
+++ b/net/econet/af_econet.c
Kyle McMartin 14fe094
@@ -605,7 +605,8 @@ static struct proto econet_proto = {
Kyle McMartin 14fe094
  *	Create an Econet socket
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int econet_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int econet_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			 int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct econet_sock *eo;
Kyle McMartin 14fe094
diff --git a/net/ieee802154/af_ieee802154.c b/net/ieee802154/af_ieee802154.c
Kyle McMartin 14fe094
index cd949d5..40dcb54 100644
Kyle McMartin 14fe094
--- a/net/ieee802154/af_ieee802154.c
Kyle McMartin 14fe094
+++ b/net/ieee802154/af_ieee802154.c
Kyle McMartin 14fe094
@@ -234,7 +234,7 @@ static const struct proto_ops ieee802154_dgram_ops = {
Kyle McMartin 14fe094
  * set the state.
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
 static int ieee802154_create(struct net *net, struct socket *sock,
Kyle McMartin 14fe094
-		int protocol)
Kyle McMartin 14fe094
+			     int protocol, int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	int rc;
Kyle McMartin 14fe094
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
Kyle McMartin 14fe094
index 57737b8..e718ab6 100644
Kyle McMartin 14fe094
--- a/net/ipv4/af_inet.c
Kyle McMartin 14fe094
+++ b/net/ipv4/af_inet.c
Kyle McMartin 14fe094
@@ -262,7 +262,8 @@ static inline int inet_netns_ok(struct net *net, int protocol)
Kyle McMartin 14fe094
  *	Create an inet socket.
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int inet_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int inet_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct inet_protosw *answer;
Kyle McMartin 14fe094
@@ -325,7 +326,7 @@ lookup_protocol:
Kyle McMartin 14fe094
 	}
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	err = -EPERM;
Kyle McMartin 14fe094
-	if (answer->capability > 0 && !capable(answer->capability))
Kyle McMartin 14fe094
+	if (answer->capability > 0 && !kern && !capable(answer->capability))
Kyle McMartin 14fe094
 		goto out_rcu_unlock;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	err = -EAFNOSUPPORT;
Kyle McMartin 14fe094
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
Kyle McMartin 14fe094
index e127a32..10776f0 100644
Kyle McMartin 14fe094
--- a/net/ipv6/af_inet6.c
Kyle McMartin 14fe094
+++ b/net/ipv6/af_inet6.c
Kyle McMartin 14fe094
@@ -95,7 +95,8 @@ static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
Kyle McMartin 14fe094
 	return (struct ipv6_pinfo *)(((u8 *)sk) + offset);
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int inet6_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int inet6_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct inet_sock *inet;
Kyle McMartin 14fe094
 	struct ipv6_pinfo *np;
Kyle McMartin 14fe094
@@ -158,7 +159,7 @@ lookup_protocol:
Kyle McMartin 14fe094
 	}
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	err = -EPERM;
Kyle McMartin 14fe094
-	if (answer->capability > 0 && !capable(answer->capability))
Kyle McMartin 14fe094
+	if (answer->capability > 0 && !kern && !capable(answer->capability))
Kyle McMartin 14fe094
 		goto out_rcu_unlock;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	sock->ops = answer->ops;
Kyle McMartin 14fe094
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
Kyle McMartin 14fe094
index 66c7a20..7a7ac38 100644
Kyle McMartin 14fe094
--- a/net/ipx/af_ipx.c
Kyle McMartin 14fe094
+++ b/net/ipx/af_ipx.c
Kyle McMartin 14fe094
@@ -1352,7 +1352,8 @@ static struct proto ipx_proto = {
Kyle McMartin 14fe094
 	.obj_size = sizeof(struct ipx_sock),
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int ipx_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int ipx_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	int rc = -ESOCKTNOSUPPORT;
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
Kyle McMartin 14fe094
index dd35641..ef1ac44 100644
Kyle McMartin 14fe094
--- a/net/irda/af_irda.c
Kyle McMartin 14fe094
+++ b/net/irda/af_irda.c
Kyle McMartin 14fe094
@@ -61,7 +61,7 @@
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 #include <net/irda/af_irda.h>
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int irda_create(struct net *net, struct socket *sock, int protocol);
Kyle McMartin 14fe094
+static int irda_create(struct net *net, struct socket *sock, int protocol, int kern);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 static const struct proto_ops irda_stream_ops;
Kyle McMartin 14fe094
 static const struct proto_ops irda_seqpacket_ops;
Kyle McMartin 14fe094
@@ -839,7 +839,7 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	IRDA_DEBUG(2, "%s()\n", __func__);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-	err = irda_create(sock_net(sk), newsock, sk->sk_protocol);
Kyle McMartin 14fe094
+	err = irda_create(sock_net(sk), newsock, sk->sk_protocol, 0);
Kyle McMartin 14fe094
 	if (err)
Kyle McMartin 14fe094
 		return err;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
@@ -1062,7 +1062,8 @@ static struct proto irda_proto = {
Kyle McMartin 14fe094
  *    Create IrDA socket
Kyle McMartin 14fe094
  *
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
-static int irda_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int irda_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct irda_sock *self;
Kyle McMartin 14fe094
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
Kyle McMartin 14fe094
index bada1b9..efc05e1 100644
Kyle McMartin 14fe094
--- a/net/iucv/af_iucv.c
Kyle McMartin 14fe094
+++ b/net/iucv/af_iucv.c
Kyle McMartin 14fe094
@@ -482,7 +482,8 @@ static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio)
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 /* Create an IUCV socket */
Kyle McMartin 14fe094
-static int iucv_sock_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int iucv_sock_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			    int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/key/af_key.c b/net/key/af_key.c
Kyle McMartin 14fe094
index 4e98193..8c44f69 100644
Kyle McMartin 14fe094
--- a/net/key/af_key.c
Kyle McMartin 14fe094
+++ b/net/key/af_key.c
Kyle McMartin 14fe094
@@ -177,7 +177,8 @@ static struct proto key_proto = {
Kyle McMartin 14fe094
 	.obj_size = sizeof(struct pfkey_sock),
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int pfkey_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int pfkey_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct netns_pfkey *net_pfkey = net_generic(net, pfkey_net_id);
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
Kyle McMartin 14fe094
index 7aa4fd1..6f38b8a 100644
Kyle McMartin 14fe094
--- a/net/llc/af_llc.c
Kyle McMartin 14fe094
+++ b/net/llc/af_llc.c
Kyle McMartin 14fe094
@@ -140,14 +140,17 @@ static struct proto llc_proto = {
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 /**
Kyle McMartin 14fe094
  *	llc_ui_create - alloc and init a new llc_ui socket
Kyle McMartin 14fe094
+ *	@net: network namespace (must be default network)
Kyle McMartin 14fe094
  *	@sock: Socket to initialize and attach allocated sk to.
Kyle McMartin 14fe094
  *	@protocol: Unused.
Kyle McMartin 14fe094
+ *	@kern: on behalf of kernel or userspace
Kyle McMartin 14fe094
  *
Kyle McMartin 14fe094
  *	Allocate and initialize a new llc_ui socket, validate the user wants a
Kyle McMartin 14fe094
  *	socket type we have available.
Kyle McMartin 14fe094
  *	Returns 0 upon success, negative upon failure.
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
-static int llc_ui_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int llc_ui_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			 int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	int rc = -ESOCKTNOSUPPORT;
Kyle McMartin 14fe094
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
Kyle McMartin 14fe094
index 5a7dcdf..eadedb5 100644
Kyle McMartin 14fe094
--- a/net/netlink/af_netlink.c
Kyle McMartin 14fe094
+++ b/net/netlink/af_netlink.c
Kyle McMartin 14fe094
@@ -428,7 +428,8 @@ static int __netlink_create(struct net *net, struct socket *sock,
Kyle McMartin 14fe094
 	return 0;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int netlink_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int netlink_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			  int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct module *module = NULL;
Kyle McMartin 14fe094
 	struct mutex *cb_mutex;
Kyle McMartin 14fe094
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
Kyle McMartin 14fe094
index 7a83495..837e10b 100644
Kyle McMartin 14fe094
--- a/net/netrom/af_netrom.c
Kyle McMartin 14fe094
+++ b/net/netrom/af_netrom.c
Kyle McMartin 14fe094
@@ -425,7 +425,8 @@ static struct proto nr_proto = {
Kyle McMartin 14fe094
 	.obj_size = sizeof(struct nr_sock),
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int nr_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int nr_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		     int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct nr_sock *nr;
Kyle McMartin 14fe094
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
Kyle McMartin 14fe094
index 41866eb..e0e3f6c 100644
Kyle McMartin 14fe094
--- a/net/packet/af_packet.c
Kyle McMartin 14fe094
+++ b/net/packet/af_packet.c
Kyle McMartin 14fe094
@@ -1350,7 +1350,8 @@ static struct proto packet_proto = {
Kyle McMartin 14fe094
  *	Create a packet of type SOCK_PACKET.
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int packet_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int packet_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			 int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct packet_sock *po;
Kyle McMartin 14fe094
diff --git a/net/phonet/af_phonet.c b/net/phonet/af_phonet.c
Kyle McMartin 14fe094
index f60c0c2..61bcae9 100644
Kyle McMartin 14fe094
--- a/net/phonet/af_phonet.c
Kyle McMartin 14fe094
+++ b/net/phonet/af_phonet.c
Kyle McMartin 14fe094
@@ -60,7 +60,8 @@ static inline void phonet_proto_put(struct phonet_protocol *pp)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 /* protocol family functions */
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int pn_socket_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int pn_socket_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			    int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct pn_sock *pn;
Kyle McMartin 14fe094
diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c
Kyle McMartin 14fe094
index 98e0538..ca35aad 100644
Kyle McMartin 14fe094
--- a/net/rds/af_rds.c
Kyle McMartin 14fe094
+++ b/net/rds/af_rds.c
Kyle McMartin 14fe094
@@ -407,7 +407,8 @@ static int __rds_create(struct socket *sock, struct sock *sk, int protocol)
Kyle McMartin 14fe094
 	return 0;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int rds_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int rds_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
Kyle McMartin 14fe094
index 502cce7..f167ed0 100644
Kyle McMartin 14fe094
--- a/net/rose/af_rose.c
Kyle McMartin 14fe094
+++ b/net/rose/af_rose.c
Kyle McMartin 14fe094
@@ -512,7 +512,8 @@ static struct proto rose_proto = {
Kyle McMartin 14fe094
 	.obj_size = sizeof(struct rose_sock),
Kyle McMartin 14fe094
 };
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int rose_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int rose_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct rose_sock *rose;
Kyle McMartin 14fe094
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
Kyle McMartin 14fe094
index a86afce..b37e304 100644
Kyle McMartin 14fe094
--- a/net/rxrpc/af_rxrpc.c
Kyle McMartin 14fe094
+++ b/net/rxrpc/af_rxrpc.c
Kyle McMartin 14fe094
@@ -608,7 +608,8 @@ static unsigned int rxrpc_poll(struct file *file, struct socket *sock,
Kyle McMartin 14fe094
 /*
Kyle McMartin 14fe094
  * create an RxRPC socket
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
-static int rxrpc_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+			int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct rxrpc_sock *rx;
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
diff --git a/net/socket.c b/net/socket.c
Kyle McMartin 14fe094
index 7565536..55c6e4f 100644
Kyle McMartin 14fe094
--- a/net/socket.c
Kyle McMartin 14fe094
+++ b/net/socket.c
Kyle McMartin 14fe094
@@ -1216,7 +1216,7 @@ static int __sock_create(struct net *net, int family, int type, int protocol,
Kyle McMartin 14fe094
 	/* Now protected by module ref count */
Kyle McMartin 14fe094
 	rcu_read_unlock();
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-	err = pf->create(net, sock, protocol);
Kyle McMartin 14fe094
+	err = pf->create(net, sock, protocol, kern);
Kyle McMartin 14fe094
 	if (err < 0)
Kyle McMartin 14fe094
 		goto out_module_put;
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
Kyle McMartin 14fe094
index e6d9abf..d00c211 100644
Kyle McMartin 14fe094
--- a/net/tipc/socket.c
Kyle McMartin 14fe094
+++ b/net/tipc/socket.c
Kyle McMartin 14fe094
@@ -177,6 +177,7 @@ static void reject_rx_queue(struct sock *sk)
Kyle McMartin 14fe094
  * @net: network namespace (must be default network)
Kyle McMartin 14fe094
  * @sock: pre-allocated socket structure
Kyle McMartin 14fe094
  * @protocol: protocol indicator (must be 0)
Kyle McMartin 14fe094
+ * @kern: caused by kernel or by userspace?
Kyle McMartin 14fe094
  *
Kyle McMartin 14fe094
  * This routine creates additional data structures used by the TIPC socket,
Kyle McMartin 14fe094
  * initializes them, and links them together.
Kyle McMartin 14fe094
@@ -184,7 +185,8 @@ static void reject_rx_queue(struct sock *sk)
Kyle McMartin 14fe094
  * Returns 0 on success, errno otherwise
Kyle McMartin 14fe094
  */
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int tipc_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int tipc_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	const struct proto_ops *ops;
Kyle McMartin 14fe094
 	socket_state state;
Kyle McMartin 14fe094
@@ -1528,7 +1530,7 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
 	buf = skb_peek(&sk->sk_receive_queue);
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-	res = tipc_create(sock_net(sock->sk), new_sock, 0);
Kyle McMartin 14fe094
+	res = tipc_create(sock_net(sock->sk), new_sock, 0, 0);
Kyle McMartin 14fe094
 	if (!res) {
Kyle McMartin 14fe094
 		struct sock *new_sk = new_sock->sk;
Kyle McMartin 14fe094
 		struct tipc_sock *new_tsock = tipc_sk(new_sk);
Kyle McMartin 14fe094
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
Kyle McMartin 14fe094
index fc820cd..a1e3c85 100644
Kyle McMartin 14fe094
--- a/net/unix/af_unix.c
Kyle McMartin 14fe094
+++ b/net/unix/af_unix.c
Kyle McMartin 14fe094
@@ -621,7 +621,8 @@ out:
Kyle McMartin 14fe094
 	return sk;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int unix_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int unix_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		       int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	if (protocol && protocol != PF_UNIX)
Kyle McMartin 14fe094
 		return -EPROTONOSUPPORT;
Kyle McMartin 14fe094
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
Kyle McMartin 14fe094
index 7fa9c7a..62c47a4 100644
Kyle McMartin 14fe094
--- a/net/x25/af_x25.c
Kyle McMartin 14fe094
+++ b/net/x25/af_x25.c
Kyle McMartin 14fe094
@@ -501,7 +501,8 @@ out:
Kyle McMartin 14fe094
 	return sk;
Kyle McMartin 14fe094
 }
Kyle McMartin 14fe094
 
Kyle McMartin 14fe094
-static int x25_create(struct net *net, struct socket *sock, int protocol)
Kyle McMartin 14fe094
+static int x25_create(struct net *net, struct socket *sock, int protocol,
Kyle McMartin 14fe094
+		      int kern)
Kyle McMartin 14fe094
 {
Kyle McMartin 14fe094
 	struct sock *sk;
Kyle McMartin 14fe094
 	struct x25_sock *x25;