Commit 650b774c authored by Wilfred Mallawa's avatar Wilfred Mallawa Committed by Carlos Maiolino
Browse files

xfs: add static size checks for ioctl UABI



The ioctl structures in libxfs/xfs_fs.h are missing static size checks.
It is useful to have static size checks for these structures as adding
new fields to them could cause issues (e.g. extra padding that may be
inserted by the compiler). So add these checks to xfs/xfs_ondisk.h.

Due to different padding/alignment requirements across different
architectures, to avoid build failures, some structures are ommited from
the size checks. For example, structures with "compat_" definitions in
xfs/xfs_ioctl32.h are ommited.

Signed-off-by: default avatarWilfred Mallawa <wilfred.mallawa@wdc.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarCarlos Maiolino <cem@kernel.org>
parent e97cbf86
Loading
Loading
Loading
Loading
+34 −5
Original line number Diff line number Diff line
@@ -208,11 +208,6 @@ xfs_check_ondisk_structs(void)
	XFS_CHECK_OFFSET(struct xfs_dir3_free, hdr.hdr.magic,	0);
	XFS_CHECK_OFFSET(struct xfs_attr3_leafblock, hdr.info.hdr, 0);

	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat,		192);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers,		24);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req,		64);

	/*
	 * Make sure the incore inode timestamp range corresponds to hand
	 * converted values based on the ondisk format specification.
@@ -292,6 +287,40 @@ xfs_check_ondisk_structs(void)
	XFS_CHECK_SB_OFFSET(sb_pad,			281);
	XFS_CHECK_SB_OFFSET(sb_rtstart,			288);
	XFS_CHECK_SB_OFFSET(sb_rtreserved,		296);

	/*
	 * ioctl UABI
	 *
	 * Due to different padding/alignment requirements across
	 * different architectures, some structures are ommited from
	 * the size checks. In addition, structures with architecture
	 * dependent size fields are also ommited (e.g. __kernel_long_t).
	 */
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat,		192);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers,		24);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct dioattr,			12);
	XFS_CHECK_STRUCT_SIZE(struct getbmap,			32);
	XFS_CHECK_STRUCT_SIZE(struct getbmapx,			48);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_cursor,	16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_ent,		4);
	XFS_CHECK_STRUCT_SIZE(struct xfs_ag_geometry,		128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_rtgroup_geometry,	128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_error_injection,	8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom,		256);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom_v4,		112);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_counts,		32);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_resblks,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_growfs_log,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulk_ireq,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fs_eofblocks,		128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsid,			8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_metadata,	64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec_head,	40);
}

#endif /* __XFS_ONDISK_H */