From 3fc75088a219089204ed9256e7559e81f1e058f0 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 28 May 2021 00:49:53 +0200 Subject: [PATCH] Kernel: Release packet buffer in TCPSocket::send_tcp_packet Previously we wouldn't release the buffer back to the network adapter in all cases. While this didn't leak the buffer it would cause the buffer to not be reused for other packets. --- Kernel/Net/TCPSocket.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index 076e2d2be1..ae3767f97e 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -220,8 +220,10 @@ KResult TCPSocket::send_tcp_packet(u16 flags, const UserOrKernelBuffer* payload, tcp_packet.set_ack_number(m_ack_number); } - if (payload && !payload->read(tcp_packet.payload(), payload_size)) + if (payload && !payload->read(tcp_packet.payload(), payload_size)) { + routing_decision.adapter->release_packet_buffer(*packet); return EFAULT; + } if (flags & TCPFlags::SYN) { ++m_sequence_number; @@ -247,6 +249,8 @@ KResult TCPSocket::send_tcp_packet(u16 flags, const UserOrKernelBuffer* payload, m_not_acked.append({ m_sequence_number, move(packet), ipv4_payload_offset, *routing_decision.adapter }); m_not_acked_size += payload_size; enqueue_for_retransmit(); + } else { + routing_decision.adapter->release_packet_buffer(*packet); } return KSuccess;