lkml.org 
[lkml]   [2019]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 129/405] bcache: avoid potential memleak of list of journal_replay(s) in the CACHE_SYNC branch of run_cache_set
    Date
    [ Upstream commit 95f18c9d1310730d075499a75aaf13bcd60405a7 ]

    In the CACHE_SYNC branch of run_cache_set(), LIST_HEAD(journal) is used
    to collect journal_replay(s) and filled by bch_journal_read().

    If all goes well, bch_journal_replay() will release the list of
    jounal_replay(s) at the end of the branch.

    If something goes wrong, code flow will jump to the label "err:" and leave
    the list unreleased.

    This patch will release the list of journal_replay(s) in the case of
    error detected.

    v1 -> v2:
    * Move the release code to the location after label 'err:' to
    simply the change.

    Signed-off-by: Shenghui Wang <shhuiw@foxmail.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/md/bcache/super.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
    index 171d5e0f698ba..5c9751e9a76a4 100644
    --- a/drivers/md/bcache/super.c
    +++ b/drivers/md/bcache/super.c
    @@ -1782,6 +1782,8 @@ static void run_cache_set(struct cache_set *c)
    struct cache *ca;
    struct closure cl;
    unsigned int i;
    + LIST_HEAD(journal);
    + struct journal_replay *l;

    closure_init_stack(&cl);

    @@ -1939,6 +1941,12 @@ static void run_cache_set(struct cache_set *c)
    set_bit(CACHE_SET_RUNNING, &c->flags);
    return;
    err:
    + while (!list_empty(&journal)) {
    + l = list_first_entry(&journal, struct journal_replay, list);
    + list_del(&l->list);
    + kfree(l);
    + }
    +
    closure_sync(&cl);
    /* XXX: test this, it's broken */
    bch_cache_set_error(c, "%s", err);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-05-30 05:11    [W:2.489 / U:2.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site