MTD NAND: Check if block number is out of ragne at top of loop, not bottom, to avoid some bogus transfers
This commit is contained in:
parent
40e0253189
commit
ed9756c137
@ -6164,4 +6164,7 @@
|
|||||||
from FLASH (2013-12-05).
|
from FLASH (2013-12-05).
|
||||||
* fs/fat/fs_configfat.c: Fix a typo in the FAT16 formatting logic.
|
* fs/fat/fs_configfat.c: Fix a typo in the FAT16 formatting logic.
|
||||||
Was this ever able to format a FAT16 disk? (2013-12-05).
|
Was this ever able to format a FAT16 disk? (2013-12-05).
|
||||||
|
* drivers/mtd/mtd_nand.c: Check if block number is within range at
|
||||||
|
the top of the loop not the bottom. Otherwise, we will do a bogus
|
||||||
|
transfer with the out-of-range block before we test it (2013-12-05).
|
||||||
|
|
||||||
|
@ -638,6 +638,17 @@ static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startpage,
|
|||||||
|
|
||||||
for (remaining = npages; remaining > 0; remaining--)
|
for (remaining = npages; remaining > 0; remaining--)
|
||||||
{
|
{
|
||||||
|
/* Check for attempt to read beyond the end of NAND */
|
||||||
|
|
||||||
|
if (block > maxblock)
|
||||||
|
{
|
||||||
|
fdbg("ERROR: Read beyond the end of FLASH, block=%ld\n",
|
||||||
|
(long)block);
|
||||||
|
|
||||||
|
ret = -ESPIPE;
|
||||||
|
goto errout_with_lock;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read the next page from NAND */
|
/* Read the next page from NAND */
|
||||||
|
|
||||||
ret = nand_readpage(nand, block, page, buffer);
|
ret = nand_readpage(nand, block, page, buffer);
|
||||||
@ -656,13 +667,7 @@ static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startpage,
|
|||||||
if (++page >= pagesperblock)
|
if (++page >= pagesperblock)
|
||||||
{
|
{
|
||||||
page = 0;
|
page = 0;
|
||||||
if (++block > maxblock)
|
block++;
|
||||||
{
|
|
||||||
fdbg("ERROR: Read beyond the end of FLASH, block=%d\n",
|
|
||||||
block);
|
|
||||||
ret = -ESPIPE;
|
|
||||||
goto errout_with_lock;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Increment the buffer point by the size of one page */
|
/* Increment the buffer point by the size of one page */
|
||||||
@ -729,6 +734,17 @@ static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startpage,
|
|||||||
|
|
||||||
for (remaining = npages; remaining > 0; remaining--)
|
for (remaining = npages; remaining > 0; remaining--)
|
||||||
{
|
{
|
||||||
|
/* Check for attempt to write beyond the end of NAND */
|
||||||
|
|
||||||
|
if (block > maxblock)
|
||||||
|
{
|
||||||
|
fdbg("ERROR: Write beyond the end of FLASH, block=%ld\n",
|
||||||
|
(long)block);
|
||||||
|
|
||||||
|
ret = -ESPIPE;
|
||||||
|
goto errout_with_lock;
|
||||||
|
}
|
||||||
|
|
||||||
/* Write the next page into NAND */
|
/* Write the next page into NAND */
|
||||||
|
|
||||||
ret = nand_writepage(nand, block, page, buffer);
|
ret = nand_writepage(nand, block, page, buffer);
|
||||||
@ -747,13 +763,7 @@ static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startpage,
|
|||||||
if (++page >= pagesperblock)
|
if (++page >= pagesperblock)
|
||||||
{
|
{
|
||||||
page = 0;
|
page = 0;
|
||||||
if (++block > maxblock)
|
block++;
|
||||||
{
|
|
||||||
fdbg("ERROR: Write beyond the end of FLASH, block=%d\n",
|
|
||||||
block);
|
|
||||||
ret = -ESPIPE;
|
|
||||||
goto errout_with_lock;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Increment the buffer point by the size of one page */
|
/* Increment the buffer point by the size of one page */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user