mirror of
https://git.musl-libc.org/git/musl
synced 2025-02-04 04:14:03 +03:00
check mutex owner in pthread_cond_wait
when used with error-checking mutexes, pthread_cond_wait is required to fail with EPERM if the mutex is not locked by the caller. previously we relied on pthread_mutex_unlock to generate the error, but this is not valid, since in the case of such invalid usage the internal state of the cond variable has already been potentially corrupted (due to access outside the control of the mutex). thus, we have to check first.
This commit is contained in:
parent
d8dc1df1c2
commit
bfae1a8b71
@ -37,6 +37,9 @@ int pthread_cond_timedwait(pthread_cond_t *c, pthread_mutex_t *m, const struct t
|
|||||||
struct cm cm = { .c=c, .m=m };
|
struct cm cm = { .c=c, .m=m };
|
||||||
int r, e=0, seq;
|
int r, e=0, seq;
|
||||||
|
|
||||||
|
if ((m->_m_type&3) == PTHREAD_MUTEX_ERRORCHECK &&
|
||||||
|
(m->_m_lock&INT_MAX) != __pthread_self()->tid) return EPERM;
|
||||||
|
|
||||||
if (ts && ts->tv_nsec >= 1000000000UL)
|
if (ts && ts->tv_nsec >= 1000000000UL)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user