[PATCH 4/4] squashfs: fix potential buffer over-run on 4K block file systems

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Phillip Lougher
Date: Thursday, April 22, 2010 - 7:22 pm

Sizing the buffer based on block size is incorrect, leading
to a potential buffer over-run on 4K block size file systems
(because the metadata block size is always 8K).  This bug
doesn't seem have triggered because 4K block size file systems
are not default, and also because metadata blocks after
compression tend to be less than 4K.

Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
---
  fs/squashfs/block.c |    5 ++---
  1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
index 1cb0d81..653c030 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;

-- 
1.6.3.3

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 4/4] squashfs: fix potential buffer over-run on 4K ..., Phillip Lougher, (Thu Apr 22, 7:22 pm)