diff options
author | Jan Kara <jack@suse.cz> | 2009-06-09 16:26:26 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-09 16:59:03 -0700 |
commit | a61d90d75d0f9e86432c45b496b4b0fbf0fd03dc (patch) | |
tree | 85d557e9d67cbad0347c6f12f7a60c474e485f7c /drivers | |
parent | 463aea1a1c49f1a7d4b50656dfd6c8bb33358b1b (diff) | |
download | op-kernel-dev-a61d90d75d0f9e86432c45b496b4b0fbf0fd03dc.zip op-kernel-dev-a61d90d75d0f9e86432c45b496b4b0fbf0fd03dc.tar.gz |
jbd: fix race in buffer processing in commit code
In commit code, we scan buffers attached to a transaction. During this
scan, we sometimes have to drop j_list_lock and then we recheck whether
the journal buffer head didn't get freed by journal_try_to_free_buffers().
But checking for buffer_jbd(bh) isn't enough because a new journal head
could get attached to our buffer head. So add a check whether the journal
head remained the same and whether it's still at the same transaction and
list.
This is a nasty bug and can cause problems like memory corruption (use after
free) or trigger various assertions in JBD code (observed).
Signed-off-by: Jan Kara <jack@suse.cz>
Cc: <stable@kernel.org>
Cc: <linux-ext4@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
0 files changed, 0 insertions, 0 deletions