diff options
author | Mike Karels <karels@FreeBSD.org> | 2023-08-08 14:09:03 +0000 |
---|---|---|
committer | Mike Karels <karels@FreeBSD.org> | 2023-08-08 14:09:03 +0000 |
commit | 58a46cfd751ac726ddca8544bf73a290b0154a57 (patch) | |
tree | 13df2d7bbf02ad76dbe41eec3c81a36b9bfd3550 | |
parent | ddefad7c4f48e5107aec1e92db620196c0d04101 (diff) | |
download | src-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.c | 10 |
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) |