use AT_EXECFN, if available, for dynamic linker to identify main program
fallback to argv[0] as before. unlike argv[0], AT_EXECFN was a valid (but possibly relative) pathname for the new program image at the time the execve syscall was made. as a special case, ignore AT_EXECFN if it begins with "/proc/", in order not to give bogus (and possibly harmful) results when fexecve was used.
This commit is contained in:
parent
a897a20a57
commit
cc51505a32
1 changed files with 5 additions and 1 deletions
|
|
@ -1016,7 +1016,11 @@ void *__dynlink(int argc, char **argv)
|
|||
}
|
||||
if (app->tls_size) app->tls_image = (char *)app->base + tls_image;
|
||||
if (interp_off) lib->name = (char *)app->base + interp_off;
|
||||
app->name = argv[0];
|
||||
if ((aux[0] & (1UL<<AT_EXECFN))
|
||||
&& strncmp((char *)aux[AT_EXECFN], "/proc/", 6))
|
||||
app->name = (char *)aux[AT_EXECFN];
|
||||
else
|
||||
app->name = argv[0];
|
||||
app->kernel_mapped = 1;
|
||||
app->dynv = (void *)(app->base + find_dyn(
|
||||
(void *)aux[AT_PHDR], aux[AT_PHNUM], aux[AT_PHENT]));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue