aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Genoud <richard.genoud@gmail.com>2012-09-12 08:26:26 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2012-09-29 10:54:12 -0400
commitbb0a13a13411c4ce24c48c8ff3cdf7b48d237240 (patch)
tree595cbf4572ee949f58ccfc0337fb43f78101f49d
parent5bf3d66a933efb71fa6db08a5043a617b6eadb4a (diff)
mtd: nandsim: bugfix: fail if overridesize is too big
If override size is too big, the module was actually loaded instead of failing, because retval was not set. This lead to memory corruption with the use of the freed structs nandsim and nand_chip. Cc: stable@vger.kernel.org Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r--drivers/mtd/nand/nandsim.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index 21e64b5d352b..a932c485eb04 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -2317,6 +2317,7 @@ static int __init ns_init_module(void)
2317 uint64_t new_size = (uint64_t)nsmtd->erasesize << overridesize; 2317 uint64_t new_size = (uint64_t)nsmtd->erasesize << overridesize;
2318 if (new_size >> overridesize != nsmtd->erasesize) { 2318 if (new_size >> overridesize != nsmtd->erasesize) {
2319 NS_ERR("overridesize is too big\n"); 2319 NS_ERR("overridesize is too big\n");
2320 retval = -EINVAL;
2320 goto err_exit; 2321 goto err_exit;
2321 } 2322 }
2322 /* N.B. This relies on nand_scan not doing anything with the size before we change it */ 2323 /* N.B. This relies on nand_scan not doing anything with the size before we change it */