AT_EXECPATH aux_info vector contains path of interpreter when directly exec'ing rtld

From: Ryan Stone <rysto32_at_gmail.com>
Date: Fri, 20 Dec 2019 16:26:41 -0500
I've noticed that on head, if I directly execute rtld to run an
executable, AT_EXECPATH contains the path to rtld on head (on
12.0-RELEASE it will contain nothing).  This is causing me a problem
because clang uses AT_EXECPATH to preferentially locate where it's
installed, which it uses to locate its driver programs.

The end result is that clang can no longer successfully be executed
from a process in capability mode, whereas before I could fexecve rtld
and give it a pre-opened file descriptor to /usr/bin/clang.

I've put together a quick test program demonstrating the problem:

https://people.freebsd.org/~rstone/getprogname.c

On 12.0-RELEASE, directly executing rtld to run this program gives this output:
$ /libexec/ld-elf.so.1 -- ./progname
progname: progname
argv[0]:  ./progname
elf_aux_info failed: No such file or directory

On head, I get this instead:
/libexec/ld-elf.so.1 -- ./progname
progname: progname
argv[0]:  ./progname
AT_EXECPATH: /libexec/ld-elf.so.1
Received on Fri Dec 20 2019 - 20:26:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:22 UTC