File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -353,6 +353,7 @@ Suite *wolf_suite(void)
353353 tcase_add_test (tc_utils , test_sock_opts_and_names );
354354 tcase_add_test (tc_utils , test_dns_send_query_errors );
355355 tcase_add_test (tc_utils , test_dns_schedule_timer_initial_jitter_and_cancel );
356+ tcase_add_test (tc_utils , test_dns_schedule_timer_caps_large_retry_shift );
356357 tcase_add_test (tc_utils , test_dns_send_query_schedules_timeout );
357358 tcase_add_test (tc_utils , test_dns_resend_query_uses_stored_query_buffer );
358359 tcase_add_test (tc_utils , test_dns_abort_query_clears_timer_and_query_state );
Original file line number Diff line number Diff line change @@ -1902,6 +1902,20 @@ START_TEST(test_dns_schedule_timer_initial_jitter_and_cancel)
19021902}
19031903END_TEST
19041904
1905+ START_TEST (test_dns_schedule_timer_caps_large_retry_shift )
1906+ {
1907+ struct wolfIP s ;
1908+
1909+ wolfIP_init (& s );
1910+ s .last_tick = 100U ;
1911+ s .dns_retry_count = 64U ;
1912+
1913+ dns_schedule_timer (& s );
1914+ ck_assert_int_ne (s .dns_timer , NO_TIMER );
1915+ ck_assert_uint_eq (find_timer_expiry (& s , s .dns_timer ), UINT64_MAX );
1916+ }
1917+ END_TEST
1918+
19051919START_TEST (test_dns_send_query_schedules_timeout )
19061920{
19071921 struct wolfIP s ;
Original file line number Diff line number Diff line change @@ -6468,6 +6468,7 @@ static void dns_schedule_timer(struct wolfIP *s)
64686468{
64696469 struct wolfIP_timer tmr = { };
64706470 uint64_t interval = DNS_QUERY_TIMEOUT ;
6471+ uint8_t shift ;
64716472
64726473 if (!s )
64736474 return ;
@@ -6478,7 +6479,11 @@ static void dns_schedule_timer(struct wolfIP *s)
64786479 interval = DNS_QUERY_TIMEOUT_INITIAL +
64796480 (wolfIP_getrandom () % DNS_QUERY_TIMEOUT_INITIAL_JITTER );
64806481 } else {
6481- interval <<= s -> dns_retry_count ;
6482+ shift = s -> dns_retry_count ;
6483+ if (shift >= 64U || interval > (UINT64_MAX >> shift ))
6484+ interval = UINT64_MAX - s -> last_tick ;
6485+ else
6486+ interval <<= shift ;
64826487 }
64836488 tmr .expires = s -> last_tick + interval ;
64846489 tmr .arg = s ;
You can’t perform that action at this time.
0 commit comments