Skip to content

Commit 46c6446

Browse files
committed
tests/unix_seqpacket: add couple tests for shutdown(2)
- A test against recent syzkaller discovery. - A test that remote peer shutdown(2) will unblock our recv(2)
1 parent c44d6f4 commit 46c6446

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

tests/sys/kern/unix_seqpacket_test.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,38 @@ ATF_TC_BODY(shutdown_send_sigpipe, tc)
894894
close(s2);
895895
}
896896

897+
/*
898+
* https://syzkaller.appspot.com/bug?id=ac94349a29f2efc40e9274239e4ca9b2c473a4e7
899+
*/
900+
ATF_TC_WITHOUT_HEAD(shutdown_o_async);
901+
ATF_TC_BODY(shutdown_o_async, tc)
902+
{
903+
int sv[2];
904+
905+
do_socketpair(sv);
906+
907+
ATF_CHECK_EQ(0, fcntl(sv[0], F_SETFL, O_ASYNC));
908+
ATF_CHECK_EQ(0, shutdown(sv[0], SHUT_WR));
909+
close(sv[0]);
910+
close(sv[1]);
911+
}
912+
913+
/*
914+
* If peer had done SHUT_WR on their side, our recv(2) shouldn't block.
915+
*/
916+
ATF_TC_WITHOUT_HEAD(shutdown_recv);
917+
ATF_TC_BODY(shutdown_recv, tc)
918+
{
919+
char buf[10];
920+
int sv[2];
921+
922+
do_socketpair(sv);
923+
ATF_CHECK_EQ(0, shutdown(sv[0], SHUT_WR));
924+
ATF_CHECK_EQ(0, recv(sv[1], buf, sizeof(buf), 0));
925+
close(sv[0]);
926+
close(sv[1]);
927+
}
928+
897929
/* nonblocking send(2) and recv(2) a single short record */
898930
ATF_TC_WITHOUT_HEAD(send_recv_nonblocking);
899931
ATF_TC_BODY(send_recv_nonblocking, tc)
@@ -1310,6 +1342,8 @@ ATF_TP_ADD_TCS(tp)
13101342
ATF_TP_ADD_TC(tp, implied_connect);
13111343
ATF_TP_ADD_TC(tp, shutdown_send);
13121344
ATF_TP_ADD_TC(tp, shutdown_send_sigpipe);
1345+
ATF_TP_ADD_TC(tp, shutdown_o_async);
1346+
ATF_TP_ADD_TC(tp, shutdown_recv);
13131347
ATF_TP_ADD_TC(tp, eagain_8k_8k);
13141348
ATF_TP_ADD_TC(tp, eagain_8k_128k);
13151349
ATF_TP_ADD_TC(tp, eagain_128k_8k);

0 commit comments

Comments
 (0)