Subject: Re: CVS commit: src/sys/nfs
To: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
From: Christos Zoulas <christos@zoulas.com>
List: source-changes
Date: 07/08/2005 08:53:49
On Jul 8, 12:36pm, yamt@mwd.biglobe.ne.jp (YAMAMOTO Takashi) wrote:
-- Subject: Re: CVS commit: src/sys/nfs

| > Module Name:	src
| > Committed By:	christos
| > Date:		Thu Jul  7 14:26:37 UTC 2005
| > 
| > Modified Files:
| > 	src/sys/nfs: nfs_bio.c
| > 
| > Log Message:
| > Back to using curproc in the VLNK case when uiop->uio_procp == NULL,
| > and explain why we need to.
| 
| why do you want to use uio_procp->p_ucred here?
| 
| uio_procp specifies an address space, not a requester.
| i don't understand what an address space's credential means.

The whole structure of the code is stupid. We go from:

nfs_readlink -> nfs_bioread -> nfs_doio -> nfs_doio_read -> nfs_readlinkrpc
		   |
		   \-> nfs_readlinkrpc

We have the proper credentials here in the beginning of the call chain,
but we stupidly drop them between nfs_bioread and nfs_doio. The proper
fix is to pass cred down the chain instead of relying on curproc.

It would be nice to have the notion of "who are we doing the i/o on behalf
of" in uio, but we don't, and yes I agree uio_procp->p_ucred is not it
(since in the UIO_SYSSPACE case uio_procp is NULL).

christos

christos