Author: mm
Date: Tue Feb  7 17:47:04 2012
New Revision: 231139
URL: http://svn.freebsd.org/changeset/base/231139

Log:
  MFC r230495:
  Try resolving jail path with realpath(3).
  
  jail(8) does a chdir(2) to the given path argument. Kernel evaluates the
  jail path from the new cwd and not from the original cwd, which leads to
  undesired behavior if given a relative path.
  
  Reviewed by:  jamie

Modified:
  stable/8/usr.sbin/jail/jail.c
Directory Properties:
  stable/8/usr.sbin/jail/   (props changed)

Modified: stable/8/usr.sbin/jail/jail.c
==============================================================================
--- stable/8/usr.sbin/jail/jail.c       Tue Feb  7 17:46:02 2012        
(r231138)
+++ stable/8/usr.sbin/jail/jail.c       Tue Feb  7 17:47:04 2012        
(r231139)
@@ -500,6 +500,7 @@ static void
 set_param(const char *name, char *value)
 {
        struct jailparam *param;
+       char path[PATH_MAX];
        int i;
 
        static int paramlistsize;
@@ -512,8 +513,13 @@ set_param(const char *name, char *value)
        }
 
        /* jail_set won't chdir along with its chroot, so do it here. */
-       if (!strcmp(name, "path") && chdir(value) < 0)
-               err(1, "chdir: %s", value);
+       if (!strcmp(name, "path")) {
+               /* resolve the path with realpath(3) */
+               if (realpath(value, path) != NULL)
+                       value = path;
+               if (chdir(value) < 0)
+                       err(1, "chdir: %s", value);
+       }
 
        /* Check for repeat parameters */
        for (i = 0; i < nparams; i++)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to