|
@@ -1599,7 +1599,8 @@ static __be32 nfsd4_encode_fs_location4(struct nfsd4_fs_location *location,
|
|
|
static char *nfsd4_path(struct svc_rqst *rqstp, struct svc_export *exp, __be32 *stat)
|
|
|
{
|
|
|
struct svc_fh tmp_fh;
|
|
|
- char *path, *rootpath;
|
|
|
+ char *path = NULL, *rootpath;
|
|
|
+ size_t rootlen;
|
|
|
|
|
|
fh_init(&tmp_fh, NFS4_FHSIZE);
|
|
|
*stat = exp_pseudoroot(rqstp, &tmp_fh);
|
|
@@ -1609,14 +1610,18 @@ static char *nfsd4_path(struct svc_rqst *rqstp, struct svc_export *exp, __be32 *
|
|
|
|
|
|
path = exp->ex_pathname;
|
|
|
|
|
|
- if (strncmp(path, rootpath, strlen(rootpath))) {
|
|
|
+ rootlen = strlen(rootpath);
|
|
|
+ if (strncmp(path, rootpath, rootlen)) {
|
|
|
dprintk("nfsd: fs_locations failed;"
|
|
|
"%s is not contained in %s\n", path, rootpath);
|
|
|
*stat = nfserr_notsupp;
|
|
|
- return NULL;
|
|
|
+ path = NULL;
|
|
|
+ goto out;
|
|
|
}
|
|
|
-
|
|
|
- return path + strlen(rootpath);
|
|
|
+ path += rootlen;
|
|
|
+out:
|
|
|
+ fh_put(&tmp_fh);
|
|
|
+ return path;
|
|
|
}
|
|
|
|
|
|
/*
|