|
Message-Id: <20170728144649.3440-1-amonakov@ispras.ru> Date: Fri, 28 Jul 2017 17:46:49 +0300 From: Alexander Monakov <amonakov@...ras.ru> To: musl@...ts.openwall.com Subject: [PATCH] __init_libc: add fallbacks for __progname setup It is possible for argv[0] to be a null pointer, but the __progname variable is used to implement functions in src/legacy/err.c that do not expect it to be null. It is also available to the user via the program_invocation_name alias as a GNU extension, and the implementation in Glibc initializes it to a pointer to empty string rather than NULL. Since argv[0] is usually non-null and it's preferable to keep those variables in BSS, implement the fallbacks in __init_libc, which also allows to have an intermediate fallback to AT_EXECFN. --- src/env/__libc_start_main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c index 5c79be28..18afdc1d 100644 --- a/src/env/__libc_start_main.c +++ b/src/env/__libc_start_main.c @@ -30,10 +30,10 @@ void __init_libc(char **envp, char *pn) __sysinfo = aux[AT_SYSINFO]; libc.page_size = aux[AT_PAGESZ]; - if (pn) { - __progname = __progname_full = pn; - for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1; - } + if (!pn) pn = (void*)aux[AT_EXECFN]; + if (!pn) pn = ""; + __progname = __progname_full = pn; + for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1; __init_tls(aux); __init_ssp((void *)aux[AT_RANDOM]); -- 2.11.0
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.