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

Dave Reisner d at falconindy.com
Mon Dec 26 16:34:42 EST 2011


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

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.

d


More information about the arch-projects mailing list