From nobody Wed Oct 28 15:25:27 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jFB592KH9z6xdFf for ; Wed, 28 Oct 2026 15:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jFB584m7cz4jTK for ; Wed, 28 Oct 2026 15:25:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793201132; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mogM65Ht/9y8c4Dqf13VPE/tch7bPUi+je/oDLxmEeY=; b=L+FwESqkjerqH4KMi1t9Lj4THE18cE2qkXe3ggEnzVhwPuFWjfQ0UmSFLDI/XWhc7f2/vZ /RD/7zzmXmv9x8O4Kqlk841Iy3+Xju8ilYNRA1Xswh8AGcEtOYbNExqQBNdDY+n4Dfyhfj O1YN8ZbcA9fUOOvZ7hZPbxxJ+nte34b0r9m2zyOJW2Jf7aAwAeTZ/IpK1EhyG1doidMsWU /tngt8EjnvCPPmOnMl1zkfxfjol52X1PkYMrYPNwN5pp1kS2/Bp0TAj6Sr1+tZ7t9XS2KP 4CnjZMw8a5xXrLKj3O37iXKobJB/pUe/AkBgNgZr95KAua8VYMs/YQFSXiZHJg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793201132; b=gXPQy5FD415sFVNjf/ye+7k/vleJlXpBiyDEArYxz16Yb7UHf5/VaeH9R1sBJqOzbGHJi9 shUBdvz7xbxK7GNyV5RS51tBvTrSYlSQPKCLdDubXNO6AXjtDT3tJpeGZCPTwVGM8bLizJ zuvkf+KPZJubaGchpXsy1EgQyHXdMQj+M4+BKOr9kOho199e2TZ08DkhkyzmErRHozOcAU PRzmEkF7iPwFCA1DeZNjPD4kq9jiTA96XbuvashbwC7nQSI8/wgS0NciDmkaqeUu8ra2oU U15OlZzRKGc2XMCvjlYgAwOnIUOIABQofeTbnHBFWW8U9CroSxPScgxqK4ikgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793201132; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mogM65Ht/9y8c4Dqf13VPE/tch7bPUi+je/oDLxmEeY=; b=Rb2ND9ArZdpTwXhAjbU0PZT2BQSBkdgt0h0HTkpJvNJDUDqH0nBjeDiObKyx75w9pt8nc/ 4xQa6pI4eX9JFJ1syVDMT/LGxGlzWNly1BahSSt+rH763wZnUeDy+/3tXTnE2pIbUsAhr2 RyAZBZtghUBQTt04RXgUh9Fojx9ircw25aKV3qSJjpcPFa+/depEaqg1c5eK9H0szq1M0P 8Ia80fbpmgKK0CmpmhM1H8gApNAyP8+LJiGUW3R+IrPDSctnZpkIdLPE3kIynHM/DE1pFj hp/pahmQoJTD1KGwqcPFWwvdny49pcAY37Aae5K8RwWwbeVXaZSfB7yf0Lirlw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jFB584QqTz1Cyw for ; Wed, 28 Oct 2026 15:25:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 240c3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 28 Oct 2026 15:25:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Vladimir Grebenshchikov From: Pouria Mousavizadeh Tehrani Subject: git: afeb885b4ae4 - main - linux: Preserve partial results from recvmmsg() List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: afeb885b4ae41357a648f547d3835a5e0dcde81e Auto-Submitted: auto-generated Date: Wed, 28 Oct 2026 15:25:27 +0000 Message-Id: <6ae213e7.240c3.7ee8d060@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=afeb885b4ae41357a648f547d3835a5e0dcde81e commit afeb885b4ae41357a648f547d3835a5e0dcde81e Author: Vladimir Grebenshchikov AuthorDate: 2026-10-21 22:14:33 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-10-28 15:15:51 +0000 linux: Preserve partial results from recvmmsg() linux_recvmmsg_common() currently returns the error from the next recvmsg() attempt even when one or more datagrams have already been received and copied to userspace. This is especially visible with non-blocking UDP sockets. After receiving the first datagram, the next iteration commonly returns EAGAIN. The syscall then reports EAGAIN instead of the number of messages already stored in the mmsghdr array, causing applications to discard successfully received packets. This differs from Linux recvmmsg() semantics, where an error encountered after receiving at least one message is deferred and the number of received messages is returned. Return the accumulated datagram count and clear the error whenever at least one message was received. Preserve the original error when no messages were received. This fixes packet loss in applications such as wireguard-go, whose non-blocking receive path uses recvmmsg() for batches of UDP packets. In the observed failure, WireGuard handshake responses reached the UDP socket, but a subsequent EAGAIN caused recvmmsg() to hide the received response and the handshake timed out. Reviewed by: kib Pull Request: https://github.com/freebsd/freebsd-src/pull/2484 Differential Revision: https://reviews.freebsd.org/D60961 --- sys/compat/linux/linux_socket.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 9c94079e0e0f..f2ed584d1f4c 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -2053,8 +2053,10 @@ linux_recvmmsg_common(struct thread *td, l_int s, struct l_mmsghdr *msg, if (bsd_msg.msg_flags & MSG_OOB) break; } - if (error == 0) + if (datagrams != 0) { td->td_retval[0] = datagrams; + error = 0; + } fdrop(fp, td); return (error); }