diff options
author | Ian Moffett <ian@osmora.org> | 2025-07-31 15:44:41 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-07-31 15:55:21 -0400 |
commit | 5ae5b4259d3d4894c3f5acc5f0691869a3bd219f (patch) | |
tree | d9148523db395c2e424187fa14fb5c38c8e86aee | |
parent | 8185d0507429f0c6e2b90c2cc6c8f413ebf49aad (diff) |
kernel: socket: Keep track of socket owner
Keep track of the process that created a socket.
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/include/sys/socket.h | 2 | ||||
-rw-r--r-- | sys/kern/kern_socket.c | 6 |
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); |