summaryrefslogtreecommitdiffstats
path: root/fs/jbd2/recovery.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-05-17 07:58:08 +0200
committerIngo Molnar <mingo@kernel.org>2015-05-17 07:58:08 +0200
commitcffc32975da7df2ef909299c47ff644e1357e0ac (patch)
tree04cfa6276b890f49f686d65be7397c4232ac44af /fs/jbd2/recovery.c
parent6dc178760553605c58d78bd403dfcb4e042c5b72 (diff)
parentadeb5537849d9db428fe0ddc3562e5a765a347e2 (diff)
downloadop-kernel-dev-cffc32975da7df2ef909299c47ff644e1357e0ac.zip
op-kernel-dev-cffc32975da7df2ef909299c47ff644e1357e0ac.tar.gz
Merge branch 'x86/asm' into x86/apic, to resolve conflicts
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/jbd2/recovery.c')
-rw-r--r--fs/jbd2/recovery.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
index b5128c6..a9079d0 100644
--- a/fs/jbd2/recovery.c
+++ b/fs/jbd2/recovery.c
@@ -842,15 +842,23 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
{
jbd2_journal_revoke_header_t *header;
int offset, max;
+ int csum_size = 0;
+ __u32 rcount;
int record_len = 4;
header = (jbd2_journal_revoke_header_t *) bh->b_data;
offset = sizeof(jbd2_journal_revoke_header_t);
- max = be32_to_cpu(header->r_count);
+ rcount = be32_to_cpu(header->r_count);
if (!jbd2_revoke_block_csum_verify(journal, header))
return -EINVAL;
+ if (jbd2_journal_has_csum_v2or3(journal))
+ csum_size = sizeof(struct jbd2_journal_revoke_tail);
+ if (rcount > journal->j_blocksize - csum_size)
+ return -EINVAL;
+ max = rcount;
+
if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
record_len = 8;
OpenPOWER on IntegriCloud