From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Sun, 16 May 2021 19:19:01 +0200 Subject: [PATCH] env: Leave invalid env for nowhere location In-Reply-To: <1620828554-24013-1-git-send-email-hayashi.kunihiko@socionext.com> References: <1620828554-24013-1-git-send-email-hayashi.kunihiko@socionext.com> Message-ID: <29950f49-c47a-3d13-7113-402235de6d76@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 5/12/21 4:09 PM, Kunihiko Hayashi wrote: > When CONFIG_ENV_IS_NOWHERE is enabled, env_nowhere_init() sets ENV_INVALID > to gd->env_valid, and sets default_environment before relocation to > gd->env_addr. After that, env_init() switches gd->env_valid to ENV_VALID > by the previous fix. > > If gd->env_valid is ENV_INVALID, env_get_char() returns relocated > default_environment, however, env_get_char() returns gd->env_addr before > relocation since gd->env_valid is ENV_VALID, and access to gd->env_addr > will cause a fault. > > This leaves gd->env_valid as ENV_INVALID for "nowhere" location. > > Cc: Marek Vasut > Fixes: 5557eec01cbf ("env: Fix invalid env handling in env_init()") > Signed-off-by: Kunihiko Hayashi > --- > env/env.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/env/env.c b/env/env.c > index e534008..3233172 100644 > --- a/env/env.c > +++ b/env/env.c > @@ -336,7 +336,8 @@ int env_init(void) > debug("%s: Environment %s init done (ret=%d)\n", __func__, > drv->name, ret); > > - if (gd->env_valid == ENV_INVALID) > + if (gd->env_valid == ENV_INVALID > + && drv->location != ENVL_NOWHERE) > ret = -ENOENT; > } I'm CCing Tim, it would be good to get a TB from him.