In sysdeps/unix/sysv/linux/recvmmsg.c, the const struct timespec *tmo argument is passed directly to the Linux syscall recvmmsg which overwrites the pointed-to struct with the remaining time. If this behavior is desired, the argument needs to be changed to be a pointer-to-non-const, but the policy elsewhere (in other analogous interfaces) seems to be to suppress the kernel behavior by using a temp copy of the timeout to pass to the kernel.
Shouldn't the prototype be changed instead because the interface is specific to Linux?
This issue was discussed somewhere else -- I don't recall exactly but it was probably the man pages list or something kernel-related -- and the feeling was that the const in glibc is wrong since this is a Linux-specific interface. I'm okay with removing const and updating documentation to reflect Linux behavior if that's what you prefer. That's what we did in musl.
Already fixed in 20e5a5f aka glibc-2.21~541