aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2024-01-10 16:20:24 +0000
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2024-07-08 09:41:45 +0100
commite6b927e2f90c2e1739a65fdc3b13de3a51426320 (patch)
tree30cbf6ae3672bb7a79a380481b448ab6c152c7c9
parentcb02a617fbd9591e4c78d3f9e5135e499a4dca30 (diff)
downloadglibc-e6b927e2f90c2e1739a65fdc3b13de3a51426320.zip
glibc-e6b927e2f90c2e1739a65fdc3b13de3a51426320.tar.gz
glibc-e6b927e2f90c2e1739a65fdc3b13de3a51426320.tar.bz2
aarch64: Ignore GCS property of ld.so
check_gcs is called for each dependency of a DSO, but the GNU property of the ld.so is not processed so ldso->l_mach.gcs may not be correct. Just assume ld.so is GCS compatible independently of the ELF marking.
-rw-r--r--sysdeps/aarch64/dl-gcs.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sysdeps/aarch64/dl-gcs.c b/sysdeps/aarch64/dl-gcs.c
index 764b8a5..b81aa30 100644
--- a/sysdeps/aarch64/dl-gcs.c
+++ b/sysdeps/aarch64/dl-gcs.c
@@ -32,6 +32,11 @@ fail (struct link_map *l, const char *program)
static void
check_gcs (struct link_map *l, const char *program)
{
+#ifdef SHARED
+ /* Ignore GCS marking on ld.so: its properties are not processed. */
+ if (l->l_real == &GL(dl_rtld_map))
+ return;
+#endif
if (!l->l_mach.gcs)
{
if (GLRO(dl_aarch64_gcs_policy) == 2 || !program)