On the code path for builds without 64 bit time_t default syscall, the check to fallback to 32 bit is wrong: 38 bool need_time64 = abs_timeout != NULL 39 && !in_time_t_range (abs_timeout->tv_sec); 40 if (need_time64) 41 { 42 int r = SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr, msg_len, 43 msg_prio, abs_timeout); 44 if (r == 0 || errno != ENOSYS) 45 return r; 46 __set_errno (EOVERFLOW); 47 return -1; 48 } It should check if 'r >= 0'.
Fixed on 2.36.