score: Limit the CLOCK_REALTIME setting

Limit the CLOCK_REALTIME setting to ensure that the CLOCK_REALTIME is defined
for a system uptime of at least 114 years.
This commit is contained in:
Sebastian Huber
2021-09-03 15:04:49 +02:00
parent 54b4b1f85a
commit 6d2becb78d
3 changed files with 24 additions and 1 deletions

View File

@@ -115,6 +115,15 @@ extern "C" {
(((1987 - 1970 + 1) * TOD_SECONDS_PER_NON_LEAP_YEAR) + \
(4 * TOD_SECONDS_PER_DAY))
/**
* @brief Seconds from 1970-01-01T00:00:00Z to 2400-01-01T00:00:00Z.
*
* This is the latest time of day which should be set by _TOD_Set(). The year
* 2400 was chosen to guarantee a defined CLOCK_REALTIME within the range of a
* system uptime of about 114 years.
*/
#define TOD_SECONDS_1970_THROUGH_2400 13569465600
/**
* @brief Earliest year to which an time of day can be initialized.
*

View File

@@ -51,7 +51,7 @@ Status_Control _TOD_Is_valid_new_time_of_day( const struct timespec *tod )
return STATUS_INVALID_NUMBER;
}
if ( _Watchdog_Is_far_future_timespec( tod ) ) {
if ( tod->tv_sec > TOD_SECONDS_1970_THROUGH_2400 ) {
return STATUS_INVALID_NUMBER;
}

View File

@@ -131,6 +131,20 @@ static rtems_task Init(
rtems_test_assert( sc == -1 );
rtems_test_assert( errno == EINVAL );
puts( "Init: clock_settime - 2400-01-01T00:00:00.999999999Z SUCCESSFUL" );
tv.tv_sec = 13569465600;
tv.tv_nsec = 999999999;
sc = clock_settime( CLOCK_REALTIME, &tv );
rtems_test_assert( sc == 0 );
puts( "Init: clock_settime - 2400-01-01T00:00:01Z EINVAL" );
tv.tv_sec = 13569465601;
tv.tv_nsec = 0;
errno = 0;
sc = clock_settime( CLOCK_REALTIME, &tv );
rtems_test_assert( sc == -1 );
rtems_test_assert( errno == EINVAL );
puts( "Init: clock_settime - far future EINVAL" );
tv.tv_sec = 17179869184;
tv.tv_nsec = 0;