The issue is caused by lack of getTimeStampName declaration in xmotd.c. The implicit declaration assumed instead causes the pointer to buf to be cast to an int, in turn causing some truncation of bits which are non-zero in this case of a static buffer placed in a far location in address space (probably in some special section when hardening is used). utime() detects this and returns EFAULT.
The build log shows plenty of warnings, some of which might have a similar effect.