lkml.org 
[lkml]   [2019]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 108/122] dm ioctl: fix hang in early create error condition
    Date
    From: Helen Koike <helen.koike@collabora.com>

    commit 0f41fcf78849c902ddca564f99a8e23ccfc80333 upstream.

    The dm_early_create() function (which deals with "dm-mod.create=" kernel
    command line option) calls dm_hash_insert() who gets an extra reference
    to the md object.

    In case of failure, this reference wasn't being released, causing
    dm_destroy() to hang, thus hanging the whole boot process.

    Fix this by calling __hash_remove() in the error path.

    Fixes: 6bbc923dfcf57d ("dm: add support to directly boot to a mapped device")
    Cc: stable@vger.kernel.org
    Signed-off-by: Helen Koike <helen.koike@collabora.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/dm-ioctl.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    --- a/drivers/md/dm-ioctl.c
    +++ b/drivers/md/dm-ioctl.c
    @@ -2069,7 +2069,7 @@ int __init dm_early_create(struct dm_ioc
    /* alloc table */
    r = dm_table_create(&t, get_mode(dmi), dmi->target_count, md);
    if (r)
    - goto err_destroy_dm;
    + goto err_hash_remove;

    /* add targets */
    for (i = 0; i < dmi->target_count; i++) {
    @@ -2116,6 +2116,10 @@ int __init dm_early_create(struct dm_ioc

    err_destroy_table:
    dm_table_destroy(t);
    +err_hash_remove:
    + (void) __hash_remove(__get_name_cell(dmi->name));
    + /* release reference from __get_name_cell */
    + dm_put(md);
    err_destroy_dm:
    dm_put(md);
    dm_destroy(md);

    \
     
     \ /
      Last update: 2019-05-23 21:39    [W:2.618 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site