summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 7b71f00..4084cb1 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -131,6 +131,9 @@ soalloc(waitok)
int waitok;
{
struct socket *so;
+#ifdef MAC
+ int error;
+#endif
int flag;
if (waitok == 1)
@@ -140,14 +143,19 @@ soalloc(waitok)
flag |= M_ZERO;
so = uma_zalloc(socket_zone, flag);
if (so) {
+#ifdef MAC
+ error = mac_init_socket(so, flag);
+ if (error != 0) {
+ uma_zfree(socket_zone, so);
+ so = NULL;
+ return so;
+ }
+#endif
/* XXX race condition for reentrant kernel */
so->so_gencnt = ++so_gencnt;
/* sx_init(&so->so_sxlock, "socket sxlock"); */
TAILQ_INIT(&so->so_aiojobq);
++numopensockets;
-#ifdef MAC
- mac_init_socket(so);
-#endif
}
return so;
}
OpenPOWER on IntegriCloud