[RFC][BZ #16549] Add sanity check for condvar alignment.
Ondřej Bílka
neleai@seznam.cz
Tue Feb 11 16:26:00 GMT 2014
On Tue, Feb 11, 2014 at 10:35:02AM -0500, Rich Felker wrote:
> 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.
>
And by undefined behaviour we could format user harddisk. This is valid
QoI issue as it aborting on undefined behaviour is prefered.
In second suggestion I misread documentation:
The packed attribute specifies that a variable or structure field should
have the smallest possible alignmentâone byte for a variable, and one
bit for a field, unless you specify a larger value with the aligned
attribute.
which works as for variable but is ignored in type.
More information about the Libc-alpha
mailing list