diff options
Diffstat (limited to 'fs/squashfs')
| -rw-r--r-- | fs/squashfs/block.c | 5 | ||||
| -rw-r--r-- | fs/squashfs/super.c | 4 | ||||
| -rw-r--r-- | fs/squashfs/symlink.c | 1 | ||||
| -rw-r--r-- | fs/squashfs/zlib_wrapper.c | 4 | 
4 files changed, 8 insertions, 6 deletions
diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c index 1cb0d81b164..653c030eb84 100644 --- a/fs/squashfs/block.c +++ b/fs/squashfs/block.c @@ -87,9 +87,8 @@ int squashfs_read_data(struct super_block *sb, void **buffer, u64 index,  	u64 cur_index = index >> msblk->devblksize_log2;  	int bytes, compressed, b = 0, k = 0, page = 0, avail; - -	bh = kcalloc((msblk->block_size >> msblk->devblksize_log2) + 1, -				sizeof(*bh), GFP_KERNEL); +	bh = kcalloc(((srclength + msblk->devblksize - 1) +		>> msblk->devblksize_log2) + 1, sizeof(*bh), GFP_KERNEL);  	if (bh == NULL)  		return -ENOMEM; diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 3550aec2f65..48b6f4a385a 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c @@ -275,7 +275,8 @@ allocate_root:  	err = squashfs_read_inode(root, root_inode);  	if (err) { -		iget_failed(root); +		make_bad_inode(root); +		iput(root);  		goto failed_mount;  	}  	insert_inode_hash(root); @@ -353,6 +354,7 @@ static void squashfs_put_super(struct super_block *sb)  		kfree(sbi->id_table);  		kfree(sbi->fragment_index);  		kfree(sbi->meta_index); +		kfree(sbi->inode_lookup_table);  		kfree(sb->s_fs_info);  		sb->s_fs_info = NULL;  	} diff --git a/fs/squashfs/symlink.c b/fs/squashfs/symlink.c index e80be2022a7..32b911f4ee3 100644 --- a/fs/squashfs/symlink.c +++ b/fs/squashfs/symlink.c @@ -33,7 +33,6 @@  #include <linux/fs.h>  #include <linux/vfs.h>  #include <linux/kernel.h> -#include <linux/slab.h>  #include <linux/string.h>  #include <linux/pagemap.h> diff --git a/fs/squashfs/zlib_wrapper.c b/fs/squashfs/zlib_wrapper.c index 4dd70e04333..7a603874e48 100644 --- a/fs/squashfs/zlib_wrapper.c +++ b/fs/squashfs/zlib_wrapper.c @@ -24,6 +24,7 @@  #include <linux/mutex.h>  #include <linux/buffer_head.h> +#include <linux/slab.h>  #include <linux/zlib.h>  #include "squashfs_fs.h" @@ -127,8 +128,9 @@ static int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,  		goto release_mutex;  	} +	length = stream->total_out;  	mutex_unlock(&msblk->read_data_mutex); -	return stream->total_out; +	return length;  release_mutex:  	mutex_unlock(&msblk->read_data_mutex);  |