[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