From nobody Sat May 31 00:04:57 2025 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 4b8L2f24N2z5x6nT; Sat, 31 May 2025 00:04:58 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b8L2d6Bbkz3PmJ; Sat, 31 May 2025 00:04:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748649897; 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=VVIIL4Cp+tj3YZzYy2TIG+G4KgwAgMDyBfJeXM497TU=; b=qgDT2lShh3JkKLp0pgSOxmNnc7swEqIKZXKBOINfxApJ59X0Dm1Qu4GnrwksR43Y68le2v CJZv8n6Sh0FDOqEVN3YvPPxI15xodZanJAYc9U/+Wc+NEhvBgvNOgDahs1Fj6YZj5vumDl jCQZ1IKSlwh0iz4jee8ExTnF/mtnxYrYCcx/krC7T8JTO0xDpJU7h4a2pLfGU62/W8O7Lw 5KXfbtQTNRrl3sB5fRbMRBYNg7cOX9znS9pugSZLP0niDpVKOEJ6er3j61fLJonUh3W7sd /UeFv1UPboMvNB4j2ibVG42RV6gd94A1e2UoXR+ED/NJgWeKV+gZBGgotswuUw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748649897; a=rsa-sha256; cv=none; b=bR5o0UwS74BXMw1tSbL4yE4EuqN1P8BKMOGgl289ih1M91asiX5GL4eW6SKM2xXH6W8HjF J9j90Ej5xZW12Nps9lpO87IN2C2sB86TWzyb+/3d6Tr5OxeE+2cY0L2TmHpMO9H3/lkAMc jc7m5fLW63JvoV69Mf8YfSr0rincjPyfOqh+06NMjZFPORfoOYUedUFq0DFh6xpe2TRBbS /bAv2f5OU8PQh6ZR/ymnFQraemEYqLr4J6FpgLl0IJ6XfW2+mM07gC6n2Ctcvsw1766nMC ThiEHXU7fikG5ztOFl+tC3YmVq2MUK9Qb/R27V7wZJ4Ol1dgB/Zygjz2kXp8qg== 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=1748649897; 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=VVIIL4Cp+tj3YZzYy2TIG+G4KgwAgMDyBfJeXM497TU=; b=maDx0dCaaH+kiQwnAxs0cgwnpXnQu+VzXEc0KH7/N8gAf4AuvwnGO8cIvyHhiIsnBUxZJ7 E7muMW9DbIy8s3SsWOoTWg9CNP74Sj88cRVod/I4ylJLf++YLqCziGrYq/swQL358sEyl/ iDB8Z7egIk1JfHVQDNAA2Zs1iJq0TrQaz10E1qKk/IkWscOeWtchOpgoikT57o+bE6kV+T w+nQy1fEOYpUwMpapG77AVKpyveiNfJNszg2Z3G50yyEw9XH6XpD5HSk9SkwBql/qRbI9i nnrzE2InSjg2qgX3TNPJrsXE4OKodMUs54xKhowp5wJM3dSPkFdjWMglip2mRw== 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 4b8L2d5lf4z5R; Sat, 31 May 2025 00:04:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54V04vMg097155; Sat, 31 May 2025 00:04:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54V04vTl097152; Sat, 31 May 2025 00:04:57 GMT (envelope-from git) Date: Sat, 31 May 2025 00:04:57 GMT Message-Id: <202505310004.54V04vTl097152@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 6b90209aaf80 - main - tests: ensure that unix/stream raises POLLIN after a shutdown(2) 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6b90209aaf809204c62e2a252c931e7240f60374 Auto-Submitted: auto-generated The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=6b90209aaf809204c62e2a252c931e7240f60374 commit 6b90209aaf809204c62e2a252c931e7240f60374 Author: Kyle Evans AuthorDate: 2025-05-31 00:04:33 +0000 Commit: Kyle Evans CommitDate: 2025-05-31 00:04:33 +0000 tests: ensure that unix/stream raises POLLIN after a shutdown(2) This tests for the bug fixed in 6ac71c4a52348 ("unix/stream: fix poll on a peer shutdown(2)ed socket"), where-in the remote side has shutdown writes on their side and the other end fails to return from select(2)/poll(2) because we weren't surfacing it as readable. Reviewed by: adrian, kib Differential Revision: https://reviews.freebsd.org/D50602 --- tests/sys/kern/unix_stream.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/sys/kern/unix_stream.c b/tests/sys/kern/unix_stream.c index 9f750967ebf8..f8ba288308bd 100644 --- a/tests/sys/kern/unix_stream.c +++ b/tests/sys/kern/unix_stream.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -101,6 +102,20 @@ ATF_TC_BODY(send_0, tc) close(sv[1]); } +static void +check_readable_select(int fd, int expect, bool timeout) +{ + fd_set rdfds; + int nfds; + + FD_ZERO(&rdfds); + FD_SET(fd, &rdfds); + nfds = select(fd + 1, &rdfds, NULL, NULL, timeout ? + &(struct timeval){.tv_usec = 1000} : NULL); + ATF_REQUIRE_MSG(nfds == expect, + "select() returns %d errno %d", nfds, errno); +} + static void check_writable_select(int fd, int expect, bool timeout) { @@ -115,6 +130,21 @@ check_writable_select(int fd, int expect, bool timeout) "select() returns %d errno %d", nfds, errno); } +static void +check_readable_poll(int fd, int expect, bool timeout) +{ + struct pollfd pfd[1]; + int nfds; + + pfd[0] = (struct pollfd){ + .fd = fd, + .events = POLLIN | POLLRDNORM, + }; + nfds = poll(pfd, 1, timeout ? 1 : INFTIM); + ATF_REQUIRE_MSG(nfds == expect, + "poll() returns %d errno %d", nfds, errno); +} + static void check_writable_poll(int fd, int expect, bool timeout) { @@ -325,6 +355,31 @@ ATF_TC_BODY(peershutdown_writability, tc) close(sv[1]); } +ATF_TC_WITHOUT_HEAD(peershutdown_readability); +ATF_TC_BODY(peershutdown_readability, tc) +{ + ssize_t readsz; + int sv[2]; + char c; + + do_socketpair(sv); + shutdown(sv[1], SHUT_WR); + + /* + * The other side should flag as readable in select(2) to allow it to + * read(2) and observe EOF. Ensure that both poll(2) and select(2) + * are consistent here. + */ + check_readable_select(sv[0], 1, false); + check_readable_poll(sv[0], 1, false); + + readsz = read(sv[0], &c, sizeof(c)); + ATF_REQUIRE_INTEQ(0, readsz); + + close(sv[0]); + close(sv[1]); +} + ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, getpeereid); @@ -336,6 +391,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, full_writability_kevent); ATF_TP_ADD_TC(tp, peerclosed_writability); ATF_TP_ADD_TC(tp, peershutdown_writability); + ATF_TP_ADD_TC(tp, peershutdown_readability); return atf_no_error(); }