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:
parent
9d919726a0
commit
eee39f5e93
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user