[U-Boot] [U-Boot, 2/2] env: Fix saving environment to "bad CRC" location
Tom Rini
trini at konsulko.com
Sun Jan 27 03:53:10 UTC 2019
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 <semen.protsenko at linaro.org>
> Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
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: <http://lists.denx.de/pipermail/u-boot/attachments/20190126/142daf2b/attachment.sig>
More information about the U-Boot
mailing list