elf_aux_info: Add support for AT_EXECPATH.

Reviewed by:	emaste, sef
MFC after:	3 days
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D22353
This commit is contained in:
Brooks Davis 2019-11-13 21:51:55 +00:00
parent 9d919726a0
commit eee39f5e93
3 changed files with 23 additions and 3 deletions

View File

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd April 25, 2019
.Dd November 13, 2019
.Dt ELF_AUX_INFO 3
.Os
.Sh NAME
@ -48,6 +48,10 @@ can be requested:
.Bl -tag -width AT_OSRELDATE
.It AT_CANARY
The canary value for SSP.
.It AT_EXECPATH
The path of executed program.
This will not be present if the process was initialized by
.Xr fexecve 2 .
.It AT_HWCAP
CPU / hardware feature flags.
.It AT_HWCAP2

View File

@ -69,7 +69,7 @@ __init_elf_aux_vector(void)
static pthread_once_t aux_once = PTHREAD_ONCE_INIT;
static int pagesize, osreldate, canary_len, ncpus, pagesizes_len;
static int hwcap_present, hwcap2_present;
static char *canary, *pagesizes;
static char *canary, *pagesizes, *execpath;
static void *timekeep;
static u_long hwcap, hwcap2;
@ -88,6 +88,10 @@ init_aux(void)
canary_len = aux->a_un.a_val;
break;
case AT_EXECPATH:
execpath = (char *)(aux->a_un.a_ptr);
break;
case AT_HWCAP:
hwcap_present = 1;
hwcap = (u_long)(aux->a_un.a_val);
@ -147,6 +151,18 @@ _elf_aux_info(int aux, void *buf, int buflen)
} else
res = ENOENT;
break;
case AT_EXECPATH:
if (execpath == NULL)
res = ENOENT;
else if (buf == NULL)
res = EINVAL;
else {
if (strlcpy(buf, execpath, buflen) >= buflen)
res = EINVAL;
else
res = 0;
}
break;
case AT_HWCAP:
if (hwcap_present && buflen == sizeof(u_long)) {
*(u_long *)buf = hwcap;

View File

@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 1300056 /* Master, propagated to newvers */
#define __FreeBSD_version 1300057 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,