1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-04-30 00:56:50 +03:00
Nick Alcock 7a25d6a84d x86, pthread_cond_*wait: Do not depend on %eax not being clobbered
The x86-specific versions of both pthread_cond_wait and
pthread_cond_timedwait have (in their fall-back-to-futex-wait slow
paths) calls to __pthread_mutex_cond_lock_adjust followed by
__pthread_mutex_unlock_usercnt, which load the parameters before the
first call but then assume that the first parameter, in %eax, will
survive unaffected.  This happens to have been true before now, but %eax
is a call-clobbered register, and this assumption is not safe: it could
change at any time, at GCC's whim, and indeed the stack-protector canary
checking code clobbers %eax while checking that the canary is
uncorrupted.

So reload %eax before calling __pthread_mutex_unlock_usercnt.  (Do this
unconditionally, even when stack-protection is not in use, because it's
the right thing to do, it's a slow path, and anything else is dicing
with death.)

	* sysdeps/unix/sysv/linux/i386/pthread_cond_timedwait.S: Reload
	call-clobbered %eax on retry path.
	* sysdeps/unix/sysv/linux/i386/pthread_cond_wait.S: Likewise.
2016-03-23 13:40:14 +01:00
..
2012-01-07 23:57:22 -05:00
2014-07-07 09:29:06 -07:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00
2015-11-06 13:58:53 +01:00