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: 8e7f379f71 ("ike-sa: Sort CHILD_SAs by CPU ID")
This commit is contained in:
@@ -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,
|
qsort_r(start, array->count, get_size(array, 1), &data,
|
||||||
compare_elements);
|
compare_elements);
|
||||||
#else /* !HAVE_QSORT_R */
|
#else /* !HAVE_QSORT_R */
|
||||||
|
sort_data_t *recursive;
|
||||||
|
|
||||||
|
recursive = sort_data->get(sort_data);
|
||||||
sort_data->set(sort_data, &data);
|
sort_data->set(sort_data, &data);
|
||||||
qsort(start, array->count, get_size(array, 1), compare_elements);
|
qsort(start, array->count, get_size(array, 1), compare_elements);
|
||||||
|
sort_data->set(sort_data, recursive);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user