[PATCH] mtd-utils: Check mtdoffset is not larger than mtd.size in case of a bad block.
Tomer Barletz
barletz at gmail.com
Tue Jun 26 17:46:41 EDT 2012
mtdoffset is being tested against mtd.size in the outer two loops, but
the third nested one does not test against it.
In case of a bad block we'll try to access an out of bounds offset in
the next MEMGETBADBLOCK ioctl, which will fail with EINVAL.
In case mtdoffset is indeed larger than the partition size, we need to
bail, since there are not enough "good" blocks to complete the write.
Signed-off-by: Tomer Barletz <barletz at gmail.com>
---
nandwrite.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/nandwrite.c b/nandwrite.c
index a42f7c9..8bd00c1 100644
--- a/nandwrite.c
+++ b/nandwrite.c
@@ -399,6 +399,11 @@ int main(int argc, char * const argv[])
if (baderaseblock) {
mtdoffset = blockstart + ebsize_aligned;
+
+ if (mtdoffset > mtd.size) {
+ perror("Too many bad blocks - cannot complete request.");
+ goto closeall;
+ }
}
offs += ebsize_aligned / blockalign;
} while (offs < blockstart + ebsize_aligned);
--
1.7.1
--Tomer
More information about the linux-mtd
mailing list