This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[RFC][BZ #16549] Add sanity check for condvar alignment.
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Date: Tue, 11 Feb 2014 13:43:46 +0100
- Subject: [RFC][BZ #16549] Add sanity check for condvar alignment.
- Authentication-results: sourceware.org; auth=none
Hi,
In this bug using misaligned condition variable causes a silent failure.
There are two possibilities how to fix it. First one would be not lie
about requirements and add attribute ((aligned)) to header. That could
break programs by changing sizes of structures but these were broken in
first place.
A more conservative solution is add assert in initialization to check
alignment. Following patch does that, should be same check added for
mutex/semaphores?
* nptl/pthread_cond_init.c (__pthread_cond_init): Add assert that
input is aligned.
diff --git a/nptl/pthread_cond_init.c b/nptl/pthread_cond_init.c
index 27efc9c..53d6170 100644
--- a/nptl/pthread_cond_init.c
+++ b/nptl/pthread_cond_init.c
@@ -16,6 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <assert.h>
#include <shlib-compat.h>
#include "pthreadP.h"
#include <stap-probe.h>
@@ -28,6 +29,7 @@ __pthread_cond_init (cond, cond_attr)
{
struct pthread_condattr *icond_attr = (struct pthread_condattr *) cond_attr;
+ assert (((uintptr_t) cond) % sizeof (long) == 0);
cond->__data.__lock = LLL_LOCK_INITIALIZER;
cond->__data.__futex = 0;
cond->__data.__nwaiters = (icond_attr != NULL