]> git.baikalelectronics.ru Git - kernel.git/commit
jbd2: fix use after free in jbd2_journal_dirty_metadata()
authorJan Kara <jack@suse.cz>
Mon, 11 Mar 2013 17:24:56 +0000 (13:24 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 11 Mar 2013 17:24:56 +0000 (13:24 -0400)
commit49960706159517d1cba11ff90f1134b8f5b61386
treebb350333433690e5a7ce3f2481c055c78ac5fef7
parentaef8f88a09d90f99730404604e4db04d4e88c223
jbd2: fix use after free in jbd2_journal_dirty_metadata()

jbd2_journal_dirty_metadata() didn't get a reference to journal_head it
was working with. This is OK in most of the cases since the journal head
should be attached to a transaction but in rare occasions when we are
journalling data, __ext4_journalled_writepage() can race with
jbd2_journal_invalidatepage() stripping buffers from a page and thus
journal head can be freed under hands of jbd2_journal_dirty_metadata().

Fix the problem by getting own journal head reference in
jbd2_journal_dirty_metadata() (and also in jbd2_journal_set_triggers()
which can possibly have the same issue).

Reported-by: Zheng Liu <gnehzuil.liu@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: stable@vger.kernel.org
fs/jbd2/transaction.c