From 3b250ffb4113fe521a71c0a8b30340cf237c2508 Mon Sep 17 00:00:00 2001 From: Daniel Hobi Date: Wed, 18 May 2011 15:21:08 +0200 Subject: [PATCH 1/2] env_nand: zero-initialize variable nand_erase_options Commit 30486322 (nand erase: .spread, .part, .chip subcommands) added a new field to struct nand_erase_options, but forgot to update common/env_nand.c. Depending on the stack state and bad block distribution, saveenv() can thus erase more than CONFIG_ENV_RANGE bytes which may corrupt the following NAND sectors/partitions. Signed-off-by: Daniel Hobi Signed-off-by: Scott Wood --- common/env_nand.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/common/env_nand.c b/common/env_nand.c index 980425a8e..14446a6a5 100644 --- a/common/env_nand.c +++ b/common/env_nand.c @@ -193,10 +193,8 @@ int saveenv(void) int ret = 0; nand_erase_options_t nand_erase_options; + memset(&nand_erase_options, 0, sizeof(nand_erase_options)); nand_erase_options.length = CONFIG_ENV_RANGE; - nand_erase_options.quiet = 0; - nand_erase_options.jffs2 = 0; - nand_erase_options.scrub = 0; if (CONFIG_ENV_RANGE < CONFIG_ENV_SIZE) return 1; @@ -249,10 +247,8 @@ int saveenv(void) char *res; nand_erase_options_t nand_erase_options; + memset(&nand_erase_options, 0, sizeof(nand_erase_options)); nand_erase_options.length = CONFIG_ENV_RANGE; - nand_erase_options.quiet = 0; - nand_erase_options.jffs2 = 0; - nand_erase_options.scrub = 0; nand_erase_options.offset = CONFIG_ENV_OFFSET; if (CONFIG_ENV_RANGE < CONFIG_ENV_SIZE) From eb3abce898ce0d9c711ed1d107bd8b0ccf3c07de Mon Sep 17 00:00:00 2001 From: Daniel Hobi Date: Thu, 19 May 2011 19:28:54 +0200 Subject: [PATCH 2/2] cmd_nand: fix help of nand erase subcommand Since commit 30486322 (nand erase: .spread, .part, .chip subcommands) the arguments off and size are no longer optional. Signed-off-by: Daniel Hobi Cc: Scott Wood Signed-off-by: Scott Wood --- common/cmd_nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 7bd37de78..44c4d1f89 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -693,7 +693,7 @@ U_BOOT_CMD( " write 'size' bytes starting at offset 'off' with yaffs format\n" " from memory address 'addr', skipping bad blocks.\n" #endif - "nand erase[.spread] [clean] [off [size]] - erase 'size' bytes " + "nand erase[.spread] [clean] off size - erase 'size' bytes " "from offset 'off'\n" " With '.spread', erase enough for given file size, otherwise,\n" " 'size' includes skipped bad blocks.\n"