Skip to content

Commit 650b774

Browse files
twilfredocmaiolino
authored andcommitted
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: Wilfred Mallawa <wilfred.mallawa@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Carlos Maiolino <cem@kernel.org>
1 parent e97cbf8 commit 650b774

1 file changed

Lines changed: 34 additions & 5 deletions

File tree

fs/xfs/libxfs/xfs_ondisk.h

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,6 @@ xfs_check_ondisk_structs(void)
208208
XFS_CHECK_OFFSET(struct xfs_dir3_free, hdr.hdr.magic, 0);
209209
XFS_CHECK_OFFSET(struct xfs_attr3_leafblock, hdr.info.hdr, 0);
210210

211-
XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat, 192);
212-
XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers, 24);
213-
XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req, 64);
214-
XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req, 64);
215-
216211
/*
217212
* Make sure the incore inode timestamp range corresponds to hand
218213
* converted values based on the ondisk format specification.
@@ -292,6 +287,40 @@ xfs_check_ondisk_structs(void)
292287
XFS_CHECK_SB_OFFSET(sb_pad, 281);
293288
XFS_CHECK_SB_OFFSET(sb_rtstart, 288);
294289
XFS_CHECK_SB_OFFSET(sb_rtreserved, 296);
290+
291+
/*
292+
* ioctl UABI
293+
*
294+
* Due to different padding/alignment requirements across
295+
* different architectures, some structures are ommited from
296+
* the size checks. In addition, structures with architecture
297+
* dependent size fields are also ommited (e.g. __kernel_long_t).
298+
*/
299+
XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat, 192);
300+
XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers, 24);
301+
XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req, 64);
302+
XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req, 64);
303+
XFS_CHECK_STRUCT_SIZE(struct dioattr, 12);
304+
XFS_CHECK_STRUCT_SIZE(struct getbmap, 32);
305+
XFS_CHECK_STRUCT_SIZE(struct getbmapx, 48);
306+
XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_cursor, 16);
307+
XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist, 8);
308+
XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist, 8);
309+
XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_ent, 4);
310+
XFS_CHECK_STRUCT_SIZE(struct xfs_ag_geometry, 128);
311+
XFS_CHECK_STRUCT_SIZE(struct xfs_rtgroup_geometry, 128);
312+
XFS_CHECK_STRUCT_SIZE(struct xfs_error_injection, 8);
313+
XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom, 256);
314+
XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom_v4, 112);
315+
XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_counts, 32);
316+
XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_resblks, 16);
317+
XFS_CHECK_STRUCT_SIZE(struct xfs_growfs_log, 8);
318+
XFS_CHECK_STRUCT_SIZE(struct xfs_bulk_ireq, 64);
319+
XFS_CHECK_STRUCT_SIZE(struct xfs_fs_eofblocks, 128);
320+
XFS_CHECK_STRUCT_SIZE(struct xfs_fsid, 8);
321+
XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_metadata, 64);
322+
XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec, 16);
323+
XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec_head, 40);
295324
}
296325

297326
#endif /* __XFS_ONDISK_H */

0 commit comments

Comments
 (0)