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-all mailing list