From: "J. Bruce Fields" <bfields@fieldses.org>
To: Lukas Hejtmanek <xhejtman@ics.muni.cz>
Cc: nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org,
Neil Brown <neilb@suse.de>
Subject: Re: Oops in NFSv4 server in 2.6.23.17
Date: Fri, 14 Mar 2008 15:33:50 -0400 [thread overview]
Message-ID: <20080314193350.GK2119@fieldses.org> (raw)
In-Reply-To: <20080314181413.GF2119@fieldses.org>
On Fri, Mar 14, 2008 at 02:14:13PM -0400, bfields wrote:
> On Thu, Mar 13, 2008 at 03:36:31PM +0100, Lukas Hejtmanek wrote:
> > Hello,
> >
> > On Wed, Mar 12, 2008 at 12:00:07PM -0400, J. Bruce Fields wrote:
> > > In this case it looks like something in the gss context cache is bad.
> > >
> > > I'm not sure what's going on.
> >
> > I discovered what triggers this bug. If I have default export with secure
> > option and I try to connect from insecure port, it produces the oops.
> > If I add insecure option to the export, no oops at all and mount succeeds.
> >
> > Also, the bug is not triggered by the first attempt but by the second one.
> >
> > So I guess that from the first attempt there is something inserted into gss
> > context cache - error occurs (insecure attempt with the secure option), gss
> > context is removed from the cache as invalid but not completely. And the
> > second attempt does oops. Sounds reasonable for me.
> >
> > Hope this helps to find the bug.
>
> That's an excellent clue, thanks. I wonder it would be explainable by a
> reference count imbalance of some kind in fh_verify?
OK, yes, I think so. Could you confirm whether this fixes it?
--b.
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index 1eb771d..3e6b3f4 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -232,6 +232,7 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
fhp->fh_dentry = dentry;
fhp->fh_export = exp;
nfsd_nr_verified++;
+ cache_get(&exp->h);
} else {
/*
* just rechecking permissions
@@ -241,6 +242,7 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
dprintk("nfsd: fh_verify - just checking\n");
dentry = fhp->fh_dentry;
exp = fhp->fh_export;
+ cache_get(&exp->h);
/*
* Set user creds for this exportpoint; necessary even
* in the "just checking" case because this may be a
@@ -252,8 +254,6 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
if (error)
goto out;
}
- cache_get(&exp->h);
-
error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
if (error)
next prev parent reply other threads:[~2008-03-14 19:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-12 12:25 Oops in NFSv4 server in 2.6.23.17 Lukas Hejtmanek
2008-03-12 16:00 ` J. Bruce Fields
2008-03-13 14:36 ` Lukas Hejtmanek
2008-03-14 18:14 ` J. Bruce Fields
2008-03-14 19:33 ` J. Bruce Fields [this message]
2008-03-14 19:53 ` Lukas Hejtmanek
2008-03-14 20:05 ` J. Bruce Fields
2008-03-14 23:37 ` [PATCH] nfsd: fix oops on access from high-numbered ports J. Bruce Fields
2008-03-14 23:42 ` Oops in NFSv4 server in 2.6.23.17 J. Bruce Fields
2008-03-16 23:19 ` Neil Brown
2008-03-19 22:32 ` J. Bruce Fields
2008-03-20 2:31 ` NeilBrown
2008-03-17 8:12 ` Lukas Hejtmanek
2008-03-17 13:15 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080314193350.GK2119@fieldses.org \
--to=bfields@fieldses.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@suse.de \
--cc=nfsv4@linux-nfs.org \
--cc=xhejtman@ics.muni.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.