Ver Fonte

Kernel: Use Userspace<T> for the bind syscall, and implementation

Brian Gianforcaro há 4 anos atrás
pai
commit
02660b5d60

+ 1 - 1
Kernel/Net/IPv4Socket.cpp

@@ -98,7 +98,7 @@ void IPv4Socket::get_peer_address(sockaddr* address, socklen_t* address_size)
     *address_size = sizeof(sockaddr_in);
 }
 
-KResult IPv4Socket::bind(const sockaddr* user_address, socklen_t address_size)
+KResult IPv4Socket::bind(Userspace<const sockaddr*> user_address, socklen_t address_size)
 {
     ASSERT(setup_state() == SetupState::Unstarted);
     if (address_size != sizeof(sockaddr_in))

+ 1 - 1
Kernel/Net/IPv4Socket.h

@@ -49,7 +49,7 @@ public:
     static Lockable<HashTable<IPv4Socket*>>& all_sockets();
 
     virtual KResult close() override;
-    virtual KResult bind(const sockaddr*, socklen_t) override;
+    virtual KResult bind(Userspace<const sockaddr*>, socklen_t) override;
     virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
     virtual KResult listen(size_t) override;
     virtual void get_local_address(sockaddr*, socklen_t*) override;

+ 1 - 1
Kernel/Net/LocalSocket.cpp

@@ -91,7 +91,7 @@ void LocalSocket::get_peer_address(sockaddr* address, socklen_t* address_size)
     get_local_address(address, address_size);
 }
 
-KResult LocalSocket::bind(const sockaddr* user_address, socklen_t address_size)
+KResult LocalSocket::bind(Userspace<const sockaddr*> user_address, socklen_t address_size)
 {
     ASSERT(setup_state() == SetupState::Unstarted);
     if (address_size != sizeof(sockaddr_un))

+ 1 - 1
Kernel/Net/LocalSocket.h

@@ -51,7 +51,7 @@ public:
     String absolute_path(const FileDescription& description) const override;
 
     // ^Socket
-    virtual KResult bind(const sockaddr*, socklen_t) override;
+    virtual KResult bind(Userspace<const sockaddr*>, socklen_t) override;
     virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
     virtual KResult listen(size_t) override;
     virtual void get_local_address(sockaddr*, socklen_t*) override;

+ 1 - 1
Kernel/Net/Socket.h

@@ -98,7 +98,7 @@ public:
 
     KResult shutdown(int how);
 
-    virtual KResult bind(const sockaddr*, socklen_t) = 0;
+    virtual KResult bind(Userspace<const sockaddr*>, socklen_t) = 0;
     virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock) = 0;
     virtual KResult listen(size_t) = 0;
     virtual void get_local_address(sockaddr*, socklen_t*) = 0;

+ 1 - 1
Kernel/Process.h

@@ -291,7 +291,7 @@ public:
     int sys$chown(Userspace<const Syscall::SC_chown_params*>);
     int sys$fchown(int fd, uid_t, gid_t);
     int sys$socket(int domain, int type, int protocol);
-    int sys$bind(int sockfd, const sockaddr* addr, socklen_t);
+    int sys$bind(int sockfd, Userspace<const sockaddr*> addr, socklen_t);
     int sys$listen(int sockfd, int backlog);
     int sys$accept(int sockfd, sockaddr*, socklen_t*);
     int sys$connect(int sockfd, const sockaddr*, socklen_t);

+ 1 - 1
Kernel/Syscalls/socket.cpp

@@ -63,7 +63,7 @@ int Process::sys$socket(int domain, int type, int protocol)
     return fd;
 }
 
-int Process::sys$bind(int sockfd, const sockaddr* address, socklen_t address_length)
+int Process::sys$bind(int sockfd, Userspace<const sockaddr*> address, socklen_t address_length)
 {
     if (!validate_read(address, address_length))
         return -EFAULT;