NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/38336: NULL deref in nfs_lookup



The following reply was made to PR kern/38336; it has been noted by GNATS.

From: yamt%mwd.biglobe.ne.jp@localhost (YAMAMOTO Takashi)
To: gnats-bugs%NetBSD.org@localhost
Cc: kern-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, 
netbsd-bugs%netbsd.org@localhost,
        ad%netbsd.org@localhost
Subject: Re: kern/38336: NULL deref in nfs_lookup
Date: Mon, 31 Mar 2008 11:46:58 +0900 (JST)

 >  On Sun, Mar 30, 2008 at 02:00:05PM +0000, YAMAMOTO Takashi wrote:
 >  
 >  >  > nfs_vnops.c:
 >  >  > 
 >  >  >     925        nfsm_request(np, NFSPROC_LOOKUP, curlwp, cnp->cn_cred);
 >  >  >     926        if (error) {
 >  >  >     927                nfsm_postop_attr(dvp, attrflag, 0);
 >  >  >     928                m_freem(mrep);
 >  >  >     929                goto nfsmout;
 >  >  >     930        }
 >  >  > 
 >  >  > nfsm_request() fills 'error' and typically 'md'. In case of error,
 >  >  > 'md' is sometimes not filled and can contain junk from the stack,
 >  >  > but nfsm_postop_attr() assumes that 'md' is always filled. Here is 
 >  >  
 >  >  can you be specific about "sometimes"?
 >  >  unless NFSERR_RETERR is set, nfsm_request macro itself does "goto 
 > nfsmout"
 >  >  so "if (error)" in the above code is not executed.
 >  
 >  I had a broken sbwait() that returned ERESTART when it should have been
 >  ignoring signals. I haven't checked to see if the error can happen in
 >  -current, but it seems better to handle it. I think the return path for the
 >  error code was:
 >  
 >  sbwait -> soreceive -> nfs_receive -> nfs_reply -> nfs_request -> nfs_lookup
 >  
 >  Andrew
 
 my understanding is that, if nfs_reply returns an error,
 nfs_request doesn't set NFSERR_RETERR, thus the above nfsm_postop_attr
 is not executed.
 
 YAMAMOTO Takashi
 


Home | Main Index | Thread Index | Old Index