From: Tobias Brunner Date: Tue, 20 Jan 2026 09:58:01 +0000 (+0100) Subject: array: Handle recursive calls to array_sort() if qsort_r() is not supported X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7fa4d54b3c6906d95fab932e28a7c43b370927c0;p=thirdparty%2Fstrongswan.git 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") --- diff --git a/src/libstrongswan/collections/array.c b/src/libstrongswan/collections/array.c index 8b6c6d7397..0543ca24e6 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 } }