diff -uNr mtd/drivers/mtd/nand/nand_base.c mtd-nandbase/drivers/mtd/nand/nand_base.c --- mtd/drivers/mtd/nand/nand_base.c 2005-09-16 15:30:32.000000000 -0600 +++ mtd-nandbase/drivers/mtd/nand/nand_base.c 2005-09-23 17:21:38.032055488 -0600 @@ -1311,8 +1311,9 @@ readdata: /* Partial page read, transfer data into fs buffer */ if (!aligned) { - for (j = col; j < end && read < len; j++) - buf[read++] = data_poi[j]; + int bytes_to_copy = min(end - col, (int)len - read); + memcpy(&buf[read], &data_poi[col], bytes_to_copy); + read += bytes_to_copy; this->pagebuf = realpage; } else read += mtd->oobblock;