[PATCH v3] stdlib: Fix qsort memory leak if callback throws (BZ 32058)
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Thu Mar 27 14:20:28 GMT 2025
On 27/03/25 05:37, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>> diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h
>> index cf8a2efe86..ef1fa8ca95 100644
>> --- a/sysdeps/htl/pthreadP.h
>> +++ b/sysdeps/htl/pthreadP.h
>> @@ -23,6 +23,7 @@
>>
>> #include <pthread.h>
>> #include <link.h>
>> +#include <bits/cancelation.h>
>>
>> /* Attribute to indicate thread creation was issued from C11 thrd_create. */
>> #define ATTR_C11_THREAD ((void*)(uintptr_t)-1)
>> @@ -113,4 +114,11 @@ hidden_proto (__pthread_get_cleanup_stack)
>> _Static_assert (sizeof (type) == size, \
>> "sizeof (" #type ") != " #size)
>>
>> +#ifndef pthread_cleanup_combined_push
>> +# define pthread_cleanup_combined_push __pthread_cleanup_push
>> +#endif
>> +#ifndef pthread_cleanup_combined_pop
>> +# define pthread_cleanup_combined_pop __pthread_cleanup_pop
>> +#endif
>
> This does not fix the exception handling bug on Hurd because Hurd does
> not perform combined pushes.
>
> Maybe the Hurd maintainers can help to implement something similar to
> what we have in sysdeps/nptl/pthreadP.h? Or you could mention this in
> comments.
I will xfail the test and add a comment on this file.
>
> This comment in sysdeps/nptl/pthreadP.h should be updated because it's
> not just for pthread_once anymore:
>
> /* Special cleanup macros which register cleanup both using
> __pthread_cleanup_{push,pop} and using cleanup attribute. This is needed
> for pthread_once, so that it supports both throwing exceptions from the
> pthread_once callback (only cleanup attribute works there) and cancellation
> of the thread running the callback if the callback or some routines it
> calls don't have unwind information. */
Ack, I will update it.
>
>
> Thanks,
> Florian
>
More information about the Libc-alpha
mailing list