From 5d74bfa5f719b872771dd82035be73504906cec7 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 30 Aug 2024 22:59:57 -0300 Subject: [PATCH] socket: pass cred to bind and setopt --- kernel-src/include/kernel/sock.h | 4 ++-- kernel-src/io/net/localsocket.c | 2 +- kernel-src/io/net/tcp.c | 4 ++-- kernel-src/io/net/udp.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel-src/include/kernel/sock.h b/kernel-src/include/kernel/sock.h index 41c1eaaf..95ff4806 100644 --- a/kernel-src/include/kernel/sock.h +++ b/kernel-src/include/kernel/sock.h @@ -33,7 +33,7 @@ typedef struct { #define SOCKET_RECV_FLAGS_WAITALL 0x4000000000000000l #define SOCKET_SEND_FLAGS_NOSIGNAL 0x8000000000000000l typedef struct socketops_t { - int (*bind)(socket_t *socket, sockaddr_t *addr); + int (*bind)(socket_t *socket, sockaddr_t *addr, cred_t *cred); int (*send)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *sendcount); int (*recv)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *recvcount); int (*poll)(socket_t *socket, polldata_t *data, int events); @@ -44,7 +44,7 @@ typedef struct socketops_t { int (*getpeername)(socket_t *socket, sockaddr_t *addr); size_t (*datacount)(socket_t *socket); void (*destroy)(socket_t *socket); - int (*setopt)(socket_t *socket, int optname, void *buffer, size_t len); + int (*setopt)(socket_t *socket, int optname, void *buffer, size_t len, cred_t *cred); } socketops_t; typedef struct { diff --git a/kernel-src/io/net/localsocket.c b/kernel-src/io/net/localsocket.c index d4cf722f..a405ed8b 100644 --- a/kernel-src/io/net/localsocket.c +++ b/kernel-src/io/net/localsocket.c @@ -668,7 +668,7 @@ static void localsock_destroy(socket_t *socket) { free(socket); } -static int localsock_bind(socket_t *socket, sockaddr_t *addr) { +static int localsock_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) { MUTEX_ACQUIRE(&socket->mutex, false); int error; char *path = NULL; diff --git a/kernel-src/io/net/tcp.c b/kernel-src/io/net/tcp.c index 214531c9..08f7229d 100644 --- a/kernel-src/io/net/tcp.c +++ b/kernel-src/io/net/tcp.c @@ -1412,7 +1412,7 @@ static int tcp_poll(socket_t *socket, polldata_t *data, int events) { return revents; } -static int tcp_bind(socket_t *socket, sockaddr_t *addr) { +static int tcp_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) { tcpsocket_t *tcpsocket = (tcpsocket_t *)socket; if (addr->ipv4addr.addr != 0) { printf("tcp: bind tried to bind to non zero address %x\n", addr->ipv4addr.addr); @@ -1787,7 +1787,7 @@ static int tcp_getpeername(socket_t *socket, sockaddr_t *addr) { } // called with socket locked -static int tcp_setopt(socket_t *socket, int optname, void *buffer, size_t len) { +static int tcp_setopt(socket_t *socket, int optname, void *buffer, size_t len, cred_t *cred) { tcpsocket_t *tcpsocket = (tcpsocket_t *)socket; tcb_t *tcb = tcpsocket->tcb; diff --git a/kernel-src/io/net/udp.c b/kernel-src/io/net/udp.c index 4d00d3e3..370a6e90 100644 --- a/kernel-src/io/net/udp.c +++ b/kernel-src/io/net/udp.c @@ -126,7 +126,7 @@ void udp_process(netdev_t *netdev, void *buffer, uint32_t peer) { __atomic_sub_fetch(&socket->packetsprocessing, 1, __ATOMIC_SEQ_CST); } -static int udp_bind(socket_t *socket, sockaddr_t *addr) { +static int udp_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) { int e; MUTEX_ACQUIRE(&socket->mutex, false); if (socket->state != SOCKET_STATE_UNBOUND) {