Commit 7fa4d54b3c for strongswan.org

commit 7fa4d54b3c6906d95fab932e28a7c43b370927c0
Author: Tobias Brunner <tobias@strongswan.org>
Date:   Tue Jan 20 10:58:01 2026 +0100

    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
 	}
 }