[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