about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNoah Goldstein <goldstein.w.n@gmail.com>2022-08-08 11:26:22 +0800
committerNoah Goldstein <goldstein.w.n@gmail.com>2022-08-11 22:11:14 +0800
commit302bc33bc53c787da6e74162a7092e9c0fb964a8 (patch)
tree7c6f8bdefc8da6cbb46541c6820bbad7b74c7c51
parentac47d8f6cf9744139adb12f540fb9cc610cac579 (diff)
downloadglibc-302bc33bc53c787da6e74162a7092e9c0fb964a8.tar.gz
glibc-302bc33bc53c787da6e74162a7092e9c0fb964a8.tar.xz
glibc-302bc33bc53c787da6e74162a7092e9c0fb964a8.zip
elf: Replace `strcpy` call with `memcpy` [BZ #29454]
GCC normally does this optimization for us in
strlen_pass::handle_builtin_strcpy but only for optimized
build. To avoid needing to include strcpy.S in the rtld build to
support the debug build, just do the optimization by hand.

(cherry picked from commit 483cfe1a6a33d6335b1901581b41040d2d412511)
-rw-r--r--elf/dl-cache.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/elf/dl-cache.c b/elf/dl-cache.c
index 8bbf110d02..b97c17b3a9 100644
--- a/elf/dl-cache.c
+++ b/elf/dl-cache.c
@@ -509,8 +509,9 @@ _dl_load_cache_lookup (const char *name)
      we are accessing. Therefore we must make the copy of the
      mapping data without using malloc.  */
   char *temp;
-  temp = alloca (strlen (best) + 1);
-  strcpy (temp, best);
+  size_t best_len = strlen (best) + 1;
+  temp = alloca (best_len);
+  memcpy (temp, best, best_len);
   return __strdup (temp);
 }