浏览代码

LibWeb: Stop leaking socket fds when sending them over IPC

The implicit constructor for IPC::File does not take ownership of the
file, which is surprising.
Andrew Kaster 1 年之前
父节点
当前提交
26ce8ad40f

+ 2 - 2
Userland/Libraries/LibWeb/HTML/MessagePort.cpp

@@ -80,12 +80,12 @@ WebIDL::ExceptionOr<void> MessagePort::transfer_steps(HTML::TransferDataHolder&
         // 2. Set dataHolder.[[RemotePort]] to remotePort.
         // 2. Set dataHolder.[[RemotePort]] to remotePort.
         auto fd = MUST(m_socket->release_fd());
         auto fd = MUST(m_socket->release_fd());
         m_socket = nullptr;
         m_socket = nullptr;
-        data_holder.fds.append(fd);
+        data_holder.fds.append(IPC::File(fd, IPC::File::CloseAfterSending));
         data_holder.data.append(IPC_FILE_TAG);
         data_holder.data.append(IPC_FILE_TAG);
 
 
         auto fd_passing_socket = MUST(m_fd_passing_socket->release_fd());
         auto fd_passing_socket = MUST(m_fd_passing_socket->release_fd());
         m_fd_passing_socket = nullptr;
         m_fd_passing_socket = nullptr;
-        data_holder.fds.append(fd_passing_socket);
+        data_holder.fds.append(IPC::File(fd_passing_socket, IPC::File::CloseAfterSending));
         data_holder.data.append(IPC_FILE_TAG);
         data_holder.data.append(IPC_FILE_TAG);
     }
     }
 
 

+ 2 - 2
Userland/Libraries/LibWeb/Worker/WebWorkerClient.cpp

@@ -22,8 +22,8 @@ WebWorkerClient::WebWorkerClient(NonnullOwnPtr<Core::LocalSocket> socket)
 WebView::SocketPair WebWorkerClient::dup_sockets()
 WebView::SocketPair WebWorkerClient::dup_sockets()
 {
 {
     WebView::SocketPair pair;
     WebView::SocketPair pair;
-    pair.socket = MUST(Core::System::dup(socket().fd().value()));
-    pair.fd_passing_socket = MUST(Core::System::dup(fd_passing_socket().fd().value()));
+    pair.socket = IPC::File(MUST(Core::System::dup(socket().fd().value())), IPC::File::CloseAfterSending);
+    pair.fd_passing_socket = IPC::File(MUST(Core::System::dup(fd_passing_socket().fd().value())), IPC::File::CloseAfterSending);
     return pair;
     return pair;
 }
 }