diff options
author | Jan Kara <jack@suse.cz> | 2009-07-17 10:40:01 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-07-17 10:40:01 -0400 |
commit | f6f50e28f0cb8d7bcdfaacc83129f005dede11b1 (patch) | |
tree | f7a0ee7cc686c0687cd4020185265ae0cd29471b /fs/jbd2 | |
parent | 78f1ddbb498283c2445c11b0dfa666424c301803 (diff) | |
download | linux-3.10-f6f50e28f0cb8d7bcdfaacc83129f005dede11b1.tar.gz linux-3.10-f6f50e28f0cb8d7bcdfaacc83129f005dede11b1.tar.bz2 linux-3.10-f6f50e28f0cb8d7bcdfaacc83129f005dede11b1.zip |
jbd2: Fail to load a journal if it is too short
Due to on disk corruption, it can happen that journal is too short. Fail
to load it in such case so that we don't oops somewhere later.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2')
-rw-r--r-- | fs/jbd2/journal.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index e378cb38397..a8a358bc0f2 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -1187,6 +1187,12 @@ static int journal_reset(journal_t *journal) first = be32_to_cpu(sb->s_first); last = be32_to_cpu(sb->s_maxlen); + if (first + JBD2_MIN_JOURNAL_BLOCKS > last + 1) { + printk(KERN_ERR "JBD: Journal too short (blocks %llu-%llu).\n", + first, last); + journal_fail_superblock(journal); + return -EINVAL; + } journal->j_first = first; journal->j_last = last; |