From 9ae02d4c926d332747ce574ab35cba4c062b862d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 12 Feb 2021 23:45:14 +0100 Subject: [PATCH] Kernel: Don't use a VLA for outgoing UDP packets We had the same exact problem as da981578e31 but for UDP sockets. --- Kernel/Net/UDPSocket.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Kernel/Net/UDPSocket.cpp b/Kernel/Net/UDPSocket.cpp index f156c111c0..e40d6692d1 100644 --- a/Kernel/Net/UDPSocket.cpp +++ b/Kernel/Net/UDPSocket.cpp @@ -96,18 +96,15 @@ KResultOr UDPSocket::protocol_send(const UserOrKernelBuffer& data, size_ if (routing_decision.is_zero()) return EHOSTUNREACH; const size_t buffer_size = sizeof(UDPPacket) + data_length; - - alignas(UDPPacket) u8 buffer[buffer_size]; - new (buffer) UDPPacket; - - auto& udp_packet = *reinterpret_cast(buffer); + auto buffer = ByteBuffer::create_zeroed(buffer_size); + auto& udp_packet = *reinterpret_cast(buffer.data()); udp_packet.set_source_port(local_port()); udp_packet.set_destination_port(peer_port()); udp_packet.set_length(buffer_size); if (!data.read(udp_packet.payload(), data_length)) return EFAULT; - auto result = routing_decision.adapter->send_ipv4(routing_decision.next_hop, peer_address(), IPv4Protocol::UDP, UserOrKernelBuffer::for_kernel_buffer(buffer), buffer_size, ttl()); + auto result = routing_decision.adapter->send_ipv4(routing_decision.next_hop, peer_address(), IPv4Protocol::UDP, UserOrKernelBuffer::for_kernel_buffer(buffer.data()), buffer_size, ttl()); if (result.is_error()) return result; return data_length;