lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 047/161] kconfig: Fix automatic menu creation mem leak
    Date
    From: Ulf Magnusson <ulfalizer@gmail.com>

    [ Upstream commit ae7440ef0c8013d68c00dad6900e7cce5311bb1c ]

    expr_trans_compare() always allocates and returns a new expression,
    giving the following leak outline:

    ...
    *Allocate*
    basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
    ...
    for (menu = parent->next; menu; menu = menu->next) {
    ...
    *Copy*
    dep2 = expr_copy(basedep);
    ...
    *Free copy*
    expr_free(dep2);
    }
    *basedep lost!*

    Fix by freeing 'basedep' after the loop.

    Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:

    LEAK SUMMARY:
    definitely lost: 344,376 bytes in 14,349 blocks
    ...

    Summary after the fix:

    LEAK SUMMARY:
    definitely lost: 44,448 bytes in 1,852 blocks
    ...

    Signed-off-by: Ulf Magnusson <ulfalizer@gmail.com>
    Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    scripts/kconfig/menu.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
    index e9357931b47d..749c2bd5fc51 100644
    --- a/scripts/kconfig/menu.c
    +++ b/scripts/kconfig/menu.c
    @@ -372,6 +372,7 @@ void menu_finalize(struct menu *parent)
    menu->parent = parent;
    last_menu = menu;
    }
    + expr_free(basedep);
    if (last_menu) {
    parent->list = parent->next;
    parent->next = last_menu->next;
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:21    [W:2.091 / U:0.436 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site