RTEMS | Draft: cpukit/age_verify: Add optional state-mandated age verification API (!1137)
Wayne Thornton (@wmthornton-dev)
gitlab at rtems.org
Mon Mar 16 15:17:23 UTC 2026
Wayne Thornton commented on a discussion on cpukit/libage/age_verify.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1137#note_145722
> + if (_Age_Locked) return RTEMS_NOT_CONFIGURED;
> +
> + _Age_Data.age_bracket = (uint32_t)bracket;
> + _Age_Locked = true;
> + return RTEMS_SUCCESSFUL;
> +}
> +
> +uint8_t rtems_age_get_signal(void) {
> + // Verify the integrity of the age data before returning it.
> + // If the guard values have been tampered with, this likely
> + // indicates memory corruption or a tampering attempts.
> + if (_Age_Data.lower_guard != AGE_GUARD_PATTERN ||
> + _Age_Data.upper_guard != AGE_GUARD_PATTERN) {
> +
> + rtems_fatal(RTEMS_FATAL_SOURCE_STACK_CHECKER, 0xBAD1D);
> + }
You are absolutely right.
The reason I coded it as I did here comes down to the specific compliance threat model driving this API. The upcoming state mandates require the age signal to be immutable and tamper-evident to prevent circumvention by third-party applications.
Because a rogue pointer from a third-party app could maliciously (or accidentally) overwrite this stored bracket without the system noticing, it could potentially put the OEM out of compliance. This was my attempt at a lightweight compromise to provide some tamper-evidence without requiring full hardware memory protection.
That being said, if this defensive pattern violates core design principles in a way that is entirely unnacceptable, I am completely happy to strip the canaries and the rtems_fatal check out entirely. We can just leave the standard uint32_t variable in memory and let the downstream OEM assume the risk of memory corruption.
Alternatively, we could wrap the canary check in #if defined(RTEMS_DEBUG) so it is only evaluated during development.
--
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1137#note_145722
You're receiving this email because of your account on gitlab.rtems.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20260316/319e4908/attachment-0001.htm>
More information about the bugs
mailing list