svn commit: r230495 - head/usr.sbin/jail
Martin Matuska
mm at FreeBSD.org
Tue Jan 24 08:04:39 UTC 2012
Author: mm
Date: Tue Jan 24 08:04:38 2012
New Revision: 230495
URL: http://svn.freebsd.org/changeset/base/230495
Log:
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
MFC after: 2 weeks
Modified:
head/usr.sbin/jail/jail.c
Modified: head/usr.sbin/jail/jail.c
==============================================================================
--- head/usr.sbin/jail/jail.c Tue Jan 24 06:21:38 2012 (r230494)
+++ head/usr.sbin/jail/jail.c Tue Jan 24 08:04:38 2012 (r230495)
@@ -508,6 +508,7 @@ static void
set_param(const char *name, char *value)
{
struct jailparam *param;
+ char path[PATH_MAX];
int i;
static int paramlistsize;
@@ -520,8 +521,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++)
More information about the svn-src-head
mailing list