[arch-projects] Mounting nodev fs with "none" as source.

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Mon Dec 26 17:14:52 EST 2011


On 12/26/2011 06:34 PM, Dave Reisner wrote:
> On Mon, Dec 26, 2011 at 03:38:33PM -0500, Dave Reisner wrote:
>> On Mon, Dec 26, 2011 at 05:21:49PM -0300, Gerardo Exequiel Pozzi wrote:
>>> Hello
>>>
>>> I recently discovered an issue when _not_ using "none" as source of
>>> nodev filesystems. For example in our default fstab for /tmp as
>>> source is used "tmp". If you run "mount -a" under a directory with a
>>> "tmp" directory, /tmp will be mounted again as tmpfs with "fake
>>> source" as $PWD/tmp:
>>>
>>> # mount | grep /tmp
>>> tmp on /tmp type tmpfs (rw,relatime)
>>> # pwd
>>> /root
>>> # mkdir tmp
>>> # mount -a
>>> # mount | grep /tmp
>>> tmp on /tmp type tmpfs (rw,relatime)
>>> /root/tmp on /tmp type tmpfs (rw,relatime)
>> It's insane behavior, and should be fixed in util-linux.
>>
>>> But if using special keyword "none" as source this does not happen.
>>>
>>> # mount | grep /tmp
>>> none on /tmp type tmpfs (rw,relatime)
>>> # pwd
>>> /root
>>> # mkdir none
>>> # mount -a
>>> # mount | grep /tmp
>>> none on /tmp type tmpfs (rw,relatime)
>>>
>>> In the past (when /etc/mtab was not linked to /proc/self/mounts)
>>> weird behaviours appears when using "none" as source, but now seems
>>> that works fine.
>> Yeah... I can tell you from looking through the sources for libmount and
>> mount that "none" is treated specially, and generally results in
>> functions returning NULL. If you recall the problem we ran into with
>> mountpoint from u-l segfaulting in AIF, it was in part because of using
>> "none" for the mounts (and dereferencing the NULL return).
>>
>>> Other ways to workaround this is using the same path as source. I
>>> think we can also change source to "none" of /dev /run /proc
>>> /dev/shm and /dev/pts, looks like more correct. (or using the same
>>> path as source).
>> Correct? I disagree. It shouldn't matter what you call it -- the
>> behavior should be consistent (unless I'm horribly misinformed). Again,
>> blame where blame is due. In the case of a 'nodev' filesystem, the
>> source should just be flat out ignored.
>>
>> d
>>
>>> I tested using none in all nodev fs and shutdown is clean without
>>> errors. what do you think?
>>>
>>> -- 
>>> Gerardo Exequiel Pozzi
>>> \cos^2\alpha + \sin^2\alpha = 1
>>>
> Quick update...
>
> Just as I suspected, libmount will always try to canonicalize the source
> of a device with no regard for what it is. This is a simple change. This
> is a simple change in the fstab parsing to always trust the source when
> you encounter a pseudofs (such as tmpfs, cgroup, rpc_pipefs, etc). Patch
> for this will go out by the end of the night regardless of the mayhem
> that follows...
Thank you!
>
> Digging into this further -- you don't even need to mount /tmp to
> duplicate the bad behavior, e.g.
>
>    # echo 'foo /foo tmpfs defaults 0 0'>>  /etc/fstab
>    # cd /root
>    # mkdir foo
>    # mount -a
>
> ...and you'll have a tmpfs on /root/foo. I'm not sure yet if this can be
> worked around. Seems really ugly... almost like mount(2) might be at
> fault here and there isn't much libmount can do.
Yes I just used "tmp" as an example.
> d
>


-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1



More information about the arch-projects mailing list