Author: bdrewery
Date: Thu May 26 23:19:39 2016
New Revision: 300793
URL: https://svnweb.freebsd.org/changeset/base/300793

Log:
  exec: Provide execpath in imgp for the process_exec hook.
  
  This was previously set after the hook and only if auxargs were present.
  Now always provide it if possible.
  
  MFC after:    2 weeks
  Reviewed by:  kib
  Sponsored by: EMC / Isilon Storage Division
  Differential Revision:        https://reviews.freebsd.org/D6546

Modified:
  head/sys/kern/kern_exec.c

Modified: head/sys/kern/kern_exec.c
==============================================================================
--- head/sys/kern/kern_exec.c   Thu May 26 23:18:54 2016        (r300792)
+++ head/sys/kern/kern_exec.c   Thu May 26 23:19:39 2016        (r300793)
@@ -568,6 +568,19 @@ interpret:
        /* The new credentials are installed into the process later. */
 
        /*
+        * Do the best to calculate the full path to the image file.
+        */
+       if (args->fname != NULL && args->fname[0] == '/')
+               imgp->execpath = args->fname;
+       else {
+               VOP_UNLOCK(imgp->vp, 0);
+               if (vn_fullpath(td, imgp->vp, &imgp->execpath,
+                   &imgp->freepath) != 0)
+                       imgp->execpath = args->fname;
+               vn_lock(imgp->vp, LK_EXCLUSIVE | LK_RETRY);
+       }
+
+       /*
         *      If the current process has a special image activator it
         *      wants to try first, call it.   For example, emulating shell
         *      scripts differently.
@@ -629,6 +642,9 @@ interpret:
                        crfree(imgp->newcred);
                        imgp->newcred = NULL;
                }
+               imgp->execpath = NULL;
+               free(imgp->freepath, M_TEMP);
+               imgp->freepath = NULL;
                /* set new name to that of the interpreter */
                NDINIT(&nd, LOOKUP, LOCKLEAF | FOLLOW | SAVENAME,
                    UIO_SYSSPACE, imgp->interpreter_name, td);
@@ -642,14 +658,6 @@ interpret:
         */
        VOP_UNLOCK(imgp->vp, 0);
 
-       /*
-        * Do the best to calculate the full path to the image file.
-        */
-       if (imgp->auxargs != NULL &&
-           ((args->fname != NULL && args->fname[0] == '/') ||
-            vn_fullpath(td, imgp->vp, &imgp->execpath, &imgp->freepath) != 0))
-               imgp->execpath = args->fname;
-
        if (disallow_high_osrel &&
            P_OSREL_MAJOR(p->p_osrel) > P_OSREL_MAJOR(__FreeBSD_version)) {
                error = ENOEXEC;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to