diff mbox

[U-Boot] common: env_ubi: Clear environment buffer before reading

Message ID 1464094795-19396-1-git-send-email-m.niestroj@grinn-global.com
State Accepted
Commit c1f51e0f3edca57273ff524714b69345ce627996
Delegated to: Heiko Schocher
Headers show

Commit Message

Marcin Niestroj May 24, 2016, 12:59 p.m. UTC
In case we have restarted u-boot there is a chance that environment
buffer contains old environment (from the previous boot). If UBI volume
is zero size, ubi_volume_read() doesn't modify the buffer and exits
successfully.

We need to clear buffer manually before reading it from UBI, so the
invalid CRC will cause setting default environment in case that the UBI
volume is zero size.

Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
---
 common/env_ubi.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
diff mbox

Patch

diff --git a/common/env_ubi.c b/common/env_ubi.c
index 77bbfa6..b021395 100644
--- a/common/env_ubi.c
+++ b/common/env_ubi.c
@@ -114,6 +114,17 @@  void env_relocate_spec(void)
 	int crc1_ok = 0, crc2_ok = 0;
 	env_t *ep, *tmp_env1, *tmp_env2;
 
+	/*
+	 * In case we have restarted u-boot there is a chance that buffer
+	 * contains old environment (from the previous boot).
+	 * If UBI volume is zero size, ubi_volume_read() doesn't modify the
+	 * buffer.
+	 * We need to clear buffer manually here, so the invalid CRC will
+	 * cause setting default environment as expected.
+	 */
+	memset(env1_buf, 0x0, CONFIG_ENV_SIZE);
+	memset(env2_buf, 0x0, CONFIG_ENV_SIZE);
+
 	tmp_env1 = (env_t *)env1_buf;
 	tmp_env2 = (env_t *)env2_buf;
 
@@ -173,6 +184,16 @@  void env_relocate_spec(void)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
 
+	/*
+	 * In case we have restarted u-boot there is a chance that buffer
+	 * contains old environment (from the previous boot).
+	 * If UBI volume is zero size, ubi_volume_read() doesn't modify the
+	 * buffer.
+	 * We need to clear buffer manually here, so the invalid CRC will
+	 * cause setting default environment as expected.
+	 */
+	memset(buf, 0x0, CONFIG_ENV_SIZE);
+
 	if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) {
 		printf("\n** Cannot find mtd partition \"%s\"\n",
 		       CONFIG_ENV_UBI_PART);