Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff5ff606 authored by Arnaud Lacombe's avatar Arnaud Lacombe Committed by Michal Marek
Browse files

kconfig: delay symbol direct dependency initialization



This fixes the use-after-free and associated crash in kconfig introduced
in commit 246cf9c2.

Signed-off-by: default avatarArnaud Lacombe <lacombar@gmail.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 8558f59e
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -165,7 +165,6 @@ struct menu {
	struct symbol *sym;
	struct property *prompt;
	struct expr *dep;
	struct expr *dir_dep;
	unsigned int flags;
	char *help;
	struct file *file;
+2 −5
Original line number Diff line number Diff line
@@ -107,7 +107,6 @@ static struct expr *menu_check_dep(struct expr *e)
void menu_add_dep(struct expr *dep)
{
	current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
	current_entry->dir_dep = current_entry->dep;
}

void menu_set_type(int type)
@@ -291,10 +290,6 @@ void menu_finalize(struct menu *parent)
		for (menu = parent->list; menu; menu = menu->next)
			menu_finalize(menu);
	} else if (sym) {
		/* ignore inherited dependencies for dir_dep */
		sym->dir_dep.expr = expr_transform(expr_copy(parent->dir_dep));
		sym->dir_dep.expr = expr_eliminate_dups(sym->dir_dep.expr);

		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
		basedep = expr_eliminate_dups(expr_transform(basedep));
@@ -325,6 +320,8 @@ void menu_finalize(struct menu *parent)
			parent->next = last_menu->next;
			last_menu->next = NULL;
		}

		sym->dir_dep.expr = parent->dep;
	}
	for (menu = parent->list; menu; menu = menu->next) {
		if (sym && sym_is_choice(sym) &&