Patch "jbd2: don't leak memory if setting up journal fails" has been added to the 4.10-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
jbd2: don't leak memory if setting up journal fails
to the 4.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
jbd2-don-t-leak-memory-if-setting-up-journal-fails.patch
and it can be found in the queue-4.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
cd9cb405e0b948363811dc74dbb2890f56f2cb87Mon Sep 17 00:00:00 2001
From: Eric Biggers <[email protected]>
Date: Wed, 15 Mar 2017 15:08:48 -0400
Subject: jbd2: don't leak memory if setting up journal fails
From: Eric Biggers <[email protected]>
commit cd9cb405e0b948363811dc74dbb2890f56f2cb87 upstream.
In journal_init_common(), if we failed to allocate the j_wbuf array, or if we failed to create the buffer_head for the journal superblock, we leaked the memory allocated for the revocation tables. Fix this.
--- fs/jbd2/journal.c | 22 +++++++++++----------- fs/jbd2/revoke.c | 1 + 2 files changed, 12 insertions(+), 11 deletions(-)
fs/jbd2/journal.c +11 -11
@@ -1125,10 +1125,8 @@ static journal_t *journal_init_common(st/* Set up a default-sized revoke table for the new mount. */ err =jbd2_journal_init_revoke (journal,JOURNAL_REVOKE_DEFAULT_HASH ); -if (err) { -kfree (journal); -return NULL ; - } +if (err) + goto err_cleanup;spin_lock_init (&journal->j_history_lock);
@@ -1145,23 +1143,25 @@ static journal_t *journal_init_common(st journal->j_wbufsize = n; journal->j_wbuf =kmalloc_array (n,sizeof (struct buffer_head *),GFP_KERNEL ); -if (!journal->j_wbuf) { -kfree (journal); -return NULL ; - } +if (!journal->j_wbuf) + goto err_cleanup; bh =getblk_unmovable (journal->j_dev, start, journal->j_blocksize);if (!bh) {pr_err ("%s: Cannot get buffer for journal superblock\n" , __func__); -kfree (journal->j_wbuf); -kfree (journal); -return NULL ; + goto err_cleanup; } journal->j_sb_buffer = bh; journal->j_superblock = (journal_superblock_t *)bh->b_data;return journal; + +err_cleanup: +kfree (journal->j_wbuf); +jbd2_journal_destroy_revoke (journal); +kfree (journal); +return NULL ; }/* jbd2_journal_init_dev and jbd2_journal_init_inode:
fs/jbd2/revoke.c +1 -0
@@ -280,6 +280,7 @@ int jbd2_journal_init_revoke(journal_t * fail1:jbd2_journal_destroy_revoke_table (journal->j_revoke_table[0 ]); + journal->j_revoke_table[0 ] =NULL ; fail0:return -ENOMEM ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.10/ext4-mark-inode-dirty-after-converting-inline-directory.patch queue-4.10/fscrypt-remove-broken-support-for-detecting-keyring-key-revocation.patch queue-4.10/jbd2-don-t-leak-memory-if-setting-up-journal-fails.patch