diff --git a/glibc-rh2248502.patch b/glibc-rh2248502.patch new file mode 100644 index 0000000..d9eff1c --- /dev/null +++ b/glibc-rh2248502.patch @@ -0,0 +1,36 @@ +commit d0987c7014d33e96a7a0d170fea8bcc97163cead +Author: Florian Weimer +Date: Thu Nov 23 08:34:30 2023 +0100 + + stdlib: Add another workaround to the insertion sort phase of qsort + + If the comparison function returns negative values incorrectly, it was + possible that we decrement tmp_ptr past the start of the array. + + Improves commit e4d8117b82065dc72e8df80097360e7c05a349b9 ("stdlib: + Avoid another self-comparison in qsort"). + +diff --git a/stdlib/qsort.c b/stdlib/qsort.c +index be01fb5598de2257..6f28abbc7f9719fb 100644 +--- a/stdlib/qsort.c ++++ b/stdlib/qsort.c +@@ -238,8 +238,17 @@ insertion_sort_qsort_partitions (void *const pbase, size_t total_elems, + while ((run_ptr += size) <= end_ptr) + { + tmp_ptr = run_ptr - size; +- while (run_ptr != tmp_ptr && cmp (run_ptr, tmp_ptr, arg) < 0) +- tmp_ptr -= size; ++ /* The initial pointer comparison avoids a call to cmp if the ++ pointer arguments are identical (the call returns zero with a ++ correctly implemented comparison function). The final ++ pointer comparison cannot be reached because the element at ++ base_ptr is the smallest element, but it prevents the loop ++ from running beyond the start of the array with a broken ++ comparison function. */ ++ while (run_ptr != tmp_ptr ++ && cmp (run_ptr, tmp_ptr, arg) < 0 ++ && run_ptr != base_ptr) ++ tmp_ptr -= size; + + tmp_ptr += size; + if (tmp_ptr != run_ptr) diff --git a/glibc.spec b/glibc.spec index 9a3f44f..218a42d 100644 --- a/glibc.spec +++ b/glibc.spec @@ -159,7 +159,7 @@ Version: %{glibcversion} # - It allows using the Release number without the %%dist tag in the dependency # generator to make the generated requires interchangeable between Rawhide # and ELN (.elnYY < .fcXX). -%global baserelease 23 +%global baserelease 24 Release: %{baserelease}%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for @@ -231,6 +231,7 @@ Patch13: glibc-fedora-localedata-rh61908.patch Patch17: glibc-cs-path.patch Patch23: glibc-python3.patch Patch24: glibc-benchtests-aarch64.patch +Patch25: glibc-rh2248502.patch ############################################################################## # Continued list of core "glibc" package information: @@ -2201,6 +2202,9 @@ update_gconv_modules_cache () %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared %changelog +* Thu Nov 23 2023 Florian Weimer - 2.38.9000-24 +- Restore qsort workaround for 389-ds-base. (#2248502) + * Wed Nov 22 2023 Florian Weimer - 2.38.9000-23 - Apply glibc-benchtests-aarch64.patch to fix an aarch64 build failure. - Drop glibc-rh2244688.patch revert. Fix applied upstream.