svn commit: r354694 - in head: lib/libc/gen sys/sys
Brooks Davis
brooks at FreeBSD.org
Wed Nov 13 21:51:56 UTC 2019
Author: brooks
Date: Wed Nov 13 21:51:55 2019
New Revision: 354694
URL: https://svnweb.freebsd.org/changeset/base/354694
Log:
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
Modified:
head/lib/libc/gen/auxv.3
head/lib/libc/gen/auxv.c
head/sys/sys/param.h
Modified: head/lib/libc/gen/auxv.3
==============================================================================
--- head/lib/libc/gen/auxv.3 Wed Nov 13 21:49:46 2019 (r354693)
+++ head/lib/libc/gen/auxv.3 Wed Nov 13 21:51:55 2019 (r354694)
@@ -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
Modified: head/lib/libc/gen/auxv.c
==============================================================================
--- head/lib/libc/gen/auxv.c Wed Nov 13 21:49:46 2019 (r354693)
+++ head/lib/libc/gen/auxv.c Wed Nov 13 21:51:55 2019 (r354694)
@@ -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);
@@ -146,6 +150,18 @@ _elf_aux_info(int aux, void *buf, int buflen)
res = 0;
} 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)) {
Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h Wed Nov 13 21:49:46 2019 (r354693)
+++ head/sys/sys/param.h Wed Nov 13 21:51:55 2019 (r354694)
@@ -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,
More information about the svn-src-head
mailing list