From nobody Wed Feb 28 22:33:09 2024 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 4TlTdf0JF6z5CXxS; Wed, 28 Feb 2024 22:33:10 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TlTdd587Wz4pcw; Wed, 28 Feb 2024 22:33:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1709159589; 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=g1Bezhb2nZzRt//T/mVdRvm71n5oOTrM0jXVp97LVqQ=; b=g5ajyoUmFuS/7AdMrhKQX7xwykk7hXdqT4cZPwJtAq8y7KXt5hxOdDiSLy3vaaW2M+6RWe O2IVYQ+LgJEkQiRkfIjrQCvjjq7wqfyJ9tSWR+uh/LztoWPdEXOFuR5dd8sRtvrVPF3vb4 QfW/A3lxhLySFsleqy+RyHEhMgPVx8D9JTNN6ogfowlIqppOI8WAbwN4FJVof1TdgsE5iQ jYVoHhGCp4R9fOeqJBAMlQz+a+tNcC3dGE3OwaxI2twv4kPYLw1NDjPp2IM8TvGpbhPr/i 0LMQyoaFFJdnqEyEjsXNF4oMJm7TKFOUlrEQidvEjmxe9ucoWQrMPVbkQJjsQA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1709159589; a=rsa-sha256; cv=none; b=GUhlSsUQXiuvth2F6hEW/9SVcgn1BDJ5xcge8oM9ZBjevldPYOMzGPVr7M2cWReq71zLP3 WeunpytxbameM253Efwt6e8fpk0SIOTxa/Eis0Cj6d+4iMx4ULkIRzTYZmng0RmJCOcACQ ybBw39bL8EaiJ1vaH92IwbH0y/MM6xnZMHouRVqK37hevQ9erOoXOdSeB5oeBXDriNrJ1i KF4IIas9itFrR12k9mktv4dGhIIc4lWxihGN810XksdxcMRjNmuFnJH2PFEREN6uQslFh8 SWte5CMoi5+QiYDWewMDmxxxciYWEIh3nyP7DaldTHAczQstU4dpUVwUGx1ekw== 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=1709159589; 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=g1Bezhb2nZzRt//T/mVdRvm71n5oOTrM0jXVp97LVqQ=; b=TW9qDDui1ua03YfgF6ysVTWIkHUwQ8XC656EDS+KMWJbg3jrCUkuwwUNIJjgPm1M/tmAgq tYXJ23B0HvEFYIyni0HNwXtFRlaMQ2ff6c488WbNpBd6ZMTFnJ/CyQHbZ8Q79oKliaERzx fVkC17MmdrxOUQwO2G0sJVXiEZqvP1zm4d93DBciJresGliSW0DgrfSbanSDY0DXhdOyOj LwYvsq4h+hW4OFA7lyrtNVTQwxWy8EYldekwQsmMu6hMlcnSXWBunD8VwodywqllLbE1ol ItN2EU4dSOdFx2iN+EMI4xPTFAnRRDEL3uvh3qUr7S1kCs+9wVtDsIoptlyo/Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TlTdd4jcyzGDq; Wed, 28 Feb 2024 22:33:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41SMX9xx010953; Wed, 28 Feb 2024 22:33:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41SMX9Mc010951; Wed, 28 Feb 2024 22:33:09 GMT (envelope-from git) Date: Wed, 28 Feb 2024 22:33:09 GMT Message-Id: <202402282233.41SMX9Mc010951@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 1f46c32c1f3d - main - tests/unix_seqpacket: provide function that returns bound & listening sock 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org 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: 1f46c32c1f3d0ea2a4c748a24aad06329cfb5f5a Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=1f46c32c1f3d0ea2a4c748a24aad06329cfb5f5a commit 1f46c32c1f3d0ea2a4c748a24aad06329cfb5f5a Author: Gleb Smirnoff AuthorDate: 2024-02-28 22:32:46 +0000 Commit: Gleb Smirnoff CommitDate: 2024-02-28 22:32:46 +0000 tests/unix_seqpacket: provide function that returns bound & listening sock Use the function in mk_pair_of_sockets(), and in four existing tests - 'listen_bound', 'connect', 'shutdown_send' and 'shutdown_send_sigpipe'. While here make mk_pair_of_sockets() return pointer to sockaddr_un instead of path. This also fixes bug of returning pointer to stack memory of returning function. However, the only caller that cares about this return is temporarily ifdefed out. No functional change intended. Reviewed by: tuexen Differential Revision: https://reviews.freebsd.org/D43852 --- tests/sys/kern/unix_seqpacket_test.c | 131 ++++++++++++++--------------------- 1 file changed, 52 insertions(+), 79 deletions(-) diff --git a/tests/sys/kern/unix_seqpacket_test.c b/tests/sys/kern/unix_seqpacket_test.c index be273fbe1246..3ea7bb3ea165 100644 --- a/tests/sys/kern/unix_seqpacket_test.c +++ b/tests/sys/kern/unix_seqpacket_test.c @@ -68,32 +68,50 @@ do_socketpair_nonblocking(int *sv) } /* - * Returns a pair of sockets made the hard way: bind, listen, connect & accept + * Returns a bound and listening socket. * @return const char* The path to the socket */ -static const char* -mk_pair_of_sockets(int *sv) +static const struct sockaddr_un * +mk_listening_socket(int *sv) { - struct sockaddr_un sun; /* ATF's isolation mechanisms will guarantee uniqueness of this file */ - const char *path = "sock"; - int s, err, s2, s1; + static const struct sockaddr_un sun = { + .sun_family = AF_LOCAL, + .sun_len = sizeof(sun), + .sun_path = "sock", + }; + int s, r, l; s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); ATF_REQUIRE(s >= 0); - bzero(&sun, sizeof(sun)); - sun.sun_family = AF_LOCAL; - sun.sun_len = sizeof(sun); - strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); - err = bind(s, (struct sockaddr *)&sun, sizeof(sun)); - err = listen(s, -1); - ATF_CHECK_EQ(0, err); + r = bind(s, (struct sockaddr *)&sun, sizeof(sun)); + l = listen(s, -1); + ATF_CHECK_EQ(0, r); + ATF_CHECK_EQ(0, l); + + if (sv != NULL) + *sv = s; + + return (&sun); +} + +/* + * Returns a pair of sockets made the hard way: bind, listen, connect & accept + * @return const char* The path to the socket + */ +static const struct sockaddr_un * +mk_pair_of_sockets(int *sv) +{ + const struct sockaddr_un *sun; + int s, s2, err, s1; + + sun = mk_listening_socket(&s); /* Create the other socket */ s2 = socket(PF_LOCAL, SOCK_SEQPACKET, 0); ATF_REQUIRE(s2 >= 0); - err = connect(s2, (struct sockaddr*)&sun, sizeof(sun)); + err = connect(s2, (struct sockaddr *)sun, sizeof(*sun)); if (err != 0) { perror("connect"); atf_tc_fail("connect(2) failed"); @@ -106,12 +124,14 @@ mk_pair_of_sockets(int *sv) atf_tc_fail("accept(2) failed"); } - sv[0] = s1; - sv[1] = s2; + if (sv != NULL) { + sv[0] = s1; + sv[1] = s2; + } close(s); - return (path); + return (sun); } static volatile sig_atomic_t got_sigpipe = 0; @@ -454,22 +474,9 @@ ATF_TC_BODY(bind, tc) ATF_TC_WITHOUT_HEAD(listen_bound); ATF_TC_BODY(listen_bound, tc) { - struct sockaddr_un sun; - /* ATF's isolation mechanisms will guarantee uniqueness of this file */ - const char *path = "sock"; - int s, r, l; - - s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); - ATF_REQUIRE(s >= 0); + int s; - bzero(&sun, sizeof(sun)); - sun.sun_family = AF_LOCAL; - sun.sun_len = sizeof(sun); - strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); - r = bind(s, (struct sockaddr *)&sun, sizeof(sun)); - l = listen(s, -1); - ATF_CHECK_EQ(0, r); - ATF_CHECK_EQ(0, l); + (void)mk_listening_socket(&s); close(s); } @@ -477,27 +484,15 @@ ATF_TC_BODY(listen_bound, tc) ATF_TC_WITHOUT_HEAD(connect); ATF_TC_BODY(connect, tc) { - struct sockaddr_un sun; - /* ATF's isolation mechanisms will guarantee uniqueness of this file */ - const char *path = "sock"; - int s, r, err, l, s2; + const struct sockaddr_un *sun; + int s, err, s2; - s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); - ATF_REQUIRE(s >= 0); - - bzero(&sun, sizeof(sun)); - sun.sun_family = AF_LOCAL; - sun.sun_len = sizeof(sun); - strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); - r = bind(s, (struct sockaddr *)&sun, sizeof(sun)); - l = listen(s, -1); - ATF_CHECK_EQ(0, r); - ATF_CHECK_EQ(0, l); + sun = mk_listening_socket(&s); /* Create the other socket */ s2 = socket(PF_LOCAL, SOCK_SEQPACKET, 0); ATF_REQUIRE(s2 >= 0); - err = connect(s2, (struct sockaddr*)&sun, sizeof(sun)); + err = connect(s2, (struct sockaddr *)sun, sizeof(*sun)); if (err != 0) { perror("connect"); atf_tc_fail("connect(2) failed"); @@ -670,7 +665,7 @@ ATF_TC_WITHOUT_HEAD(sendto_recvfrom); ATF_TC_BODY(sendto_recvfrom, tc) { #ifdef TEST_SEQ_PACKET_SOURCE_ADDRESS - const char* path; + const sockaddr_un *sun; #endif struct sockaddr_storage from; int sv[2]; @@ -683,7 +678,7 @@ ATF_TC_BODY(sendto_recvfrom, tc) /* setup the socket pair */ #ifdef TEST_SEQ_PACKET_SOURCE_ADDRESS - path = + sun = #endif mk_pair_of_sockets(sv); @@ -714,7 +709,7 @@ ATF_TC_BODY(sendto_recvfrom, tc) * these checks may be reenabled */ ATF_CHECK_EQ(PF_LOCAL, from.ss_family); - ATF_CHECK_STREQ(path, ((struct sockaddr_un*)&from)->sun_path); + ATF_CHECK_STREQ(sun->sun_path, ((struct sockaddr_un*)&from)->sun_path); #endif close(sv[0]); close(sv[1]); @@ -756,28 +751,17 @@ ATF_TC_BODY(send_recv_with_connect, tc) ATF_TC_WITHOUT_HEAD(shutdown_send); ATF_TC_BODY(shutdown_send, tc) { - struct sockaddr_un sun; - /* ATF's isolation mechanisms will guarantee uniqueness of this file */ - const char *path = "sock"; + const struct sockaddr_un *sun; const char *data = "data"; ssize_t datalen, ssize; int s, err, s2; - s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); - ATF_REQUIRE(s >= 0); - - bzero(&sun, sizeof(sun)); - sun.sun_family = AF_LOCAL; - sun.sun_len = sizeof(sun); - strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); - err = bind(s, (struct sockaddr *)&sun, sizeof(sun)); - err = listen(s, -1); - ATF_CHECK_EQ(0, err); + sun = mk_listening_socket(&s); /* Create the other socket */ s2 = socket(PF_LOCAL, SOCK_SEQPACKET, 0); ATF_REQUIRE(s2 >= 0); - err = connect(s2, (struct sockaddr*)&sun, sizeof(sun)); + err = connect(s2, (struct sockaddr *)sun, sizeof(*sun)); if (err != 0) { perror("connect"); atf_tc_fail("connect(2) failed"); @@ -797,28 +781,17 @@ ATF_TC_BODY(shutdown_send, tc) ATF_TC_WITHOUT_HEAD(shutdown_send_sigpipe); ATF_TC_BODY(shutdown_send_sigpipe, tc) { - struct sockaddr_un sun; - /* ATF's isolation mechanisms will guarantee uniqueness of this file */ - const char *path = "sock"; + const struct sockaddr_un *sun; const char *data = "data"; ssize_t datalen; int s, err, s2; - s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); - ATF_REQUIRE(s >= 0); - - bzero(&sun, sizeof(sun)); - sun.sun_family = AF_LOCAL; - sun.sun_len = sizeof(sun); - strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); - err = bind(s, (struct sockaddr *)&sun, sizeof(sun)); - err = listen(s, -1); - ATF_CHECK_EQ(0, err); + sun = mk_listening_socket(&s); /* Create the other socket */ s2 = socket(PF_LOCAL, SOCK_SEQPACKET, 0); ATF_REQUIRE(s2 >= 0); - err = connect(s2, (struct sockaddr*)&sun, sizeof(sun)); + err = connect(s2, (struct sockaddr *)sun, sizeof(*sun)); if (err != 0) { perror("connect"); atf_tc_fail("connect(2) failed");