aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Karels <karels@FreeBSD.org>2023-08-08 14:09:03 +0000
committerMike Karels <karels@FreeBSD.org>2023-08-08 14:09:03 +0000
commit58a46cfd751ac726ddca8544bf73a290b0154a57 (patch)
tree13df2d7bbf02ad76dbe41eec3c81a36b9bfd3550
parentddefad7c4f48e5107aec1e92db620196c0d04101 (diff)
downloadsrc-58a46cfd751ac726ddca8544bf73a290b0154a57.tar.gz
src-58a46cfd751ac726ddca8544bf73a290b0154a57.zip
md driver compat32: fix structure padding for arm, powerpc
Because the 32-bit md_ioctl structure contains 64-bit members, arm and powerpc add padding to a multiple of 8. i386 doesn't do this. The md_ioctl32 definition was correct for amd64/i386 without padding, but wrong for arm64 and powerpc64. Make __packed__ conditional on __amd64__, and test for the expected size on non-amd64. Note that mdconfig is used in the ATF test suite. Note, I verified the structure size for powerpc, but was unable to test. MFC after: 1 week Reviewed by: jrtc27 Differential Revision: https://reviews.freebsd.org/D41339 Discussed with: jhibbits
-rw-r--r--sys/dev/md/md.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index a719dccb1955..8215995a3455 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -147,8 +147,16 @@ struct md_ioctl32 {
int md_fwsectors;
uint32_t md_label;
int md_pad[MDNPAD];
-} __attribute__((__packed__));
+}
+#ifdef __amd64__
+__attribute__((__packed__))
+#endif
+;
+#ifndef __amd64__
+CTASSERT((sizeof(struct md_ioctl32)) == 440);
+#else
CTASSERT((sizeof(struct md_ioctl32)) == 436);
+#endif
#define MDIOCATTACH_32 _IOC_NEWTYPE(MDIOCATTACH, struct md_ioctl32)
#define MDIOCDETACH_32 _IOC_NEWTYPE(MDIOCDETACH, struct md_ioctl32)