rm(1) bug, possibly serious

Mark Andrews Mark_Andrews at isc.org
Mon Oct 1 16:23:47 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 .. 

	You asked to be shown a example.  It's a perfectly reasonable
	example.

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

	It's something that you need to expect on a multi-process system.
	It happens to me one or twice a month.

	Mark
 
> Cheers, Ian
-- 
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742                 INTERNET: Mark_Andrews at isc.org


More information about the freebsd-stable mailing list