From: Brian Foster Date: Mon, 6 May 2019 22:00:28 +0000 (-0400) Subject: xfs: always check magic values in on-disk byte order X-Git-Tag: v5.1.0-rc0~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7563fc9cf54a1a70e358377754a7baee6e245b87;p=thirdparty%2Fxfsprogs-dev.git xfs: always check magic values in on-disk byte order Source kernel commit: e34d3e74eb8f6eb020312cec747ff55ee1d1ca18 Most verifiers that check on-disk magic values convert the CPU endian magic value constant to disk endian to facilitate compile time optimization of the byte swap and reduce the need for runtime byte swaps in buffer verifiers. Several buffer verifiers do not follow this pattern. Update those verifiers for consistency. Also fix up a random typo in the inode readahead verifier name. Signed-off-by: Brian Foster Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index 2639e2f69..189986ba6 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -566,7 +566,7 @@ xfs_agfl_verify( if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) return __this_address; - if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) + if (agfl->agfl_magicnum != cpu_to_be32(XFS_AGFL_MAGIC)) return __this_address; /* * during growfs operations, the perag is not fully initialised, diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 5683d294e..f13f5b148 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -246,7 +246,7 @@ xfs_attr3_leaf_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_da3_node_hdr *hdr3 = bp->b_addr; - if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) + if (hdr3->info.hdr.magic != cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)) return __this_address; if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) @@ -256,7 +256,7 @@ xfs_attr3_leaf_verify( if (!xfs_log_check_lsn(mp, be64_to_cpu(hdr3->info.lsn))) return __this_address; } else { - if (ichdr.magic != XFS_ATTR_LEAF_MAGIC) + if (leaf->hdr.info.magic != cpu_to_be16(XFS_ATTR_LEAF_MAGIC)) return __this_address; } /* diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 4fceab884..afc3c6839 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -127,7 +127,7 @@ xfs_da3_node_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_da3_node_hdr *hdr3 = bp->b_addr; - if (ichdr.magic != XFS_DA3_NODE_MAGIC) + if (hdr3->info.hdr.magic != cpu_to_be16(XFS_DA3_NODE_MAGIC)) return __this_address; if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) @@ -137,7 +137,7 @@ xfs_da3_node_verify( if (!xfs_log_check_lsn(mp, be64_to_cpu(hdr3->info.lsn))) return __this_address; } else { - if (ichdr.magic != XFS_DA_NODE_MAGIC) + if (hdr->hdr.info.magic != cpu_to_be16(XFS_DA_NODE_MAGIC)) return __this_address; } if (ichdr.level == 0) diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c index 0aade2b57..89c92838a 100644 --- a/libxfs/xfs_inode_buf.c +++ b/libxfs/xfs_inode_buf.c @@ -147,7 +147,7 @@ const struct xfs_buf_ops xfs_inode_buf_ops = { }; const struct xfs_buf_ops xfs_inode_buf_ra_ops = { - .name = "xxfs_inode_ra", + .name = "xfs_inode_ra", .verify_read = xfs_inode_buf_readahead_verify, .verify_write = xfs_inode_buf_write_verify, }; diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c index cee77a67f..9094d7bf6 100644 --- a/libxfs/xfs_sb.c +++ b/libxfs/xfs_sb.c @@ -222,10 +222,11 @@ xfs_validate_sb_common( struct xfs_buf *bp, struct xfs_sb *sbp) { + struct xfs_dsb *dsb = XFS_BUF_TO_SBP(bp); uint32_t agcount = 0; uint32_t rem; - if (sbp->sb_magicnum != XFS_SB_MAGIC) { + if (dsb->sb_magicnum != cpu_to_be32(XFS_SB_MAGIC)) { xfs_warn(mp, "bad magic number"); return -EWRONGFS; }