From: Joe Simmons-Talbott Date: Fri, 30 Jun 2023 14:31:45 +0000 (+0000) Subject: setenv.c: Get rid of alloca. X-Git-Tag: glibc-2.38~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9401024e5e6be0e1c3870e185daae865cd4501f4;p=thirdparty%2Fglibc.git setenv.c: Get rid of alloca. Use malloc rather than alloca to avoid potential stack overflow. Reviewed-by: Adhemerval Zanella --- diff --git a/stdlib/setenv.c b/stdlib/setenv.c index ba5257d3bfa..cc71287fcc2 100644 --- a/stdlib/setenv.c +++ b/stdlib/setenv.c @@ -182,18 +182,11 @@ __add_to_environ (const char *name, const char *value, const char *combined, { const size_t varlen = namelen + 1 + vallen; #ifdef USE_TSEARCH - char *new_value; - int use_alloca = __libc_use_alloca (varlen); - if (__builtin_expect (use_alloca, 1)) - new_value = (char *) alloca (varlen); - else + char *new_value = malloc (varlen); + if (new_value == NULL) { - new_value = malloc (varlen); - if (new_value == NULL) - { - UNLOCK; - return -1; - } + UNLOCK; + return -1; } # ifdef _LIBC __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), @@ -209,35 +202,14 @@ __add_to_environ (const char *name, const char *value, const char *combined, #endif { #ifdef USE_TSEARCH - if (__glibc_unlikely (! use_alloca)) - np = new_value; - else + np = new_value; #endif - { - np = malloc (varlen); - if (__glibc_unlikely (np == NULL)) - { - UNLOCK; - return -1; - } - -#ifdef USE_TSEARCH - memcpy (np, new_value, varlen); -#else - memcpy (np, name, namelen); - np[namelen] = '='; - memcpy (&np[namelen + 1], value, vallen); -#endif - } /* And remember the value. */ STORE_VALUE (np); } #ifdef USE_TSEARCH else - { - if (__glibc_unlikely (! use_alloca)) - free (new_value); - } + free (new_value); #endif }