diff options
| author | NeilBrown <neilb@suse.de> | 2015-05-07 20:16:23 -0400 |
|---|---|---|
| committer | Jan Kara <jack@suse.cz> | 2015-05-18 05:23:08 -0400 |
| commit | 92acca45428f28c0b387f85b52b230d526dd0ecc (patch) | |
| tree | fdd266da5dc154d2eade6a30086472dd63f2e259 /fs | |
| parent | 4649f6b36214bd0707eda6e28afd594db4e19f98 (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.c | 4 |
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, | |||
| 1272 | static struct dentry *udf_fh_to_dentry(struct super_block *sb, | 1272 | static 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, | |||
| 1284 | static struct dentry *udf_fh_to_parent(struct super_block *sb, | 1284 | static 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, |
