[PATCH 4/7] score: Limit the CLOCK_REALTIME setting
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Sep 3 13:33:21 UTC 2021
Limit the CLOCK_REALTIME setting to ensure that the CLOCK_REALTIME is defined
for a system uptime of at least 114 years.
---
cpukit/include/rtems/score/todimpl.h | 9 +++++++++
cpukit/score/src/coretodcheck.c | 2 +-
testsuites/psxtests/psxclock/init.c | 15 +++++++++++++++
3 files changed, 25 insertions(+), 1 deletion(-)
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
@@ -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.
*
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..3f88f1d401 100644
--- a/testsuites/psxtests/psxclock/init.c
+++ b/testsuites/psxtests/psxclock/init.c
@@ -131,6 +131,21 @@ static rtems_task Init(
rtems_test_assert( sc == -1 );
rtems_test_assert( errno == EINVAL );
+ puts( "Init: clock_settime - 2400-01-01T00:00:00Z SUCCESSFUL" );
+ tv.tv_sec = 13569465600;
+ tv.tv_nsec = 0;
+ errno = 0;
+ 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;
--
2.26.2
More information about the devel
mailing list