From nobody Wed Jul 1 05:48:45 2026 X-Original-To: dev-commits-src-main@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 4gqpwY5Xd1z6hWWr for ; Wed, 01 Jul 2026 05:48:45 +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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gqpwY4pDzz45gJ for ; Wed, 01 Jul 2026 05:48:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782884925; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BJafVCLufu3Vzimnxj0bX9b3/uB5cFx6PdEzPjjB9d8=; b=l9wApgAHOXLBN61G2PVNjqs4xbo991r0AYOfxYyKIcPyp1SaO3FQrQhfHCjIFVVIC9PRWO o+JTG621h3MpH0vpgYbsTOSBrpAfgBZqG7pBelcllIRXEzYRgmgOkj5TtGkVygY1FMIg05 lh1JhZPAhOAFJ8JsmF2TNPI0hA7e6c4/rtrktyBPlkLmBhgu+4jXLdHBbRHQ1F9i4Oa2Eo +3u1DiAgcxazjEp1SGGKvI4pI1jBmCe3ema8Lwr0AEro9A+QIrFbg2XQuTngPBB4Mev5Wi zuO9I2ijGMfyl6VliRuyt4DS9sdObSLuF0tfYgBCvdwYv09E68xEhqIJBDQvMQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782884925; a=rsa-sha256; cv=none; b=sMvTwPOrdUIz+DZPIWUh2oqv2uz/gM0JA0Avcm4sc2iX/n5WLU3lTNH+10RWWFvleB5Lmt Z+2nIEMt0++moRSYBmSmQ/9fsSPKnzn+rG2FNrxP8IFjPkUwMu01xmnxcgGFvVwEVpdRFV cTGUSbqr8n2oNIldm60CwwBPr5j+oMh77W4bWlfuqQZeJKj6gJ1OgYjIendxb/BADkXRSN DA+hfF9X0v0Qxli517L3T+rHuR33bdJvIBA6eWlFeMhQcitsCVIyYm4xy3Bzg4nFP3wKZu 7kwWZx/F/4TrG6NpZZhx8wC7Dg88WSUtULSi8/IyMSDh2R6hNyN3ZNLNRGUuXg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782884925; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BJafVCLufu3Vzimnxj0bX9b3/uB5cFx6PdEzPjjB9d8=; b=EyAbsPlxBDS7lNNEqVAJesaUBbCeHd/ZYQwbAboFjTNZ+KQk8mf7dT5AvzM6feZPtA6mO5 k6cTjZys0iapNtB6TAs5LgIzo4UYn2FQ+bsQ9OyPGRwjMEnOK8/4lUtWa7XIVfSn34VWpE g6Reu1/pK+7PQieVNHMpVvHf1arSbFLgkRIdVutABPHLYp1TA9WNq5sFT6OUIiO/jZZjzc YWis+KGsFY2WnL3B5fXRfAEv5rVDBhezGxfAFMowODXXB4CVqIHiUS4yrqQizGBoniIWyr Y9/mVebEdsfBHsoKy9TW1rxDfJxioE7bYPak1LNuSIiGCUgyyLC1gyARssc0Tw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gqpwY3slpz1GDL for ; Wed, 01 Jul 2026 05:48:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c6c4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Jul 2026 05:48:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 57cc01057bb2 - main - tests/socket_afinet: make child_bind() return a full spectre of results List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: 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: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 57cc01057bb21fec37fa4fb7416b4a1f29a211c0 Auto-Submitted: auto-generated Date: Wed, 01 Jul 2026 05:48:45 +0000 Message-Id: <6a44aa3d.1c6c4.4e412999@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=57cc01057bb21fec37fa4fb7416b4a1f29a211c0 commit 57cc01057bb21fec37fa4fb7416b4a1f29a211c0 Author: Gleb Smirnoff AuthorDate: 2026-07-01 05:47:47 +0000 Commit: Gleb Smirnoff CommitDate: 2026-07-01 05:47:47 +0000 tests/socket_afinet: make child_bind() return a full spectre of results There is no functional change for existing tests, but allows to write a test that would expect an immediate success of bind(2). --- tests/sys/netinet/socket_afinet.c | 53 +++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/tests/sys/netinet/socket_afinet.c b/tests/sys/netinet/socket_afinet.c index 31c98f9bfdb1..ddd4f9a6f5da 100644 --- a/tests/sys/netinet/socket_afinet.c +++ b/tests/sys/netinet/socket_afinet.c @@ -331,9 +331,20 @@ ATF_TC_BODY(socket_afinet_bindany, tc) * Bind a socket to the specified address, optionally dropping privileges and * setting one of the SO_REUSE* options first. * - * Returns true if the bind succeeded, and false if it failed with EADDRINUSE. + * Expected returns for different test case scenarios are: 1) successful + * immediate bind(2), successful bind(2) after setting specified SO_REUSE* + * socket option, and bind(2) failed with EADDRINUSE. */ -static bool +static enum bind_res { + BIND_FAILED = 0, + SETEUID_FAIL = 1, + SOCKET_FAIL = 2, + BIND_INSTANT_SUCCESS = 3, + BIND_BADERR1 = 4, + SETSOCKOPT_FAIL = 5, + BIND_REUSE_SUCCESS = 6, + BIND_BADERR2 = 7, +} child_bind(const atf_tc_t *tc, int type, struct sockaddr *sa, int opt, bool unpriv) { @@ -358,45 +369,43 @@ child_bind(const atf_tc_t *tc, int type, struct sockaddr *sa, int opt, passwd = getpwnam(user); if (seteuid(passwd->pw_uid) != 0) - _exit(1); + _exit(SETEUID_FAIL); } s = socket(sa->sa_family, type, 0); if (s < 0) - _exit(2); + _exit(SOCKET_FAIL); if (bind(s, sa, sa->sa_len) == 0) - _exit(3); + _exit(BIND_INSTANT_SUCCESS); if (errno != EADDRINUSE) - _exit(4); + _exit(BIND_BADERR1); if (opt != 0) { if (setsockopt(s, SOL_SOCKET, opt, &(int){1}, sizeof(int)) != 0) - _exit(5); + _exit(SETSOCKOPT_FAIL); } if (bind(s, sa, sa->sa_len) == 0) - _exit(6); + _exit(BIND_REUSE_SUCCESS); if (errno != EADDRINUSE) - _exit(7); - _exit(0); + _exit(BIND_BADERR1); + _exit(BIND_FAILED); } else { int status; ATF_REQUIRE_EQ(waitpid(child, &status, 0), child); ATF_REQUIRE(WIFEXITED(status)); status = WEXITSTATUS(status); - ATF_REQUIRE_MSG(status == 0 || status == 6, - "child exited with %d", status); - return (status == 6); + return (status); } } -static bool +static enum bind_res child_bind_priv(const atf_tc_t *tc, int type, struct sockaddr *sa, int opt) { return (child_bind(tc, type, sa, opt, false)); } -static bool +static enum bind_res child_bind_unpriv(const atf_tc_t *tc, int type, struct sockaddr *sa, int opt) { return (child_bind(tc, type, sa, opt, true)); @@ -453,7 +462,7 @@ multibind_test(const atf_tc_t *tc, int domain, int type) int opts[4] = { 0, SO_REUSEADDR, SO_REUSEPORT, SO_REUSEPORT_LB }; int s; bool flags[2] = { false, true }; - bool res; + enum bind_res res; for (size_t flagi = 0; flagi < nitems(flags); flagi++) { for (size_t opti = 0; opti < nitems(opts); opti++) { @@ -472,9 +481,9 @@ multibind_test(const atf_tc_t *tc, int domain, int type) */ if (opts[opti] != 0 && opts[opti] != SO_REUSEADDR && opti == optj) - ATF_REQUIRE(res); + ATF_REQUIRE(res == BIND_REUSE_SUCCESS); else - ATF_REQUIRE(!res); + ATF_REQUIRE(res == BIND_FAILED); res = child_bind_unpriv(tc, type, (struct sockaddr *)&ss, opt); @@ -482,7 +491,7 @@ multibind_test(const atf_tc_t *tc, int domain, int type) * Multi-binding is only allowed when both * sockets have the same owner. */ - ATF_REQUIRE(!res); + ATF_REQUIRE(res == BIND_FAILED); } ATF_REQUIRE(close(s) == 0); } @@ -515,7 +524,7 @@ bind_connected_port_test(const atf_tc_t *tc, int domain) struct sockaddr *sinp; socklen_t slen; int error, sd[3], tmp; - bool res; + enum bind_res res; /* * Create a connected socket pair. @@ -560,9 +569,9 @@ bind_connected_port_test(const atf_tc_t *tc, int domain) /* bind() should succeed even from an unprivileged user. */ res = child_bind_priv(tc, SOCK_STREAM, sinp, SO_REUSEADDR); - ATF_REQUIRE(res); + ATF_REQUIRE(res == BIND_REUSE_SUCCESS); res = child_bind_unpriv(tc, SOCK_STREAM, sinp, SO_REUSEADDR); - ATF_REQUIRE(res); + ATF_REQUIRE(res == BIND_REUSE_SUCCESS); } /*