@@ -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 */
898930ATF_TC_WITHOUT_HEAD (send_recv_nonblocking );
899931ATF_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