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,
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to