This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]