lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 06 Mar 2012 16:02:55 -0800 From: "Darrick J. Wong" <djwong@...ibm.com> To: Andreas Dilger <adilger.kernel@...ger.ca>, Theodore Tso <tytso@....edu>, "Darrick J. Wong" <djwong@...ibm.com> Cc: Sunil Mushran <sunil.mushran@...cle.com>, Amir Goldstein <amir73il@...il.com>, Andi Kleen <andi@...stfloor.org>, Mingming Cao <cmm@...ibm.com>, Joel Becker <jlbec@...lplan.org>, linux-ext4@...r.kernel.org, Coly Li <colyli@...il.com> Subject: [PATCH 47/54] e2fsck: Check revoke block checksum during recovery Verify the revoke block checksum when recovering the journal. Signed-off-by: Darrick J. Wong <djwong@...ibm.com> --- e2fsck/recovery.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/e2fsck/recovery.c b/e2fsck/recovery.c index b669941..60c8ceb 100644 --- a/e2fsck/recovery.c +++ b/e2fsck/recovery.c @@ -715,6 +715,27 @@ static int do_one_pass(journal_t *journal, return err; } +static int jbd2_revoke_block_csum_verify(journal_t *j, + void *buf) +{ + struct journal_revoke_tail *tail; + __u32 provided, calculated; + + if (!JFS_HAS_INCOMPAT_FEATURE(j, JFS_FEATURE_INCOMPAT_CSUM_V2)) + return 1; + + tail = (struct journal_revoke_tail *)(buf + j->j_blocksize - + sizeof(struct journal_revoke_tail)); + provided = tail->r_checksum; + tail->r_checksum = 0; + calculated = ext2fs_crc32c_le(~0, j->j_superblock->s_uuid, + sizeof(j->j_superblock->s_uuid)); + calculated = ext2fs_crc32c_le(calculated, buf, j->j_blocksize); + tail->r_checksum = provided; + + provided = ext2fs_be32_to_cpu(provided); + return provided == calculated; +} /* Scan a revoke record, marking all blocks mentioned as revoked. */ @@ -729,6 +750,9 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh, offset = sizeof(journal_revoke_header_t); max = be32_to_cpu(header->r_count); + if (!jbd2_revoke_block_csum_verify(journal, header)) + return -EINVAL; + if (JFS_HAS_INCOMPAT_FEATURE(journal, JFS_FEATURE_INCOMPAT_64BIT)) record_len = 8; -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists