in_pcbbind_setup(), etc.

Robert Watson rwatson at FreeBSD.org
Tue Mar 23 15:18:38 PST 2004


On Tue, 23 Mar 2004, Pawel Jakub Dawidek wrote:

> I'm looking at in_pcbbind_setup() and this doesn't looks right in few
> places. 
> 
> For example: 'td' can be NULL? It is offten tested, but not always,
> Line 290:
> 		if (sin->sin_addr.s_addr != INADDR_ANY)
> 			if (prison_ip(td->td_ucred, 0, &sin->sin_addr.s_addr))
> 				return(EINVAL);
> td_ucred is used, but 'td' is not tested.
> 
> If this is always current thread, it can't be NULL, right?  If this not
> have to be current thread, we cannot touch td_ucred here, because (from
> proc.h): 

Prior to FreeBSD 5.x, curproc could be NULL in interrupt context.  With
the introduction of curthread and the move to interrupt threads, curthread
became always non-NULL.  However, sometimes the use of curthread may not
make sense.  :-)  I think I'd prefer it if we passed an explicit
credential into a number of these situations, which could be NULL if "the
system" was requesting a service as opposed to an explicit user process.
However, I'm not 100% convinced that is the right approach either.  Note
that we have some similar "confusions" relating to use of cached
credentials in sockets, etc.  The whole issue probably needs to be
discussed after some detailed analysis, and revisited.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert at fledge.watson.org      Senior Research Scientist, McAfee Research


> 
> [...]
>  *      k - only accessed by curthread
> [...]
> 	struct ucred	*td_ucred;	/* (k) Reference to credentials. */
> [...]
> 
> Not telling that we can just remove this argument if this is always
> current thread.
> 
> -- 
> Pawel Jakub Dawidek                       http://www.FreeBSD.org
> pjd at FreeBSD.org                           http://garage.freebsd.pl
> FreeBSD committer                         Am I Evil? Yes, I Am!
> 



More information about the freebsd-net mailing list