svn commit: r354928 - in stable/12: lib/libc/gen sys/sys
Brooks Davis
brooks at FreeBSD.org
Thu Nov 21 00:40:14 UTC 2019
Author: brooks
Date: Thu Nov 21 00:40:12 2019
New Revision: 354928
URL: https://svnweb.freebsd.org/changeset/base/354928
Log:
MFC r354694, r354699
r354694:
elf_aux_info: Add support for AT_EXECPATH.
Reviewed by: emaste, sef
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D22353
r354699:
Improve the description of AT_EXECPATH availability.
Reported by: kib
Sponsored by: DARPA, AFRL
Modified:
stable/12/lib/libc/gen/auxv.3
stable/12/lib/libc/gen/auxv.c
stable/12/sys/sys/param.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/lib/libc/gen/auxv.3
==============================================================================
--- stable/12/lib/libc/gen/auxv.3 Thu Nov 21 00:34:39 2019 (r354927)
+++ stable/12/lib/libc/gen/auxv.3 Thu Nov 21 00:40:12 2019 (r354928)
@@ -49,6 +49,12 @@ can be requested (corresponding buffer sizes are speci
.It AT_CANARY
The canary value for SSP (arbitrary sized buffer, as many bytes are
returned as it fits into it, rest is zeroed).
+.It AT_EXECPATH
+The path of executed program
+.Dv (MAXPATHLEN).
+This may not be present if the process was initialized by
+.Xr fexecve 2
+and the namecache no longer contains the file's name.
.It AT_HWCAP
CPU / hardware feature flags
.Dv (sizeof(u_long)).
Modified: stable/12/lib/libc/gen/auxv.c
==============================================================================
--- stable/12/lib/libc/gen/auxv.c Thu Nov 21 00:34:39 2019 (r354927)
+++ stable/12/lib/libc/gen/auxv.c Thu Nov 21 00:40:12 2019 (r354928)
@@ -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: stable/12/sys/sys/param.h
==============================================================================
--- stable/12/sys/sys/param.h Thu Nov 21 00:34:39 2019 (r354927)
+++ stable/12/sys/sys/param.h Thu Nov 21 00:40:12 2019 (r354928)
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1201502 /* Master, propagated to newvers */
+#define __FreeBSD_version 1201503 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
More information about the svn-src-stable-12
mailing list