From 7fa4d54b3c6906d95fab932e28a7c43b370927c0 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 20 Jan 2026 10:58:01 +0100 Subject: [PATCH] array: Handle recursive calls to array_sort() if qsort_r() is not supported Such a recursive call occurs when sorting the array of Child SAs inside an IKE SA that causes comparisons of the child configs and their proposals, which in turn creates a merged array of all transform types and that uses array_sort() and array_bsearch(). Closes strongswan/strongswan#2926 Fixes: 8e7f379f716c ("ike-sa: Sort CHILD_SAs by CPU ID") --- src/libstrongswan/collections/array.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libstrongswan/collections/array.c b/src/libstrongswan/collections/array.c index 8b6c6d739..0543ca24e 100644 --- a/src/libstrongswan/collections/array.c +++ b/src/libstrongswan/collections/array.c @@ -453,8 +453,12 @@ void array_sort(array_t *array, int (*cmp)(const void*,const void*,void*), qsort_r(start, array->count, get_size(array, 1), &data, compare_elements); #else /* !HAVE_QSORT_R */ + sort_data_t *recursive; + + recursive = sort_data->get(sort_data); sort_data->set(sort_data, &data); qsort(start, array->count, get_size(array, 1), compare_elements); + sort_data->set(sort_data, recursive); #endif } }