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
|
@ -52,6 +52,7 @@
|
||||||
#include "ocfs1_fs_compat.h"
|
#include "ocfs1_fs_compat.h"
|
||||||
|
|
||||||
#include "alloc.h"
|
#include "alloc.h"
|
||||||
|
#include "blockcheck.h"
|
||||||
#include "dlmglue.h"
|
#include "dlmglue.h"
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
#include "extent_map.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,
|
if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
|
||||||
strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) {
|
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;
|
status = -EINVAL;
|
||||||
if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
|
if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
|
||||||
mlog(ML_ERROR, "found superblock with incorrect block "
|
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);
|
mlog_exit(status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue