summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2015-05-08 10:16:23 +1000
committerJan Kara <jack@suse.cz>2015-05-18 11:23:08 +0200
commit92acca45428f28c0b387f85b52b230d526dd0ecc (patch)
treefdd266da5dc154d2eade6a30086472dd63f2e259
parent4649f6b36214bd0707eda6e28afd594db4e19f98 (diff)
downloadlwn-92acca45428f28c0b387f85b52b230d526dd0ecc.tar.gz
lwn-92acca45428f28c0b387f85b52b230d526dd0ecc.zip
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>
-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,
static struct dentry *udf_fh_to_dentry(struct super_block *sb,
struct fid *fid, int fh_len, int fh_type)
{
- if ((fh_len != 3 && fh_len != 5) ||
+ if (fh_len < 3 ||
(fh_type != FILEID_UDF_WITH_PARENT &&
fh_type != FILEID_UDF_WITHOUT_PARENT))
return NULL;
@@ -1284,7 +1284,7 @@ static struct dentry *udf_fh_to_dentry(struct super_block *sb,
static struct dentry *udf_fh_to_parent(struct super_block *sb,
struct fid *fid, int fh_len, int fh_type)
{
- if (fh_len != 5 || fh_type != FILEID_UDF_WITH_PARENT)
+ if (fh_len < 5 || fh_type != FILEID_UDF_WITH_PARENT)
return NULL;
return udf_nfs_get_inode(sb, fid->udf.parent_block,