ocfs2: Validate superblock with checksum and ecc.
The superblock is read via a raw call. Validate it after we find it from its signature. Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
parent
c175a518b4
commit
d030cc978e
1 changed files with 11 additions and 0 deletions
|
@ -52,6 +52,7 @@
|
|||
#include "ocfs1_fs_compat.h"
|
||||
|
||||
#include "alloc.h"
|
||||
#include "blockcheck.h"
|
||||
#include "dlmglue.h"
|
||||
#include "export.h"
|
||||
#include "extent_map.h"
|
||||
|
@ -1989,6 +1990,15 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di,
|
|||
|
||||
if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
|
||||
strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) {
|
||||
/* We have to do a raw check of the feature here */
|
||||
if (le32_to_cpu(di->id2.i_super.s_feature_incompat) &
|
||||
OCFS2_FEATURE_INCOMPAT_META_ECC) {
|
||||
status = ocfs2_block_check_validate(bh->b_data,
|
||||
bh->b_size,
|
||||
&di->i_check);
|
||||
if (status)
|
||||
goto out;
|
||||
}
|
||||
status = -EINVAL;
|
||||
if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
|
||||
mlog(ML_ERROR, "found superblock with incorrect block "
|
||||
|
@ -2030,6 +2040,7 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di,
|
|||
}
|
||||
}
|
||||
|
||||
out:
|
||||
mlog_exit(status);
|
||||
return status;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue