[PATCH v2 3/6] ebg_env_finalize_update: Fix list walk

1 view
Skip to first unread message

Jan Kiszka

unread,
Jun 14, 2020, 8:59:32 AM6/14/20
to efibootg...@googlegroups.com
From: Jan Kiszka <jan.k...@siemens.com>

By using one indirection too much, we overwrote after the first element
pgci with the next element before freeing it. Let's just remove the
additional indirection, it's not needed.

Signed-off-by: Jan Kiszka <jan.k...@siemens.com>
---
env/env_api.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/env/env_api.c b/env/env_api.c
index 16de319..4fa759d 100644
--- a/env/env_api.c
+++ b/env/env_api.c
@@ -269,22 +269,21 @@ int ebg_env_finalize_update(ebgenv_t *e)
return EIO;
}

- GC_ITEM **pgci, *tmp;
+ GC_ITEM *pgci, *tmp;
uint8_t *udata;

- pgci = (GC_ITEM **)&e->gc_registry;
+ pgci = (GC_ITEM *)e->gc_registry;
udata = ((BGENV *)e->bgenv)->data->userdata;
- while (*pgci) {
+ while (pgci) {
uint8_t *var;
- var = bgenv_find_uservar(udata, (*pgci)->key);
+ var = bgenv_find_uservar(udata, pgci->key);
if (var) {
bgenv_del_uservar(udata, var);
}
- free((*pgci)->key);
- tmp = (*pgci)->next;
- free(*pgci);
- *pgci = NULL;
- pgci = &tmp;
+ free(pgci->key);
+ tmp = pgci->next;
+ free(pgci);
+ pgci = tmp;
}

((BGENV *)e->bgenv)->data->in_progress = 0;
--
2.26.2

Reply all
Reply to author
Forward
0 new messages