aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2015-05-07 20:16:23 -0400
committerJan Kara <jack@suse.cz>2015-05-18 05:23:08 -0400
commit92acca45428f28c0b387f85b52b230d526dd0ecc (patch)
treefdd266da5dc154d2eade6a30086472dd63f2e259 /fs
parent4649f6b36214bd0707eda6e28afd594db4e19f98 (diff)
UDF: support NFSv2 export
The "fh_len" passed to ->fh_to_* is not guaranteed to be that same as that returned by encode_fh - it may be larger. With NFSv2, the filehandle is fixed length, so it may appear longer than expected and be zero-padded. So we must test that fh_len is at least some value, not exactly equal to it. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r--fs/udf/namei.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index 6abbb649c28a..c97b5a8d1e24 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -1272,7 +1272,7 @@ static struct dentry *udf_nfs_get_inode(struct super_block *sb, u32 block,
1272static struct dentry *udf_fh_to_dentry(struct super_block *sb, 1272static struct dentry *udf_fh_to_dentry(struct super_block *sb,
1273 struct fid *fid, int fh_len, int fh_type) 1273 struct fid *fid, int fh_len, int fh_type)
1274{ 1274{
1275 if ((fh_len != 3 && fh_len != 5) || 1275 if (fh_len < 3 ||
1276 (fh_type != FILEID_UDF_WITH_PARENT && 1276 (fh_type != FILEID_UDF_WITH_PARENT &&
1277 fh_type != FILEID_UDF_WITHOUT_PARENT)) 1277 fh_type != FILEID_UDF_WITHOUT_PARENT))
1278 return NULL; 1278 return NULL;
@@ -1284,7 +1284,7 @@ static struct dentry *udf_fh_to_dentry(struct super_block *sb,
1284static struct dentry *udf_fh_to_parent(struct super_block *sb, 1284static struct dentry *udf_fh_to_parent(struct super_block *sb,
1285 struct fid *fid, int fh_len, int fh_type) 1285 struct fid *fid, int fh_len, int fh_type)
1286{ 1286{
1287 if (fh_len != 5 || fh_type != FILEID_UDF_WITH_PARENT) 1287 if (fh_len < 5 || fh_type != FILEID_UDF_WITH_PARENT)
1288 return NULL; 1288 return NULL;
1289 1289
1290 return udf_nfs_get_inode(sb, fid->udf.parent_block, 1290 return udf_nfs_get_inode(sb, fid->udf.parent_block,