From 1318d2cac6d3ceeda073a8bdb0e688d6efccab88 Mon Sep 17 00:00:00 2001 From: Florian Engelhardt Date: Sat, 8 Jun 2024 18:51:46 +0200 Subject: [PATCH 1/2] fix memleak due to missing `pthread_attr_destroy()`-call --- Zend/zend_call_stack.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Zend/zend_call_stack.c b/Zend/zend_call_stack.c index 702aad77ce9a1..8b8f0a55ecb5a 100644 --- a/Zend/zend_call_stack.c +++ b/Zend/zend_call_stack.c @@ -119,11 +119,13 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) error = pthread_getattr_np(pthread_self(), &attr); if (error) { + pthread_attr_destroy(&attr); return false; } error = pthread_attr_getstack(&attr, &addr, &max_size); if (error) { + pthread_attr_destroy(&attr); return false; } @@ -133,6 +135,7 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) /* In glibc prior to 2.8, addr and size include the guard pages */ error = pthread_attr_getguardsize(&attr, &guard_size); if (error) { + pthread_attr_destroy(&attr); return false; } @@ -144,6 +147,8 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) stack->base = (int8_t*)addr + max_size; stack->max_size = max_size; + pthread_attr_destroy(&attr); + return true; } # else /* defined(HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */ From 84c3ac2bc03e47ec58faf1b35d28d7ddca0a7fe7 Mon Sep 17 00:00:00 2001 From: Florian Engelhardt Date: Mon, 10 Jun 2024 14:51:47 +0200 Subject: [PATCH 2/2] remove not needed call --- Zend/zend_call_stack.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Zend/zend_call_stack.c b/Zend/zend_call_stack.c index 8b8f0a55ecb5a..bbaa8810af9e1 100644 --- a/Zend/zend_call_stack.c +++ b/Zend/zend_call_stack.c @@ -119,7 +119,6 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) error = pthread_getattr_np(pthread_self(), &attr); if (error) { - pthread_attr_destroy(&attr); return false; }