Date: Fri, 22 Oct 2004 13:06:24 +0300 From: Andriy Gapon <avg@icyb.net.ua> To: freebsd-questions@freebsd.org, freebsd-current@freebsd.org Subject: linux emulation: "/ " resolves to real root dir; why ? Message-ID: <4178DBA0.8050605@icyb.net.ua>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4178DBA0.8050605>