[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260210055942.2844783-5-wilfred.opensource@gmail.com>
Date: Tue, 10 Feb 2026 15:59:44 +1000
From: Wilfred Mallawa <wilfred.opensource@...il.com>
To: Carlos Maiolino <cem@...nel.org>,
"Darrick J . Wong" <djwong@...nel.org>
Cc: linux-xfs@...r.kernel.org,
linux-kernel@...r.kernel.org,
Christoph Hellwig <hch@....de>,
Wilfred Mallawa <wilfred.mallawa@....com>
Subject: [PATCH v2 2/2] xfs: add static size checks for ioctl UABI
From: Wilfred Mallawa <wilfred.mallawa@....com>
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: Wilfred Mallawa <wilfred.mallawa@....com>
---
V1 -> V2:
- Added inline comment to describe why some ioctl structs
are not addded.
- Keep the new size check coupled under "ioctl UABI".
- Drop size checks for structures that are in xfs/xfs_ioctl32.h
(i.e compat__X) to avoid build failures across different
architectures.
---
fs/xfs/libxfs/xfs_ondisk.h | 40 +++++++++++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 5 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_ondisk.h b/fs/xfs/libxfs/xfs_ondisk.h
index 601a8367ced6..dced91d281fa 100644
--- a/fs/xfs/libxfs/xfs_ondisk.h
+++ b/fs/xfs/libxfs/xfs_ondisk.h
@@ -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,41 @@ 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 */
--
2.53.0
Powered by blists - more mailing lists