pxa3xx_nand: fix memory out of bound
authorHaojian Zhuang <haojian.zhuang@marvell.com>
Fri, 11 Sep 2009 11:33:58 +0000 (19:33 +0800)
committerEric Miao <eric.y.miao@gmail.com>
Tue, 1 Dec 2009 01:02:36 +0000 (09:02 +0800)
When fetch nand data with non-DMA mode, we should align info->data_size to
32bit, not 8bit.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
drivers/mtd/nand/pxa3xx_nand.c

index 6ea520ae2410a9113690641670d488321ac3da23..f463ad272d3be4210902f7114c908f50b7624eca 100644 (file)
@@ -9,6 +9,7 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
@@ -489,7 +490,7 @@ static int handle_data_pio(struct pxa3xx_nand_info *info)
        switch (info->state) {
        case STATE_PIO_WRITING:
                __raw_writesl(info->mmio_base + NDDB, info->data_buff,
-                               info->data_size << 2);
+                               DIV_ROUND_UP(info->data_size, 4));
 
                enable_int(info, NDSR_CS0_BBD | NDSR_CS0_CMDD);
 
@@ -501,7 +502,7 @@ static int handle_data_pio(struct pxa3xx_nand_info *info)
                break;
        case STATE_PIO_READING:
                __raw_readsl(info->mmio_base + NDDB, info->data_buff,
-                               info->data_size << 2);
+                               DIV_ROUND_UP(info->data_size, 4));
                break;
        default:
                printk(KERN_ERR "%s: invalid state %d\n", __func__,