From 2926dfaa3fa8872822db8ec874b35d6b3107fb4e Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 24 Nov 2023 23:07:18 -0500 Subject: [PATCH] network/stack: Fix handling of MSG_TRUNC in socket_receive. This is a Linux extension (which at least FreeBSD has also adopted.) It's used in the Haiku port of libpcap (where it's a necessity) and wpa_supplicant (where it wasn't, and I removed it.) It seems that we've had it for quite some time. Fixes tcpdump following addition of flag checks. --- src/add-ons/kernel/network/stack/net_socket.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/network/stack/net_socket.cpp b/src/add-ons/kernel/network/stack/net_socket.cpp index a0f6e0d956..b046a402f6 100644 --- a/src/add-ons/kernel/network/stack/net_socket.cpp +++ b/src/add-ons/kernel/network/stack/net_socket.cpp @@ -1170,6 +1170,8 @@ socket_receive(net_socket* socket, msghdr* header, void* data, size_t length, if (socket->first_info->read_data_no_buffer != NULL) return socket_receive_no_buffer(socket, header, data, length, flags); + const int originalFlags = flags; + flags &= ~MSG_TRUNC; size_t totalLength = length; net_buffer* buffer; int i; @@ -1260,7 +1262,7 @@ socket_receive(net_socket* socket, msghdr* header, void* data, size_t length, if (header) header->msg_flags = MSG_TRUNC; - if (flags & MSG_TRUNC) + if ((originalFlags & MSG_TRUNC) != 0) return bytesReceived; }