Merge git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-linus

* git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-linus:
squashfs: fix potential buffer over-run on 4K block file systems
squashfs: add missing buffer free
squashfs: fix warn_on when root inode is corrupted
squashfs: fix locking bug in zlib wrapper

+7 -5
+2 -3
fs/squashfs/block.c
··· 87 u64 cur_index = index >> msblk->devblksize_log2; 88 int bytes, compressed, b = 0, k = 0, page = 0, avail; 89 90 - 91 - bh = kcalloc((msblk->block_size >> msblk->devblksize_log2) + 1, 92 - sizeof(*bh), GFP_KERNEL); 93 if (bh == NULL) 94 return -ENOMEM; 95
··· 87 u64 cur_index = index >> msblk->devblksize_log2; 88 int bytes, compressed, b = 0, k = 0, page = 0, avail; 89 90 + bh = kcalloc(((srclength + msblk->devblksize - 1) 91 + >> msblk->devblksize_log2) + 1, sizeof(*bh), GFP_KERNEL); 92 if (bh == NULL) 93 return -ENOMEM; 94
+3 -1
fs/squashfs/super.c
··· 275 276 err = squashfs_read_inode(root, root_inode); 277 if (err) { 278 - iget_failed(root); 279 goto failed_mount; 280 } 281 insert_inode_hash(root); ··· 354 kfree(sbi->id_table); 355 kfree(sbi->fragment_index); 356 kfree(sbi->meta_index); 357 kfree(sb->s_fs_info); 358 sb->s_fs_info = NULL; 359 }
··· 275 276 err = squashfs_read_inode(root, root_inode); 277 if (err) { 278 + make_bad_inode(root); 279 + iput(root); 280 goto failed_mount; 281 } 282 insert_inode_hash(root); ··· 353 kfree(sbi->id_table); 354 kfree(sbi->fragment_index); 355 kfree(sbi->meta_index); 356 + kfree(sbi->inode_lookup_table); 357 kfree(sb->s_fs_info); 358 sb->s_fs_info = NULL; 359 }
+2 -1
fs/squashfs/zlib_wrapper.c
··· 128 goto release_mutex; 129 } 130 131 mutex_unlock(&msblk->read_data_mutex); 132 - return stream->total_out; 133 134 release_mutex: 135 mutex_unlock(&msblk->read_data_mutex);
··· 128 goto release_mutex; 129 } 130 131 + length = stream->total_out; 132 mutex_unlock(&msblk->read_data_mutex); 133 + return length; 134 135 release_mutex: 136 mutex_unlock(&msblk->read_data_mutex);