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

From: Konrad Heuer <kheuer2_at_gwdg.de>
Date: Fri, 22 Oct 2004 13:18:51 +0200 (CEST)
On Fri, 22 Oct 2004, Andriy Gapon wrote:

> 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.

Linux binaries often need to access files outside the emulation directory
tree, just think of data files in the user's homes when running
applications like acroread, linux-mozilla, staroffice etc. So you
absolutely need to break out.

Regards

Konrad Heuer
GWDG, Am Fassberg, 37077 Goettingen, Germany, kheuer2_at_gwdg.de
Received on Fri Oct 22 2004 - 09:18:54 UTC

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