diff --git a/glibc-rh2248915.patch b/glibc-rh2248915.patch new file mode 100644 index 0000000..8ff2042 --- /dev/null +++ b/glibc-rh2248915.patch @@ -0,0 +1,60 @@ +Author: Florian Weimer +Date: Mon Oct 23 12:53:16 2023 +0200 + + ldconfig: Fixes for skipping temporary files. + + Arguments to a memchr call were swapped, causing incorrect skipping + of files. + + Files related to dpkg have different names: they actually end in + .dpkg-new and .dpkg-tmp, not .tmp as I mistakenly assumed. + + Fixes commit 2aa0974d2573441bffd59 ("elf: ldconfig should skip + temporary files created by package managers"). + +diff --git a/elf/ldconfig.c b/elf/ldconfig.c +index 02387a169c902f01..bccd386761d8cbb2 100644 +--- a/elf/ldconfig.c ++++ b/elf/ldconfig.c +@@ -661,6 +661,17 @@ struct dlib_entry + struct dlib_entry *next; + }; + ++/* Return true if the N bytes at NAME end with with the characters in ++ the string SUFFIX. (NAME[N + 1] does not have to be a null byte.) ++ Expected to be called with a string literal for SUFFIX. */ ++static inline bool ++endswithn (const char *name, size_t n, const char *suffix) ++{ ++ return (n >= strlen (suffix) ++ && memcmp (name + n - strlen (suffix), suffix, ++ strlen (suffix)) == 0); ++} ++ + /* Skip some temporary DSO files. These files may be partially written + and lead to ldconfig crashes when examined. */ + static bool +@@ -670,8 +681,7 @@ skip_dso_based_on_name (const char *name, size_t len) + names like these are never really DSOs we want to look at. */ + if (len >= sizeof (".#prelink#") - 1) + { +- if (strcmp (name + len - sizeof (".#prelink#") + 1, +- ".#prelink#") == 0) ++ if (endswithn (name, len, ".#prelink#")) + return true; + if (len >= sizeof (".#prelink#.XXXXXX") - 1 + && memcmp (name + len - sizeof (".#prelink#.XXXXXX") +@@ -679,10 +689,11 @@ skip_dso_based_on_name (const char *name, size_t len) + return true; + } + /* Skip temporary files created by RPM. */ +- if (memchr (name, len, ';') != NULL) ++ if (memchr (name, ';', len) != NULL) + return true; + /* Skip temporary files created by dpkg. */ +- if (len > 4 && memcmp (name + len - 4, ".tmp", 4) == 0) ++ if (endswithn (name, len, ".dpkg-new") ++ || endswithn (name, len, ".dpkg-tmp")) + return true; + return false; + } diff --git a/glibc.spec b/glibc.spec index 4009d5f..a258b02 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 20 +%global baserelease 21 Release: %{baserelease}%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for @@ -232,6 +232,7 @@ Patch17: glibc-cs-path.patch Patch23: glibc-python3.patch Patch24: glibc-rh2244688.patch Patch25: glibc-rh2244992.patch +Patch26: glibc-rh2248915.patch ############################################################################## # Continued list of core "glibc" package information: @@ -2202,6 +2203,9 @@ update_gconv_modules_cache () %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared %changelog +* Sat Nov 11 2023 Florian Weimer - 2.38.9000-21 +- Fix missing entries in /etc/ld.so.cache (#2248915) + * Sat Nov 11 2023 Florian Weimer - 2.38.9000-20 - Drop glibc-rh2248502-*.patch, workaround applied upstream - Auto-sync with upstream branch master,