Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Sep 1995 14:05:08 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        julian@ref.tfs.com (Julian Elischer)
Cc:        hackers@FreeBSD.ORG
Subject:   Re: suspect code in 'unlink' syscall.
Message-ID:  <199509182105.OAA08619@phaeton.artisoft.com>
In-Reply-To: <199509180750.AAA01170@ref.tfs.com> from "Julian Elischer" at Sep 18, 95 00:50:32 am

next in thread | previous in thread | raw e-mail | index | archive | help
> looking at 'unlink (2)'
> I see,
>         if (vp->v_type != VDIR ||
>             (error = suser(p->p_ucred, &p->p_acflag)) == 0) {
>                 /*
>                  * The root of a mounted filesystem cannot be deleted.
>                  */
>                 if (vp->v_flag & VROOT)
>                         error = EBUSY;
>                 else
>                         (void) vnode_pager_uncache(vp);
>         }
> 
> I translate this as:
> "if it's not a DIR, or we are root",
> check if we are deleteing the 
> root of an FS,
> if not, flush cache......
> 
> now, if we were NOT root, and it IS a dir...... (normal...)
> 
> can we delete it?
> I'm about to try this..
> if you dont hear from me, the building exploded...

Invert the test.  I made this mod some time ago:

	if( ( error = suser(p->p_ucred, &p->p_acflag)) == 0 ||
		vp->v_type != VDIR) {

This way, the error code will be set to EPERM if you are not root and the
followon code will not be executed.


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199509182105.OAA08619>