MTD: Read buffer overflow
PATCH 1/1 MTD: Read buffer overflow
Check whether index is within bounds before testing the element.
Signed-off-by Roel Kluin <[email protected]>
---
with `for (i = 0; bbt[i] && i < ebcnt; ++i)'
we test bbt[ebcnt] in the last iteration
with `for (i = 0; bbt[ebcnt - i - 1] && i < ebcnt; ++i)' we test bbt[-1] in the last iteration
drivers/mtd/tests/mtd_oobtest.c +1 -1
@@ -512,7 +512,7 @@ static int __init mtd_oobtest_init(void) goto out; addr0 =0 ; -for (i =0 ; bbt[i] && i < ebcnt; ++i) +for (i =0 ; i < ebcnt && bbt[i]; ++i) addr0 += mtd->erasesize;/* Attempt to write off end of OOB */
drivers/mtd/tests/mtd_pagetest.c +6 -6
@@ -116,11 +116,11 @@ static int verify_eraseblock(int ebnum)loff_t addr = ebnum * mtd->erasesize; addr0 =0 ; -for (i =0 ; bbt[i] && i < ebcnt; ++i) +for (i =0 ; i < ebcnt && bbt[i]; ++i) addr0 += mtd->erasesize; addrn = mtd->size; -for (i =0 ; bbt[ebcnt - i -1 ] && i < ebcnt; ++i) +for (i =0 ; i < ebcnt && bbt[ebcnt - i -1 ]; ++i) addrn -= mtd->erasesize;set_random_data (writebuf, mtd->erasesize);
@@ -219,11 +219,11 @@ static int crosstest(void)memset (pp1,0 , pgsize *4 ); addr0 =0 ; -for (i =0 ; bbt[i] && i < ebcnt; ++i) +for (i =0 ; i < ebcnt && bbt[i]; ++i) addr0 += mtd->erasesize; addrn = mtd->size; -for (i =0 ; bbt[ebcnt - i -1 ] && i < ebcnt; ++i) +for (i =0 ; i < ebcnt && bbt[ebcnt - i -1 ]; ++i) addrn -= mtd->erasesize;/* Read 2nd-to-last page to pp1 */
@@ -317,7 +317,7 @@ static int erasecrosstest(void) ebnum =0 ; addr0 =0 ; -for (i =0 ; bbt[i] && i < ebcnt; ++i) { +for (i =0 ; i < ebcnt && bbt[i]; ++i) { addr0 += mtd->erasesize; ebnum +=1 ; }
@@ -413,7 +413,7 @@ static int erasetest(void) ebnum =0 ; addr0 =0 ; -for (i =0 ; bbt[i] && i < ebcnt; ++i) { +for (i =0 ; i < ebcnt && bbt[i]; ++i) { addr0 += mtd->erasesize; ebnum +=1 ; }