When a new nvvar is added without a value we want to get the value from the corresponding globalvar. We do this by using nv_set which ends up freeing the exact string that we passed into nv_set as value. This results in a corrupt value. Fix this by assigning a value manually without calling nv_set. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- common/globalvar.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/common/globalvar.c b/common/globalvar.c index 52808f8852..ab573cc68d 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -233,10 +233,16 @@ static int __nvvar_add(const char *name, const char *value) if (ret && ret != -EEXIST) return ret; - if (!value) - value = dev_get_param(&global_device, name); + if (value) + return nv_set(&nv_device, p, value); + + value = dev_get_param(&global_device, name); + if (value) { + free(p->value); + p->value = xstrdup(value); + } - return nv_set(&nv_device, p, value); + return 0; } int nvvar_add(const char *name, const char *value) -- 2.11.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox