summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/include/sys/socket.h2
-rw-r--r--sys/kern/kern_socket.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/sys/include/sys/socket.h b/sys/include/sys/socket.h
index 5ce1ec6..a69057b 100644
--- a/sys/include/sys/socket.h
+++ b/sys/include/sys/socket.h
@@ -36,6 +36,7 @@
#include <sys/uio.h>
#if defined(_KERNEL)
#include <sys/types.h>
+#include <sys/proc.h>
#include <sys/syscall.h>
#include <sys/mutex.h>
#else
@@ -154,6 +155,7 @@ struct ksocket {
struct sockaddr sockaddr;
struct sockaddr_un un;
};
+ struct proc *owner;
struct cmsg_list cmsg_list;
struct sockbuf buf;
struct mutex *mtx;
diff --git a/sys/kern/kern_socket.c b/sys/kern/kern_socket.c
index 77041cd..91a2347 100644
--- a/sys/kern/kern_socket.c
+++ b/sys/kern/kern_socket.c
@@ -30,6 +30,7 @@
#include <sys/socket.h>
#include <sys/sio.h>
#include <sys/systm.h>
+#include <sys/proc.h>
#include <sys/errno.h>
#include <sys/syslog.h>
#include <sys/filedesc.h>
@@ -322,6 +323,7 @@ fail:
int
bind(int sockfd, const struct sockaddr *addr, socklen_t len)
{
+ struct proc *td;
struct ksocket *ksock;
struct cmsg_list *clp;
int error;
@@ -337,6 +339,10 @@ bind(int sockfd, const struct sockaddr *addr, socklen_t len)
return -ENOMEM;
}
+ /* Mark ourselves as the owner */
+ td = this_td();
+ ksock->owner = td;
+
/* Initialize the cmsg list queue */
clp = &ksock->cmsg_list;
TAILQ_INIT(&clp->list);