From 358f3f8f49a50ea3f2032a31eb73f16411fad8a4 Mon Sep 17 00:00:00 2001 From: Kaho Ng Date: Tue, 28 Jun 2016 17:18:52 +0800 Subject: ext4_journal: fix memory leakage when revoking a block repeatedly --- src/ext4_journal.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ext4_journal.c b/src/ext4_journal.c index 1f70c81..01a8c08 100644 --- a/src/ext4_journal.c +++ b/src/ext4_journal.c @@ -1656,8 +1656,16 @@ int jbd_trans_set_block_dirty(struct jbd_trans *trans, int jbd_trans_revoke_block(struct jbd_trans *trans, ext4_fsblk_t lba) { - struct jbd_revoke_rec *rec = - calloc(1, sizeof(struct jbd_revoke_rec)); + struct jbd_revoke_rec tmp_rec = { + .lba = lba + }, *rec; + rec = RB_FIND(jbd_revoke_tree, + &trans->revoke_root, + &tmp_rec); + if (rec) + return EOK; + + rec = calloc(1, sizeof(struct jbd_revoke_rec)); if (!rec) return ENOMEM; -- cgit v1.2.3