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.
This commit is contained in:
Andrew Kaster 2024-04-16 13:26:00 -06:00 committed by Tim Flynn
parent 13abb1b2c7
commit 26ce8ad40f
Notes: sideshowbarker 2024-07-16 22:58:46 +09:00
2 changed files with 4 additions and 4 deletions

View file

@ -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);
} }

View file

@ -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.socket = IPC::File(MUST(Core::System::dup(socket().fd().value())), IPC::File::CloseAfterSending);
pair.fd_passing_socket = MUST(Core::System::dup(fd_passing_socket().fd().value())); pair.fd_passing_socket = IPC::File(MUST(Core::System::dup(fd_passing_socket().fd().value())), IPC::File::CloseAfterSending);
return pair; return pair;
} }