Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Feb 2002 06:32:48 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Julian Elischer <julian@elischer.org>
Cc:        <current@FreeBSD.ORG>
Subject:   Re: final ucred patch
Message-ID:  <20020211060831.T9036-100000@gamplex.bde.org>
In-Reply-To: <3C66133F.43D243E0@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> After comments by jhb and bde
>
> Index: i386/i386/trap.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/i386/trap.c,v
> retrieving revision 1.211
> diff -u -r1.211 trap.c
> --- i386/i386/trap.c	10 Jan 2002 11:49:54 -0000	1.211
> +++ i386/i386/trap.c	10 Feb 2002 00:52:58 -0000
> @@ -256,9 +256,19 @@
>  		sticks = td->td_kse->ke_sticks;
>  		td->td_frame = &frame;
>  		KASSERT(td->td_ucred == NULL, ("already have a ucred"));
> -		PROC_LOCK(p);
> -		td->td_ucred = crhold(p->p_ucred);
> -		PROC_UNLOCK(p);
> +		if (td->td_ucred != p->p_ucred) {
> +			if (td->td_ucred) {
> +				mtx_lock(&Giant);
> +				crfree(td->td_ucred);
> +				td->td_ucred = NULL;
> +				mtx_unlock(&Giant);

See below about placement of this unlock.

> +			}
> +			if (p->p_ucred) {

How can this be NULL?  The old code didn't check.

> +				PROC_LOCK(p);
> +				td->td_ucred = crhold(p->p_ucred);
> +				PROC_UNLOCK(p);
> +			}
> +		}

The inner block is large enough and repeated enough to turn into a function.

>
>  		switch (type) {
>  		case T_PRIVINFLT:	/* privileged instruction fault */
> @@ -644,10 +654,12 @@
>  	userret(td, &frame, sticks);
>  	mtx_assert(&Giant, MA_NOTOWNED);
>  userout:
> +#ifdef	INVARIANTS
>  	mtx_lock(&Giant);
>  	crfree(td->td_ucred);
> -	mtx_unlock(&Giant);
>  	td->td_ucred = NULL;
> +	mtx_unlock(&Giant);
> +#endif
>  out:
>  	return;
>  }

I think moving the unlock is just an obfuscation.  td_ucred isn't locked
by Giant.

Bruce


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




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