| From edb749f4390b3c1604233dc7c4fb0361f472e712 Mon Sep 17 00:00:00 2001 |
| From: Benjamin Poirier <bpoirier@suse.de> |
| Date: Mon, 15 Apr 2013 10:13:50 -0400 |
| Subject: menuconfig: Fix memory leak introduced by jump keys feature |
| |
| From: Benjamin Poirier <bpoirier@suse.de> |
| |
| commit edb749f4390b3c1604233dc7c4fb0361f472e712 upstream. |
| |
| Fixes the memory leak of struct jump_key allocated in get_prompt_str() |
| |
| Signed-off-by: Benjamin Poirier <bpoirier@suse.de> |
| Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> |
| Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr> |
| Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| scripts/kconfig/list.h | 13 +++++++++++++ |
| scripts/kconfig/mconf.c | 3 +++ |
| 2 files changed, 16 insertions(+) |
| |
| --- a/scripts/kconfig/list.h |
| +++ b/scripts/kconfig/list.h |
| @@ -51,6 +51,19 @@ struct list_head { |
| pos = list_entry(pos->member.next, typeof(*pos), member)) |
| |
| /** |
| + * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
| + * @pos: the type * to use as a loop cursor. |
| + * @n: another type * to use as temporary storage |
| + * @head: the head for your list. |
| + * @member: the name of the list_struct within the struct. |
| + */ |
| +#define list_for_each_entry_safe(pos, n, head, member) \ |
| + for (pos = list_entry((head)->next, typeof(*pos), member), \ |
| + n = list_entry(pos->member.next, typeof(*pos), member); \ |
| + &pos->member != (head); \ |
| + pos = n, n = list_entry(n->member.next, typeof(*n), member)) |
| + |
| +/** |
| * list_empty - tests whether a list is empty |
| * @head: the list to test. |
| */ |
| --- a/scripts/kconfig/mconf.c |
| +++ b/scripts/kconfig/mconf.c |
| @@ -389,6 +389,7 @@ again: |
| .targets = targets, |
| .keys = keys, |
| }; |
| + struct jump_key *pos, *tmp; |
| |
| res = get_relations_str(sym_arr, &head); |
| dres = show_textbox_ext(_("Search Results"), (char *) |
| @@ -402,6 +403,8 @@ again: |
| again = true; |
| } |
| str_free(&res); |
| + list_for_each_entry_safe(pos, tmp, &head, entries) |
| + free(pos); |
| } while (again); |
| free(sym_arr); |
| str_free(&title); |