diff options
Diffstat (limited to 'elf-Replace-nsid-with-args.nsid-BZ-27609.patch')
-rw-r--r-- | elf-Replace-nsid-with-args.nsid-BZ-27609.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/elf-Replace-nsid-with-args.nsid-BZ-27609.patch b/elf-Replace-nsid-with-args.nsid-BZ-27609.patch new file mode 100644 index 0000000..47a7031 --- /dev/null +++ b/elf-Replace-nsid-with-args.nsid-BZ-27609.patch @@ -0,0 +1,50 @@ +From 1e1ecea62e899acb58c3fdf3b320a0833ddd0dff Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" <hjl.tools@gmail.com> +Date: Thu, 30 Sep 2021 10:29:17 -0700 +Subject: [PATCH] elf: Replace nsid with args.nsid [BZ #27609] + +commit ec935dea6332cb22f9881cd1162bad156173f4b0 +Author: Florian Weimer <fweimer@redhat.com> +Date: Fri Apr 24 22:31:15 2020 +0200 + + elf: Implement __libc_early_init + +has + +@@ -856,6 +876,11 @@ no more namespaces available for dlmopen()")); + /* See if an error occurred during loading. */ + if (__glibc_unlikely (exception.errstring != NULL)) + { ++ /* Avoid keeping around a dangling reference to the libc.so link ++ map in case it has been cached in libc_map. */ ++ if (!args.libc_already_loaded) ++ GL(dl_ns)[nsid].libc_map = NULL; ++ + +do_dlopen calls _dl_open with nsid == __LM_ID_CALLER (-2), which calls +dl_open_worker with args.nsid = nsid. dl_open_worker updates args.nsid +if it is __LM_ID_CALLER. After dl_open_worker returns, it is wrong to +use nsid. + +Replace nsid with args.nsid after dl_open_worker returns. This fixes +BZ #27609. +--- + elf/dl-open.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/elf/dl-open.c b/elf/dl-open.c +index a25443f..5295e93 100644 +--- a/elf/dl-open.c ++++ b/elf/dl-open.c +@@ -886,7 +886,7 @@ no more namespaces available for dlmopen()")); + /* Avoid keeping around a dangling reference to the libc.so link + map in case it has been cached in libc_map. */ + if (!args.libc_already_loaded) +- GL(dl_ns)[nsid].libc_map = NULL; ++ GL(dl_ns)[args.nsid].libc_map = NULL; + + /* Remove the object from memory. It may be in an inconsistent + state if relocation failed, for example. */ +-- +1.8.3.1 + |