@@ -3163,6 +3163,49 @@ START_TEST(test_sock_accept_starts_rto_timer)
31633163}
31643164END_TEST
31653165
3166+ START_TEST(test_sock_accept_initializes_snd_una)
3167+ {
3168+ struct wolfIP s;
3169+ int listen_sd;
3170+ int client_sd;
3171+ struct tsocket *listener;
3172+ struct tsocket *accepted;
3173+ struct wolfIP_sockaddr_in sin;
3174+
3175+ wolfIP_init(&s);
3176+ mock_link_init(&s);
3177+ wolfIP_ipconfig_set(&s, 0x0A000001U, 0xFFFFFF00U, 0);
3178+
3179+ listen_sd = wolfIP_sock_socket(&s, AF_INET, IPSTACK_SOCK_STREAM, WI_IPPROTO_TCP);
3180+ ck_assert_int_gt(listen_sd, 0);
3181+ memset(&sin, 0, sizeof(sin));
3182+ sin.sin_family = AF_INET;
3183+ sin.sin_port = ee16(1234);
3184+ sin.sin_addr.s_addr = ee32(0x0A000001U);
3185+ ck_assert_int_eq(wolfIP_sock_bind(&s, listen_sd, (struct wolfIP_sockaddr *)&sin, sizeof(sin)), 0);
3186+ ck_assert_int_eq(wolfIP_sock_listen(&s, listen_sd, 1), 0);
3187+
3188+ inject_tcp_syn(&s, TEST_PRIMARY_IF, 0x0A000001U, 1234);
3189+ listener = &s.tcpsockets[SOCKET_UNMARK(listen_sd)];
3190+ ck_assert_int_eq(listener->sock.tcp.state, TCP_SYN_RCVD);
3191+
3192+ /* Force a high ISN to exercise wrap-aware ordering. */
3193+ {
3194+ uint32_t isn = 0x80000000U;
3195+ listener->sock.tcp.seq = isn;
3196+ listener->sock.tcp.snd_una = isn;
3197+ }
3198+
3199+ client_sd = wolfIP_sock_accept(&s, listen_sd, NULL, NULL);
3200+ ck_assert_int_gt(client_sd, 0);
3201+
3202+ accepted = &s.tcpsockets[SOCKET_UNMARK(client_sd)];
3203+ ck_assert_uint_eq(accepted->sock.tcp.seq, (uint32_t)(0x80000000U + 1U));
3204+ ck_assert_uint_eq(accepted->sock.tcp.snd_una, 0x80000000U);
3205+ ck_assert_int_eq(tcp_seq_leq(accepted->sock.tcp.snd_una, accepted->sock.tcp.seq), 1);
3206+ }
3207+ END_TEST
3208+
31663209START_TEST(test_sock_accept_synack_retransmission)
31673210{
31683211 struct wolfIP s;
@@ -16947,6 +16990,7 @@ Suite *wolf_suite(void)
1694716990 tcase_add_test(tc_utils, test_sock_accept_listen_no_connection);
1694816991 tcase_add_test(tc_utils, test_sock_accept_bound_local_ip_no_match);
1694916992 tcase_add_test(tc_utils, test_sock_accept_starts_rto_timer);
16993+ tcase_add_test(tc_utils, test_sock_accept_initializes_snd_una);
1695016994 tcase_add_test(tc_utils, test_sock_accept_synack_retransmission);
1695116995 tcase_add_test(tc_utils, test_sock_accept_ack_transitions_to_established);
1695216996 tcase_add_test(tc_utils, test_sock_sendto_error_paths);
0 commit comments