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

Andriy Gapon avg at
Fri Oct 22 03:06:33 PDT 2004

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

More information about the freebsd-questions mailing list