summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-09-03 15:04:49 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-09-06 12:22:44 +0200
commit6d2becb78d46c82fd3bacfb94cbfd02e440f3d67 (patch)
treeb354109b1fa3e7c37c6ed3f2dcce57a41a1bcc64
parent54b4b1f85af465acb4627ec423599a6c3b4a6fad (diff)
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.
-rw-r--r--cpukit/include/rtems/score/todimpl.h9
-rw-r--r--cpukit/score/src/coretodcheck.c2
-rw-r--r--testsuites/psxtests/psxclock/init.c14
3 files changed, 24 insertions, 1 deletions
diff --git a/cpukit/include/rtems/score/todimpl.h b/cpukit/include/rtems/score/todimpl.h
index ceeef2e21b..f85689fd9c 100644
--- a/cpukit/include/rtems/score/todimpl.h
+++ b/cpukit/include/rtems/score/todimpl.h
@@ -116,6 +116,15 @@ extern "C" {
(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.
*
* The following constant define the earliest year to which an
diff --git a/cpukit/score/src/coretodcheck.c b/cpukit/score/src/coretodcheck.c
index b42435aa43..8c012c5070 100644
--- a/cpukit/score/src/coretodcheck.c
+++ b/cpukit/score/src/coretodcheck.c
@@ -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;
}
diff --git a/testsuites/psxtests/psxclock/init.c b/testsuites/psxtests/psxclock/init.c
index 778637b4fd..66d938868b 100644
--- a/testsuites/psxtests/psxclock/init.c
+++ b/testsuites/psxtests/psxclock/init.c
@@ -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;