diff options
Diffstat (limited to 'tests/sys/kern/unix_seqpacket_test.c')
-rw-r--r-- | tests/sys/kern/unix_seqpacket_test.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/tests/sys/kern/unix_seqpacket_test.c b/tests/sys/kern/unix_seqpacket_test.c index dc5f89270a07..b9a6be015241 100644 --- a/tests/sys/kern/unix_seqpacket_test.c +++ b/tests/sys/kern/unix_seqpacket_test.c @@ -894,6 +894,38 @@ ATF_TC_BODY(shutdown_send_sigpipe, tc) close(s2); } +/* + * https://syzkaller.appspot.com/bug?id=ac94349a29f2efc40e9274239e4ca9b2c473a4e7 + */ +ATF_TC_WITHOUT_HEAD(shutdown_o_async); +ATF_TC_BODY(shutdown_o_async, tc) +{ + int sv[2]; + + do_socketpair(sv); + + ATF_CHECK_EQ(0, fcntl(sv[0], F_SETFL, O_ASYNC)); + ATF_CHECK_EQ(0, shutdown(sv[0], SHUT_WR)); + close(sv[0]); + close(sv[1]); +} + +/* + * If peer had done SHUT_WR on their side, our recv(2) shouldn't block. + */ +ATF_TC_WITHOUT_HEAD(shutdown_recv); +ATF_TC_BODY(shutdown_recv, tc) +{ + char buf[10]; + int sv[2]; + + do_socketpair(sv); + ATF_CHECK_EQ(0, shutdown(sv[0], SHUT_WR)); + ATF_CHECK_EQ(0, recv(sv[1], buf, sizeof(buf), 0)); + close(sv[0]); + close(sv[1]); +} + /* nonblocking send(2) and recv(2) a single short record */ ATF_TC_WITHOUT_HEAD(send_recv_nonblocking); ATF_TC_BODY(send_recv_nonblocking, tc) @@ -1207,7 +1239,7 @@ ATF_TC_BODY(random_eor_and_waitall, tc) for (u_int i = 0; i < RANDOM_TESTSIZE / (u_int )sizeof(long); i++) ((long *)params.sendbuf)[i] = nrand48(¶ms.seed[0]); - ATF_REQUIRE(sysctlbyname("net.local.stream.recvspace", + ATF_REQUIRE(sysctlbyname("net.local.seqpacket.recvspace", ¶ms.recvspace, &(size_t){sizeof(u_long)}, NULL, 0) != -1); ATF_REQUIRE((recvbuf = malloc(RANDOM_RECVSIZE * params.recvspace)) != NULL); @@ -1310,6 +1342,8 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, implied_connect); ATF_TP_ADD_TC(tp, shutdown_send); ATF_TP_ADD_TC(tp, shutdown_send_sigpipe); + ATF_TP_ADD_TC(tp, shutdown_o_async); + ATF_TP_ADD_TC(tp, shutdown_recv); ATF_TP_ADD_TC(tp, eagain_8k_8k); ATF_TP_ADD_TC(tp, eagain_8k_128k); ATF_TP_ADD_TC(tp, eagain_128k_8k); |