summaryrefslogtreecommitdiff
path: root/backport-ldconfig-Fixes-for-skipping-temporary-files.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-03 06:28:41 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-03 06:28:41 +0000
commitd20db0561a6a36f914fde030512503b114ef9a0c (patch)
treed4e5e3494d95c269a1cee6195f11bf3201bcadbf /backport-ldconfig-Fixes-for-skipping-temporary-files.patch
parent016343d99b1b269d7246ef1e143d4b54914433d4 (diff)
Diffstat (limited to 'backport-ldconfig-Fixes-for-skipping-temporary-files.patch')
-rw-r--r--backport-ldconfig-Fixes-for-skipping-temporary-files.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/backport-ldconfig-Fixes-for-skipping-temporary-files.patch b/backport-ldconfig-Fixes-for-skipping-temporary-files.patch
new file mode 100644
index 0000000..1fa1061
--- /dev/null
+++ b/backport-ldconfig-Fixes-for-skipping-temporary-files.patch
@@ -0,0 +1,68 @@
+From cfb5a97a93ea656e3b2263e42142a4032986d9ba Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Mon, 23 Oct 2023 12:53:16 +0200
+Subject: [PATCH] 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").
+
+Reference:https://sourceware.org/git/?p=glibc.git;a=commit;h=cfb5a97a93ea656e3b2263e42142a4032986d9ba
+---
+ elf/ldconfig.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/elf/ldconfig.c b/elf/ldconfig.c
+index 73b5ef27..5812a951 100644
+--- a/elf/ldconfig.c
++++ b/elf/ldconfig.c
+@@ -746,6 +746,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
+@@ -755,8 +766,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")
+@@ -764,10 +774,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;
+ }
+--
+2.33.0
+