rm(1) bug, possibly serious

Ian Smith smithi at nimnet.asn.au
Sun Sep 30 21:38:01 PDT 2007


On Thu, 27 Sep 2007, Mark Andrews wrote:
(I wrote:)
 > > On Tue, 25 Sep 2007, LI Xin wrote:
 > >  > Oliver Fromme wrote:
 > >  > > Nicolas Rachinsky wrote:
 > >  > >  > Oliver Fromme wrote:
 > >  > >  > > By the way, an additional confusion is that ".." and "../"
 > >  > >  > > are handled differently.  Specifying ".." always leads to
 > >  > >  > > this message:
 > >  > >  > > 
 > >  > >  > > rm: "." and ".." may not be removed
 > >  > >  > > 
 > >  > >  > > and nothing is actually removed.  It is confusing that
 > >  > >  > > adding a slash leads to a different error message _and_
 > >  > >  > > removal of the contents of the parent directory.  Clearly
 > >  > >  > > a POLA violation.
 > > 
 > > Clearly a bug, and well spotted, especially if as old as reported.
 > > 
 > >  > >  > 
 > >  > >  > Adding a slash often leads to different behaviour.
 > >  > > 
 > >  > > Yes, I'm aware of that.  I often make use of the feature
 > >  > > that "find /sys/" expands the symlink, while "find /sys"
 > >  > > does not.  The same holds true for ls(1).
 > > 
 > > But fortunately not for rm(1):
 > > 
 > >      The rm utility removes symbolic links, not the files referenced by the
 > >      links.
 > > 
 > >      It is an error to attempt to remove the files /, . or ..
 > > 
 > >  > > However, I would still argue that there is no sane reason
 > >  > > for "rm -rf ../" behaving differently from "rm -rf ..",
 > >  > > especially because it behaves differently in a destructive
 > >  > > way.  That's why I call it a POLA violation.
 > >  > 
 > >  > Also a POSIX violation IMHO :-)
 > > 
 > > Indeed; I can't imagine a situation where removing "." (let alone "..") 
 > > and so orphaning the pwd might be considered sane, never mind legal .. 
 > > but maybe I lack imagination :) 
 > 
 > 	You lack imagination.

No doubt :)

 > 	When you found the directory you want to remove and you are
 > 	in it it is much less error prone to remove "." recursively
 > 	that to go up one directory and try to find the directory
 > 	you were just in.

Sorry, I can't agree.  I take comfort in knowing that 'rm .' will fail,
that 'rm *' will not remove '.' (let alone '..'!), and that rm will not
orphan the pwd.  Neither will umount, for that matter .. 

 > 	The the prohibitions comes from when you literally removed
 > 	directories by unlinking the directory and "." and ".."
 > 	within the directory in user space.  It was easy to stuff
 > 	up a directory structure.

Regardless of how implemented in the filesystem, having the pwd become
invalid isn't something I ever expect to happen, and I'll continue to
rely on: 'It is an error to attempt to remove the files /, . or ..'

Cheers, Ian



More information about the freebsd-stable mailing list