[RFC][BZ #16549] Add sanity check for condvar alignment.

Rich Felker dalias@aerifal.cx
Tue Feb 11 15:35:00 GMT 2014


On Tue, Feb 11, 2014 at 01:43:46PM +0100, Ondřej Bílka wrote:
> Hi,
> 
> In this bug using misaligned condition variable causes a silent failure.

You cannot create a misaligned condvar without invoking undefined
behavior.

> 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.

How is it lying about the requirements? The definition is visible and
it contains both ints and pointers in the union, so the alignment is
the maximum alignment needed for them. In practice this will be 4 on
32-bit systems and 8 on 64-bit ones.

In any case, the bugreport is invalid. You can never take a pointer to
members of a #pragma packed struct and pass them to other functions.
For example, scanf("%d", &packed.x) is invalid because scanf has no
way of knowing it will get, much less dealing with, an
invalid/misaligned pointer. This is not specific to pthread
synchronization objects.

Rich



More information about the Libc-alpha mailing list