[lkml]   [2008]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[patch 64/76] nfsd: fix oops on access from high-numbered ports
-stable review patch.  If anyone has any objections, please let us know.

From: J. Bruce Fields <>

This bug was always here, but before my commit 6fa02839bf9412e18e77
("recheck for secure ports in fh_verify"), it could only be triggered by
failure of a kmalloc(). After that commit it could be triggered by a
client making a request from a non-reserved port for access to an export
marked "secure". (Exports are "secure" by default.)

The result is a struct svc_export with a reference count one too low,
resulting in likely oopses next time the export is accessed.

The reference counting here is not straightforward; a later patch will
clean up fh_verify().

Thanks to Lukas Hejtmanek for the bug report and followup.

Signed-off-by: J. Bruce Fields <>
Cc: Lukas Hejtmanek <>
Signed-off-by: Linus Torvalds <>
Signed-off-by: Chris Wright <>
Signed-off-by: Greg Kroah-Hartman <>
fs/nfsd/nfsfh.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -231,6 +231,7 @@ fh_verify(struct svc_rqst *rqstp, struct
fhp->fh_dentry = dentry;
fhp->fh_export = exp;
+ cache_get(&exp->h);
} else {
* just rechecking permissions
@@ -240,6 +241,7 @@ fh_verify(struct svc_rqst *rqstp, struct
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
@@ -251,8 +253,6 @@ fh_verify(struct svc_rqst *rqstp, struct
if (error)
goto out;
- cache_get(&exp->h);

error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
if (error)

 \ /
  Last update: 2008-03-21 23:55    [W:0.207 / U:0.984 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site