From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Sat, 26 Jan 2019 22:53:10 -0500 Subject: [U-Boot] [U-Boot, 2/2] env: Fix saving environment to "bad CRC" location In-Reply-To: <20190118191904.634-3-semen.protsenko@linaro.org> References: <20190118191904.634-3-semen.protsenko@linaro.org> Message-ID: <20190127035310.GB6906@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Fri, Jan 18, 2019 at 09:19:04PM +0200, Sam Protsenko wrote: > In case when the environment on some location is malformed (CRC isn't > matching), there is a chance we won't be able to save the environment to > that location. For example, consider the case when we only have the > environment on eMMC, but it's zeroed out. In that case, we won't be able > to "env save" to it, because of "bad CRC" error. That's happening > because in env_load() function we consider malformed environment as > incorrect one, and defaulting to the location with highest (0) > priority, which can be different from one we are dealing with right now > (e.g., highest priority can be ENV_FAT on SD card, which is not > inserted, but we want to use ENV_MMC on eMMC, where we were booted > from). > > This issue began to reproduce after commit d30ba2315ae3 ("u-boot: remove > driver lookup loop from env_save()") on BeagleBone Black, but that > commit didn't introduce the wrong logic, it just changed the behavior > for default location to use, merely revealing this issue. > > To fix that, let's implement next logic in env_load(): > 1. Try to find out correct environment; if found -- use it > 2. If working environment wasn't found, but we found malformed one > (with bad CRC), let's use it for further "env save". But make sure > to use malformed environment location with highest priority. > 3. If neither correct nor malformed environment was found, let's > default to environment location with highest priority (0) > > Steps to reproduce mentioned issue on BeagleBone Black (fixed in this > patch): > > 1. Boot from SD card and erase eMMC in U-Boot shell: > => mmc dev 1 > => mmc erase 0 100000 > => gpt write mmc 1 $partitions > 2. Write new SPL and U-Boot to eMMC; the rest of eMMC will stay filled > with zeroes > 3. Boot from eMMC; try to do: > => env save > 4. Observe the error (incorrect behavior). Correct behavior: environment > should be stored correctly on eMMC, in spite of it has "bad CRC" > > Fixes: d30ba2315ae3 ("u-boot: remove driver lookup loop from env_save()") > Signed-off-by: Sam Protsenko > Reviewed-by: Simon Goldschmidt Applied to u-boot/master, thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: