瀏覽代碼

Kernel: Remove SmapDisabler in sys$connect()

Andreas Kling 5 年之前
父節點
當前提交
b0623a0c58
共有 1 個文件被更改,包括 8 次插入4 次删除
  1. 8 4
      Kernel/Process.cpp

+ 8 - 4
Kernel/Process.cpp

@@ -3280,9 +3280,9 @@ int Process::sys$accept(int accepting_socket_fd, sockaddr* user_address, socklen
     return accepted_socket_fd;
     return accepted_socket_fd;
 }
 }
 
 
-int Process::sys$connect(int sockfd, const sockaddr* address, socklen_t address_size)
+int Process::sys$connect(int sockfd, const sockaddr* user_address, socklen_t user_address_size)
 {
 {
-    if (!validate_read(address, address_size))
+    if (!validate_read(user_address, user_address_size))
         return -EFAULT;
         return -EFAULT;
     int fd = alloc_fd();
     int fd = alloc_fd();
     if (fd < 0)
     if (fd < 0)
@@ -3295,8 +3295,12 @@ int Process::sys$connect(int sockfd, const sockaddr* address, socklen_t address_
 
 
     auto& socket = *description->socket();
     auto& socket = *description->socket();
     REQUIRE_PROMISE_FOR_SOCKET_DOMAIN(socket.domain());
     REQUIRE_PROMISE_FOR_SOCKET_DOMAIN(socket.domain());
-    SmapDisabler disabler;
-    return socket.connect(*description, address, address_size, description->is_blocking() ? ShouldBlock::Yes : ShouldBlock::No);
+
+    u8 address[sizeof(sockaddr_un)];
+    size_t address_size = min(sizeof(address), static_cast<size_t>(user_address_size));
+    copy_from_user(address, user_address, address_size);
+
+    return socket.connect(*description, (const sockaddr*)address, address_size, description->is_blocking() ? ShouldBlock::Yes : ShouldBlock::No);
 }
 }
 
 
 int Process::sys$shutdown(int sockfd, int how)
 int Process::sys$shutdown(int sockfd, int how)