Skip site navigation (1)Skip section navigation (2)
Date:      15 Jun 1999 12:35:33 +0300
From:      Ville-Pertti Keinonen <will@iki.fi>
To:        dillon@apollo.backplane.com (Matthew Dillon)
Cc:        hackers@freebsd.org
Subject:   Re: oops, here's the patch
Message-ID:  <86909lolga.fsf@not.demophon.com>
In-Reply-To: dillon@apollo.backplane.com's message of "15 Jun 1999 02:50:57 %2B0300"
References:  <199906142007.QAA62362@wobble.cs.rpi.edu> <199906142350.QAA12993@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help

dillon@apollo.backplane.com (Matthew Dillon) writes:

>     However, if the inside of the first conditional generates an error, the vp
>     may be vput twice.  What I recommend is this for the last bit:

That can't happen (the attributes are straight from VATTR_NULL along
that path) - if it could, the file could also be truncated...

> 		if (vap->va_size != -1) {
> 			...
> 			if (error) {
> 				vput(vp);
> 				vp = NULL;	<<<<<<< my addition
> 			}
> 		}
> 		if (eexistdebug && vp)		<<<<<<< also check vp != NULL
> 			vput(vp);

>     It would be good if someone else could look over this routine and
>     double-check David's find and his solution with my modification.  Have
>     we handled all the cases?

Yes, for that code path.

Here's a simpler virtual unified diff that does the same thing as
David's patch.  (You don't need an 'eexistdebug' variable.)

		if (vap->va_size != -1) {
			...
-			if (error)
-				vput(vp);
		}
+		if (error)
+			vput(vp);

You can add a check for 'error == 0' in addition to
'vap->va_size != -1' but that shouldn't have any effect.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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