> 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