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: PATCH: Make chunk size a multiple of MALLOC_ALIGNMENT


On Thu, May 24, 2012 at 8:36 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> This bug caused some test failures in one of nss packages on Linux/x32.
>>> This patch fixes it. ?OK to install?
>>
>> Why doesn't this trigger for any other architectures?
>
> It is very rare, even with MALLOC_ALIGNMENT. > ?(2*SIZE_SZ).
> I only saw it once on Linux/x32.

Why is it rare? Is it because it's a combination of alloc's and free's
that end up with an old_top that doesn't have the right size?

It looks like a generic issue... but it just isn't triggered by anyone... yet.

>>> ? ? ? set_head(chunk_at_offset(old_top, old_size + 2*SIZE_SZ), 0|PREV_INUSE);
>>> ? ? ? if (old_size >= MINSIZE) {
>>> ? ? ? ?set_head(chunk_at_offset(old_top, old_size), (2*SIZE_SZ)|PREV_INUSE);
>>> @@ -3803,8 +3804,10 @@ _int_free(mstate av, mchunkptr p, int have_lock)
>>> ? ? ? malloc_printerr (check_action, errstr, chunk2mem(p));
>>> ? ? ? return;
>>> ? ? }
>>> - ?/* We know that each chunk is at least MINSIZE bytes in size. ?*/
>>> - ?if (__builtin_expect (size < MINSIZE, 0))
>>> + ?/* We know that each chunk is at least MINSIZE bytes in size of a
>>> + ? ? multiple of MALLOC_ALIGNMENT. ?*/
>>
>> Should e "or a" not "of a"?
>
> Fixed.
>
>>> + ?if (__builtin_expect (size < MINSIZE
>>> + ? ? ? ? ? ? ? ? ? ? ? || (size & MALLOC_ALIGN_MASK) != 0, 0))
>>
>> Should this use aligned_OK?
>>
>> The aligned_OK macro should be used in a lot more places :-(
>>
>
> Fixed. ?Here is the updated patch. ?OK to install?

This looks good to me.

Please check this in.

Cheers,
Carlos.


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