[v6,2/4] rtld: Remove DL_ARGV_NOT_RELRO and make _dl_skip_args const
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
_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.
---
v6:
- const _dl_skip_args.
v4:
- New patch.
Reviewed-by: Florian Weimer <fweimer@redhat.com>
Tested-by: Florian Weimer <fweimer@redhat.com>
---
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
Comments
On 05/05/2022 10:58, Szabolcs Nagy via Libc-alpha wrote:
> _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.
>
> ---
> v6:
> - const _dl_skip_args.
> v4:
> - New patch.
> Reviewed-by: Florian Weimer <fweimer@redhat.com>
> Tested-by: Florian Weimer <fweimer@redhat.com>
LGTM to me as well.
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 b5070d453f..71f7095def 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -157,16 +157,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-2022 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-2022 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 4a5e698db2..f3d3c78927 100644
> --- a/sysdeps/generic/ldsodefs.h
> +++ b/sysdeps/generic/ldsodefs.h
> @@ -762,18 +762,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-2022 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-2022 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-2022 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 */
@@ -157,16 +157,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
@@ -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
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* System-specific settings for dynamic linker code. Alpha version.
- Copyright (C) 2002-2022 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
@@ -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
@@ -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
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* System-specific settings for dynamic linker code. C-SKY version.
- Copyright (C) 2018-2022 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
@@ -762,18 +762,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]
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* System-specific settings for dynamic linker code. IA-64 version.
- Copyright (C) 2002-2022 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
@@ -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
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* System-specific settings for dynamic linker code. S/390 version.
- Copyright (C) 2014-2022 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
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* System-specific settings for dynamic linker code. SPARC version.
- Copyright (C) 2002-2022 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
@@ -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 */