mtd: blktrans: fix multiplication overflow
Linux-MTD Mailing List
linux-mtd at lists.infradead.org
Fri Nov 6 10:59:04 PST 2015
Gitweb: http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=2ce401d56b36a7492b26646b94d1fe9194880a1a
Commit: 2ce401d56b36a7492b26646b94d1fe9194880a1a
Parent: 7446076e818814d3237b20a96112b44bdb3f8576
Author: Peng Fan <van.freenix at gmail.com>
AuthorDate: Fri Sep 11 21:41:47 2015 +0800
Committer: Brian Norris <computersforpeace at gmail.com>
CommitDate: Mon Sep 28 17:23:21 2015 -0700
mtd: blktrans: fix multiplication overflow
In drivers/mtd/mtd_blkdevs.c:
406 set_capacity(gd, (new->size * tr->blksize) >> 9);
The type of new->size is unsigned long and the type of tr->blksize is int,
the result of 'new->size * tr->blksize' may exceed ULONG_MAX on 32bit
machines.
I use nand chip MT29F32G08CBADBWP which is 4GB and the parameters passed
to kernel is 'mtdparts=gpmi-nand:-(user)', the whole nand chip will be
treated as a 4GB mtd partition. new->size is 0x800000 and tr->blksize is
0x200, 'new->size * tr->blksize' however is 0. This is what we do not want
to see.
Using type cast u64 to fix the multiplication overflow issue.
Signed-off-by: Peng Fan <van.freenix at gmail.com>
Cc: David Woodhouse <dwmw2 at infradead.org>
Signed-off-by: Brian Norris <computersforpeace at gmail.com>
---
drivers/mtd/mtd_blkdevs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
index 44dc965..cb47d79 100644
--- a/drivers/mtd/mtd_blkdevs.c
+++ b/drivers/mtd/mtd_blkdevs.c
@@ -399,7 +399,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
snprintf(gd->disk_name, sizeof(gd->disk_name),
"%s%d", tr->name, new->devnum);
- set_capacity(gd, (new->size * tr->blksize) >> 9);
+ set_capacity(gd, ((u64)new->size * tr->blksize) >> 9);
/* Create the request queue */
spin_lock_init(&new->queue_lock);
More information about the linux-mtd-cvs
mailing list