@@ -503,6 +503,53 @@ START_TEST(test_replay_old_seqs_after_jump)
503503}
504504END_TEST
505505
506+ /* The transmitted sequence number must never be allowed to overflow. */
507+ START_TEST (test_replay_overflow )
508+ {
509+ static uint8_t buf [LINK_MTU + 256 ];
510+ uint8_t ref [64 ];
511+ uint32_t frame_len , i ;
512+ uint16_t ip_len ;
513+ int ret ;
514+ wolfIP_esp_sa * esp_sa = NULL ;
515+ struct wolfIP_ip_packet * ip = (struct wolfIP_ip_packet * )buf ;
516+
517+ for (i = 0U ; i < sizeof (ref ); i ++ ) ref [i ] = (uint8_t )(i & 0xFFU );
518+
519+ esp_setup ();
520+
521+ ret = wolfIP_esp_sa_new_gcm (0 , (uint8_t * )spi_rt ,
522+ atoip4 (T_SRC ), atoip4 (T_DST ),
523+ ESP_ENC_GCM_RFC4543 ,
524+ (uint8_t * )k_aes256_gcm ,
525+ sizeof (k_aes256_gcm ));
526+ ck_assert_int_eq (ret , 0 );
527+ esp_sa = esp_sa_get (0 , (uint8_t * )spi_rt );
528+ ck_assert_ptr_nonnull (esp_sa );
529+
530+ /* Set oseq to 10 before overflow. */
531+ esp_sa -> replay .oseq = (ESP_MAX_32_SEQ - 10 );
532+
533+ /* all of these should be ok. */
534+ for (i = 0 ; i < 10 ; ++ i ) {
535+ frame_len = build_ip_packet (buf , sizeof (buf ), WI_IPPROTO_UDP ,
536+ ref , sizeof (ref ));
537+ ip_len = (uint16_t )(frame_len - ETH_HEADER_LEN );
538+
539+ ret = esp_transport_wrap (ip , & ip_len );
540+ ck_assert_int_eq (ret , 0 );
541+ }
542+
543+ /* oseq overflow is detected, and is rejected. */
544+ frame_len = build_ip_packet (buf , sizeof (buf ), WI_IPPROTO_UDP ,
545+ ref , sizeof (ref ));
546+ ip_len = (uint16_t )(frame_len - ETH_HEADER_LEN );
547+
548+ ret = esp_transport_wrap (ip , & ip_len );
549+ ck_assert_int_eq (ret , -1 );
550+ }
551+ END_TEST
552+
506553/*
507554 * esp_transport_unwrap error paths
508555 */
@@ -1123,6 +1170,7 @@ static Suite *esp_suite(void)
11231170 tcase_add_test (tc , test_replay_low_hi_seq_accepts_seq_one );
11241171 tcase_add_test (tc , test_replay_jump_resets_bitmap );
11251172 tcase_add_test (tc , test_replay_old_seqs_after_jump );
1173+ tcase_add_test (tc , test_replay_overflow );
11261174 suite_add_tcase (s , tc );
11271175
11281176 /* Unwrap error paths */
0 commit comments