diff options
author | NeilBrown <neilb@suse.de> | 2015-05-08 10:16:23 +1000 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2015-05-18 11:23:08 +0200 |
commit | 92acca45428f28c0b387f85b52b230d526dd0ecc (patch) | |
tree | fdd266da5dc154d2eade6a30086472dd63f2e259 /fs/udf | |
parent | 4649f6b36214bd0707eda6e28afd594db4e19f98 (diff) | |
download | op-kernel-dev-92acca45428f28c0b387f85b52b230d526dd0ecc.zip op-kernel-dev-92acca45428f28c0b387f85b52b230d526dd0ecc.tar.gz |
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/udf')
-rw-r--r-- | fs/udf/namei.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 6abbb64..c97b5a8 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, |