300 lines
11 KiB
Diff
300 lines
11 KiB
Diff
From 86147bbeec25624cb26bb7646cdbc3a49bc56bf5 Mon Sep 17 00:00:00 2001
|
|
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
|
|
Date: Tue, 3 May 2021 17:01:44 +0100
|
|
Subject: [PATCH 2/4] rtld: Remove DL_ARGV_NOT_RELRO and make _dl_skip_args
|
|
const
|
|
|
|
Conflict:adapt 2022 to 2021
|
|
Reference:https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=86147bbeec25624cb26bb7646cdbc3a49bc56bf5
|
|
|
|
_dl_skip_args is always 0, so the target specific code that modifies
|
|
argv after relro protection is applied is no longer used.
|
|
|
|
After the patch relro protection is applied to _dl_argv consistently
|
|
on all targets.
|
|
|
|
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
|
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
|
---
|
|
elf/rtld.c | 10 ++--------
|
|
sysdeps/aarch64/dl-sysdep.h | 4 ----
|
|
sysdeps/alpha/dl-sysdep.h | 23 -----------------------
|
|
sysdeps/arc/dl-sysdep.h | 4 ----
|
|
sysdeps/arm/dl-sysdep.h | 4 ----
|
|
sysdeps/csky/dl-sysdep.h | 23 -----------------------
|
|
sysdeps/generic/ldsodefs.h | 13 +++----------
|
|
sysdeps/ia64/dl-sysdep.h | 23 -----------------------
|
|
sysdeps/nios2/dl-sysdep.h | 4 ----
|
|
sysdeps/s390/s390-32/dl-sysdep.h | 23 -----------------------
|
|
sysdeps/sparc/dl-sysdep.h | 23 -----------------------
|
|
sysdeps/unix/sysv/linux/ia64/dl-sysdep.h | 4 ----
|
|
12 files changed, 5 insertions(+), 153 deletions(-)
|
|
delete mode 100644 sysdeps/alpha/dl-sysdep.h
|
|
delete mode 100644 sysdeps/csky/dl-sysdep.h
|
|
delete mode 100644 sysdeps/ia64/dl-sysdep.h
|
|
delete mode 100644 sysdeps/s390/s390-32/dl-sysdep.h
|
|
delete mode 100644 sysdeps/sparc/dl-sysdep.h
|
|
|
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
|
index 6e8ed430e2..069940d73f 100644
|
|
--- a/elf/rtld.c
|
|
+++ b/elf/rtld.c
|
|
@@ -156,16 +156,10 @@ static void dl_main_state_init (struct dl_main_state *state);
|
|
extern char **_environ attribute_hidden;
|
|
static void process_envvars (struct dl_main_state *state);
|
|
|
|
-#ifdef DL_ARGV_NOT_RELRO
|
|
-int _dl_argc attribute_hidden;
|
|
-char **_dl_argv = NULL;
|
|
-/* Nonzero if we were run directly. */
|
|
-unsigned int _dl_skip_args attribute_hidden;
|
|
-#else
|
|
int _dl_argc attribute_relro attribute_hidden;
|
|
char **_dl_argv attribute_relro = NULL;
|
|
-unsigned int _dl_skip_args attribute_relro attribute_hidden;
|
|
-#endif
|
|
+/* Always 0, only kept for not-yet-updated target start code. */
|
|
+const unsigned int _dl_skip_args attribute_hidden;
|
|
rtld_hidden_data_def (_dl_argv)
|
|
|
|
#ifndef THREAD_SET_STACK_GUARD
|
|
diff --git a/sysdeps/aarch64/dl-sysdep.h b/sysdeps/aarch64/dl-sysdep.h
|
|
index 667786671c..1516dd7d3f 100644
|
|
--- a/sysdeps/aarch64/dl-sysdep.h
|
|
+++ b/sysdeps/aarch64/dl-sysdep.h
|
|
@@ -18,8 +18,4 @@
|
|
|
|
#include_next <dl-sysdep.h>
|
|
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
-
|
|
#define DL_EXTERN_PROTECTED_DATA
|
|
diff --git a/sysdeps/alpha/dl-sysdep.h b/sysdeps/alpha/dl-sysdep.h
|
|
deleted file mode 100644
|
|
index 3099ee419f..0000000000
|
|
--- a/sysdeps/alpha/dl-sysdep.h
|
|
+++ /dev/null
|
|
@@ -1,23 +0,0 @@
|
|
-/* System-specific settings for dynamic linker code. Alpha version.
|
|
- Copyright (C) 2002-2021 Free Software Foundation, Inc.
|
|
- This file is part of the GNU C Library.
|
|
-
|
|
- The GNU C Library is free software; you can redistribute it and/or
|
|
- modify it under the terms of the GNU Lesser General Public
|
|
- License as published by the Free Software Foundation; either
|
|
- version 2.1 of the License, or (at your option) any later version.
|
|
-
|
|
- The GNU C Library is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
- Lesser General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Lesser General Public
|
|
- License along with the GNU C Library. If not, see
|
|
- <https://www.gnu.org/licenses/>. */
|
|
-
|
|
-#include_next <dl-sysdep.h>
|
|
-
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
diff --git a/sysdeps/arc/dl-sysdep.h b/sysdeps/arc/dl-sysdep.h
|
|
index da060ceeee..cf4d160a73 100644
|
|
--- a/sysdeps/arc/dl-sysdep.h
|
|
+++ b/sysdeps/arc/dl-sysdep.h
|
|
@@ -18,8 +18,4 @@
|
|
|
|
#include_next <dl-sysdep.h>
|
|
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
-
|
|
#define DL_EXTERN_PROTECTED_DATA
|
|
diff --git a/sysdeps/arm/dl-sysdep.h b/sysdeps/arm/dl-sysdep.h
|
|
index ce7a84a7de..7a99107436 100644
|
|
--- a/sysdeps/arm/dl-sysdep.h
|
|
+++ b/sysdeps/arm/dl-sysdep.h
|
|
@@ -18,8 +18,4 @@
|
|
|
|
#include_next <dl-sysdep.h>
|
|
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
-
|
|
#define DL_EXTERN_PROTECTED_DATA
|
|
diff --git a/sysdeps/csky/dl-sysdep.h b/sysdeps/csky/dl-sysdep.h
|
|
deleted file mode 100644
|
|
index fc8a58b94c..0000000000
|
|
--- a/sysdeps/csky/dl-sysdep.h
|
|
+++ /dev/null
|
|
@@ -1,23 +0,0 @@
|
|
-/* System-specific settings for dynamic linker code. C-SKY version.
|
|
- Copyright (C) 2018-2021 Free Software Foundation, Inc.
|
|
- This file is part of the GNU C Library.
|
|
-
|
|
- The GNU C Library is free software; you can redistribute it and/or
|
|
- modify it under the terms of the GNU Lesser General Public
|
|
- License as published by the Free Software Foundation; either
|
|
- version 2.1 of the License, or (at your option) any later version.
|
|
-
|
|
- The GNU C Library is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
- Lesser General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Lesser General Public
|
|
- License along with the GNU C Library. If not, see
|
|
- <https://www.gnu.org/licenses/>. */
|
|
-
|
|
-#include_next <dl-sysdep.h>
|
|
-
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
|
index b69ea2caeb..6716e1f382 100644
|
|
--- a/sysdeps/generic/ldsodefs.h
|
|
+++ b/sysdeps/generic/ldsodefs.h
|
|
@@ -753,18 +753,11 @@ rtld_hidden_proto (__libc_stack_end)
|
|
|
|
/* Parameters passed to the dynamic linker. */
|
|
extern int _dl_argc attribute_hidden attribute_relro;
|
|
-extern char **_dl_argv
|
|
-#ifndef DL_ARGV_NOT_RELRO
|
|
- attribute_relro
|
|
-#endif
|
|
- ;
|
|
+extern char **_dl_argv attribute_relro;
|
|
rtld_hidden_proto (_dl_argv)
|
|
#if IS_IN (rtld)
|
|
-extern unsigned int _dl_skip_args attribute_hidden
|
|
-# ifndef DL_ARGV_NOT_RELRO
|
|
- attribute_relro
|
|
-# endif
|
|
- ;
|
|
+/* Always 0, only kept for not-yet-updated target start code. */
|
|
+extern const unsigned int _dl_skip_args attribute_hidden;
|
|
#endif
|
|
#define rtld_progname _dl_argv[0]
|
|
|
|
diff --git a/sysdeps/ia64/dl-sysdep.h b/sysdeps/ia64/dl-sysdep.h
|
|
deleted file mode 100644
|
|
index e3a58bec24..0000000000
|
|
--- a/sysdeps/ia64/dl-sysdep.h
|
|
+++ /dev/null
|
|
@@ -1,23 +0,0 @@
|
|
-/* System-specific settings for dynamic linker code. IA-64 version.
|
|
- Copyright (C) 2002-2021 Free Software Foundation, Inc.
|
|
- This file is part of the GNU C Library.
|
|
-
|
|
- The GNU C Library is free software; you can redistribute it and/or
|
|
- modify it under the terms of the GNU Lesser General Public
|
|
- License as published by the Free Software Foundation; either
|
|
- version 2.1 of the License, or (at your option) any later version.
|
|
-
|
|
- The GNU C Library is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
- Lesser General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Lesser General Public
|
|
- License along with the GNU C Library; if not, see
|
|
- <https://www.gnu.org/licenses/>. */
|
|
-
|
|
-#include_next <dl-sysdep.h>
|
|
-
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
diff --git a/sysdeps/nios2/dl-sysdep.h b/sysdeps/nios2/dl-sysdep.h
|
|
index 0354650042..257b37c258 100644
|
|
--- a/sysdeps/nios2/dl-sysdep.h
|
|
+++ b/sysdeps/nios2/dl-sysdep.h
|
|
@@ -18,8 +18,4 @@
|
|
|
|
#include_next <dl-sysdep.h>
|
|
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
-
|
|
#define DL_EXTERN_PROTECTED_DATA
|
|
diff --git a/sysdeps/s390/s390-32/dl-sysdep.h b/sysdeps/s390/s390-32/dl-sysdep.h
|
|
deleted file mode 100644
|
|
index 699b50f156..0000000000
|
|
--- a/sysdeps/s390/s390-32/dl-sysdep.h
|
|
+++ /dev/null
|
|
@@ -1,23 +0,0 @@
|
|
-/* System-specific settings for dynamic linker code. S/390 version.
|
|
- Copyright (C) 2014-2021 Free Software Foundation, Inc.
|
|
- This file is part of the GNU C Library.
|
|
-
|
|
- The GNU C Library is free software; you can redistribute it and/or
|
|
- modify it under the terms of the GNU Lesser General Public
|
|
- License as published by the Free Software Foundation; either
|
|
- version 2.1 of the License, or (at your option) any later version.
|
|
-
|
|
- The GNU C Library is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
- Lesser General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Lesser General Public
|
|
- License along with the GNU C Library. If not, see
|
|
- <https://www.gnu.org/licenses/>. */
|
|
-
|
|
-#include_next <dl-sysdep.h>
|
|
-
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
diff --git a/sysdeps/sparc/dl-sysdep.h b/sysdeps/sparc/dl-sysdep.h
|
|
deleted file mode 100644
|
|
index f32f16a107..0000000000
|
|
--- a/sysdeps/sparc/dl-sysdep.h
|
|
+++ /dev/null
|
|
@@ -1,23 +0,0 @@
|
|
-/* System-specific settings for dynamic linker code. SPARC version.
|
|
- Copyright (C) 2002-2021 Free Software Foundation, Inc.
|
|
- This file is part of the GNU C Library.
|
|
-
|
|
- The GNU C Library is free software; you can redistribute it and/or
|
|
- modify it under the terms of the GNU Lesser General Public
|
|
- License as published by the Free Software Foundation; either
|
|
- version 2.1 of the License, or (at your option) any later version.
|
|
-
|
|
- The GNU C Library is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
- Lesser General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Lesser General Public
|
|
- License along with the GNU C Library; if not, see
|
|
- <https://www.gnu.org/licenses/>. */
|
|
-
|
|
-#include_next <dl-sysdep.h>
|
|
-
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
diff --git a/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h b/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h
|
|
index 0d2a1d093a..aa1de6b361 100644
|
|
--- a/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h
|
|
+++ b/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h
|
|
@@ -48,8 +48,4 @@ extern int _dl_sysinfo_break attribute_hidden;
|
|
".previous");
|
|
#endif
|
|
|
|
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
|
- might write into it after _dl_start returns. */
|
|
-#define DL_ARGV_NOT_RELRO 1
|
|
-
|
|
#endif /* dl-sysdep.h */
|
|
--
|
|
2.27.0
|
|
|