mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
Check time arguments to pthread_timedjoin_np and pthread_clockjoin_np
The pthread_timedjoin_np and pthread_clockjoin_np functions do not
check that a valid time has been specified. The documentation for
these functions in the glibc manual isn't sufficiently detailed to say
if they should, but consistency with POSIX functions such as
pthread_mutex_timedlock and pthread_cond_timedwait strongly indicates
that an EINVAL error is appropriate (even if there might be some
ambiguity about exactly where such a check should go in relation to
other checks for whether the thread exists, whether it's immediately
joinable, etc.). Copy the logic for such a check used in
pthread_rwlock_common.c.
pthread_join_common had some logic calling valid_nanoseconds before
commit 9e92278ffa
, "nptl: Remove
clockwait_tid"; I haven't checked exactly what cases that detected.
Tested for x86_64 and x86.
This commit is contained in:
@@ -49,6 +49,12 @@ __pthread_clockjoin_ex (pthread_t threadid, void **thread_return,
|
||||
/* We cannot wait for the thread. */
|
||||
return EINVAL;
|
||||
|
||||
/* Make sure the clock and time specified are valid. */
|
||||
if (abstime
|
||||
&& __glibc_unlikely (!futex_abstimed_supported_clockid (clockid)
|
||||
|| ! valid_nanoseconds (abstime->tv_nsec)))
|
||||
return EINVAL;
|
||||
|
||||
struct pthread *self = THREAD_SELF;
|
||||
int result = 0;
|
||||
|
||||
|
Reference in New Issue
Block a user