diff options
Diffstat (limited to 'fs/squashfs')
-rw-r--r-- | fs/squashfs/namei.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/squashfs/namei.c b/fs/squashfs/namei.c index 7834a517f7f4..f866d42a8b6f 100644 --- a/fs/squashfs/namei.c +++ b/fs/squashfs/namei.c | |||
@@ -79,7 +79,8 @@ static int get_dir_index_using_name(struct super_block *sb, | |||
79 | int len) | 79 | int len) |
80 | { | 80 | { |
81 | struct squashfs_sb_info *msblk = sb->s_fs_info; | 81 | struct squashfs_sb_info *msblk = sb->s_fs_info; |
82 | int i, size, length = 0, err; | 82 | int i, length = 0, err; |
83 | unsigned int size; | ||
83 | struct squashfs_dir_index *index; | 84 | struct squashfs_dir_index *index; |
84 | char *str; | 85 | char *str; |
85 | 86 | ||
@@ -103,6 +104,10 @@ static int get_dir_index_using_name(struct super_block *sb, | |||
103 | 104 | ||
104 | 105 | ||
105 | size = le32_to_cpu(index->size) + 1; | 106 | size = le32_to_cpu(index->size) + 1; |
107 | if (size > SQUASHFS_NAME_LEN) { | ||
108 | err = -EINVAL; | ||
109 | break; | ||
110 | } | ||
106 | 111 | ||
107 | err = squashfs_read_metadata(sb, index->name, &index_start, | 112 | err = squashfs_read_metadata(sb, index->name, &index_start, |
108 | &index_offset, size); | 113 | &index_offset, size); |