linux emulation: "/ " resolves to real root dir; why ?

From: Andriy Gapon <avg_at_icyb.net.ua>
Date: Fri, 22 Oct 2004 13:06:24 +0300
Under Linux emulation "/"  resolves to real root directory, not
/compat/linux directory and I am very curious why this is so.

I see that in linux_emul_convpath() there is a special check for this
case with the following comment:

/*
 * We now compare the vnode of the linux_root to the one
 * vnode asked. If they resolve to be the same, then we
 * ignore the match so that the real root gets used.
 * This avoids the problem of traversing "../.." to find the
 * root directory and never finding it, because "/" resolves
 * to the emulation root directory. This is expensive :-(
 */


Because of such behavior "mkdir -p" (in linux base 7) is broken in cases
where more than one path components needs to be created - mkdir first
chdir()s to / and then iteratively mkdir()s and chdir()s to subdirectories.

My rationale for throwing out that check is that no linux program should
ever need to access real root directory, and in case of a user using an
interactive linux shell he should be smart enough to break out of
/compat/linux (very easy).

I have already posted this question to freebsd-emulation list, but got
no responses so far.

-- 
Andriy Gapon
Received on Fri Oct 22 2004 - 08:06:33 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:19 UTC