> If we want to go down this route, probably the only option is to add > __attribute__((pack)) those structs to just have no padding at all, > thus breaking uapi. >
We could also spell out the padding bytes as reserved, i.e. instead of struct ethtool_wolinfo { __u32 cmd; __u32 supported; __u32 wolopts; __u8 sopass[SOPASS_MAX]; // 6, actually }; we could do struct ethtool_wolinfo { __u32 cmd; __u32 supported; __u32 wolopts; __u8 sopass[SOPASS_MAX]; // 6, actually __u8 reserved[2]; }; and then the compiler has to properly treat it, since it's no longer unnamed padding. Maybe somebody can come up with a smart BUILD_BUG_ON() to ensure such structs have no padding. That would allow us to keep the C99 initializers (which is nice) and not have to worry about this. johannes