Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xfs: always check magic values in on-disk byte order

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 <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

authored by

Brian Foster and committed by
Darrick J. Wong
e34d3e74 75d02303

+8 -7
+1 -1
fs/xfs/libxfs/xfs_alloc.c
··· 570 570 571 571 if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) 572 572 return __this_address; 573 - if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) 573 + if (agfl->agfl_magicnum != cpu_to_be32(XFS_AGFL_MAGIC)) 574 574 return __this_address; 575 575 /* 576 576 * during growfs operations, the perag is not fully initialised,
+2 -2
fs/xfs/libxfs/xfs_attr_leaf.c
··· 251 251 if (xfs_sb_version_hascrc(&mp->m_sb)) { 252 252 struct xfs_da3_node_hdr *hdr3 = bp->b_addr; 253 253 254 - if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) 254 + if (hdr3->info.hdr.magic != cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)) 255 255 return __this_address; 256 256 257 257 if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) ··· 261 261 if (!xfs_log_check_lsn(mp, be64_to_cpu(hdr3->info.lsn))) 262 262 return __this_address; 263 263 } else { 264 - if (ichdr.magic != XFS_ATTR_LEAF_MAGIC) 264 + if (leaf->hdr.info.magic != cpu_to_be16(XFS_ATTR_LEAF_MAGIC)) 265 265 return __this_address; 266 266 } 267 267 /*
+2 -2
fs/xfs/libxfs/xfs_da_btree.c
··· 132 132 if (xfs_sb_version_hascrc(&mp->m_sb)) { 133 133 struct xfs_da3_node_hdr *hdr3 = bp->b_addr; 134 134 135 - if (ichdr.magic != XFS_DA3_NODE_MAGIC) 135 + if (hdr3->info.hdr.magic != cpu_to_be16(XFS_DA3_NODE_MAGIC)) 136 136 return __this_address; 137 137 138 138 if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) ··· 142 142 if (!xfs_log_check_lsn(mp, be64_to_cpu(hdr3->info.lsn))) 143 143 return __this_address; 144 144 } else { 145 - if (ichdr.magic != XFS_DA_NODE_MAGIC) 145 + if (hdr->hdr.info.magic != cpu_to_be16(XFS_DA_NODE_MAGIC)) 146 146 return __this_address; 147 147 } 148 148 if (ichdr.level == 0)
+1 -1
fs/xfs/libxfs/xfs_inode_buf.c
··· 151 151 }; 152 152 153 153 const struct xfs_buf_ops xfs_inode_buf_ra_ops = { 154 - .name = "xxfs_inode_ra", 154 + .name = "xfs_inode_ra", 155 155 .verify_read = xfs_inode_buf_readahead_verify, 156 156 .verify_write = xfs_inode_buf_write_verify, 157 157 };
+2 -1
fs/xfs/libxfs/xfs_sb.c
··· 225 225 struct xfs_buf *bp, 226 226 struct xfs_sb *sbp) 227 227 { 228 + struct xfs_dsb *dsb = XFS_BUF_TO_SBP(bp); 228 229 uint32_t agcount = 0; 229 230 uint32_t rem; 230 231 231 - if (sbp->sb_magicnum != XFS_SB_MAGIC) { 232 + if (dsb->sb_magicnum != cpu_to_be32(XFS_SB_MAGIC)) { 232 233 xfs_warn(mp, "bad magic number"); 233 234 return -EWRONGFS; 234 235 }