nptl: Fix __futex_abstimed_wait_cancellable32

Similar to 64-bit time __futex_abstimed_wait_cancellable64, it should
check for overflow and convert to 32-bit timespec iff timeout is not
NULL.

It fixes some regression on i686-linux-gnu running on a 4.15 kernel.
This commit is contained in:
Adhemerval Zanella 2020-09-28 16:05:32 -03:00
parent aaa12e9ff0
commit 50e19ddfcd

View File

@ -29,16 +29,22 @@ __futex_abstimed_wait_cancellable32 (unsigned int* futex_word,
const struct __timespec64* abstime,
int private)
{
if (! in_time_t_range (abstime->tv_sec))
return -EOVERFLOW;
struct timespec ts32, *pts32 = NULL;
if (abstime != NULL)
{
if (! in_time_t_range (abstime->tv_sec))
return -EOVERFLOW;
ts32 = valid_timespec64_to_timespec (*abstime);
pts32 = &ts32;
}
unsigned int clockbit = (clockid == CLOCK_REALTIME)
? FUTEX_CLOCK_REALTIME : 0;
int op = __lll_private_flag (FUTEX_WAIT_BITSET | clockbit, private);
struct timespec ts32 = valid_timespec64_to_timespec (*abstime);
return INTERNAL_SYSCALL_CANCEL (futex, futex_word, op, expected,
&ts32, NULL /* Unused. */,
pts32, NULL /* Unused. */,
FUTEX_BITSET_MATCH_ANY);
}
#endif