The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=2e16d37e275fa6bcd0494dbc48868a979404ce56
commit 2e16d37e275fa6bcd0494dbc48868a979404ce56 Author: Gleb Smirnoff <[email protected]> AuthorDate: 2026-09-07 18:51:22 +0000 Commit: Gleb Smirnoff <[email protected]> CommitDate: 2026-09-07 18:51:22 +0000 tests/netinet: test case for a jail with 2 addresses Check that wildcard bind(2) doesn't yet select a local address, and later connect(2) succeeds. --- tests/sys/netinet/udp_bindings.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/sys/netinet/udp_bindings.c b/tests/sys/netinet/udp_bindings.c index b05967d4b080..8470318aafef 100644 --- a/tests/sys/netinet/udp_bindings.c +++ b/tests/sys/netinet/udp_bindings.c @@ -215,6 +215,36 @@ ATF_TC_BODY(gethostname_jailed, tc) close(s); } +ATF_TC_WITHOUT_HEAD(connect_bound_socket_from_2address_jail); +ATF_TC_BODY(connect_bound_socket_from_2address_jail, tc) +{ + struct in_addr addrs[] = { + { htonl(0xc0000202) }, { htonl(0xc0000203) } + }; + struct jail jconf = { + .version = JAIL_API_VERSION, + .path = __DECONST(char *, "/"), + .hostname = __DECONST(char *,"test"), + .ip4s = nitems(addrs), + .ip4 = addrs, + }; + struct sockaddr_in sin = { .sin_family = AF_INET }; + socklen_t slen = sizeof(sin); + int s; + + ATF_REQUIRE(jail(&jconf) > 0); + ATF_REQUIRE((s = socket(PF_INET, SOCK_DGRAM, 0)) > 0); + ATF_REQUIRE(bind(s, (struct sockaddr *)&sin, sizeof(sin)) == 0); + ATF_REQUIRE(getsockname(s, (struct sockaddr *)&sin, &slen) == 0); + ATF_REQUIRE_MSG(sin.sin_addr.s_addr == INADDR_ANY && sin.sin_port != 0, + "jailed unconnected socket name %s:%u", inet_ntoa(sin.sin_addr), + ntohs(sin.sin_port)); + sin.sin_addr.s_addr = htonl(0xc0000204); + sin.sin_port = htons(6666); + ATF_REQUIRE(connect(s, (struct sockaddr *)&sin, sizeof(sin)) == 0); + close(s); +} + /* * See bug 274009. */ @@ -243,6 +273,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, v4mapped); ATF_TP_ADD_TC(tp, gethostname); ATF_TP_ADD_TC(tp, gethostname_jailed); + ATF_TP_ADD_TC(tp, connect_bound_socket_from_2address_jail); ATF_TP_ADD_TC(tp, IP_SENDSRCADDR); return (atf_no_error());
