On Mon, Feb 12, 2024 at 10:30:17AM -0800, Kees Cook wrote: > I might suggest doing a binary difference comparison[1], as it's possible > that "real_sz" is being used to try to avoid trailing padding on > structs. I wasn't able to trivially construct an example, so maybe I'm > not understanding its purpose correctly. Hmm.. No need for binary comparison: +static_assert(offsetof(struct ib_flow_eth_filter, real_sz) == sizeof(struct ib_flow_eth_filter)); +static_assert(offsetof(struct ib_flow_ib_filter, real_sz) == sizeof(struct ib_flow_ib_filter)); +static_assert(offsetof(struct ib_flow_tunnel_filter, real_sz) == sizeof(struct ib_flow_tunnel_filter)); +static_assert(offsetof(struct ib_flow_esp_filter, real_sz) == sizeof(struct ib_flow_esp_filter)); +static_assert(offsetof(struct ib_flow_gre_filter, real_sz) == sizeof(struct ib_flow_gre_filter)); +static_assert(offsetof(struct ib_flow_mpls_filter, real_sz) == sizeof(struct ib_flow_mpls_filter)); But yep, it is doing something: In file included from ../include/linux/mlx5/device.h:37: ../include/rdma/ib_verbs.h:1931:15: error: static assertion failed due to requirement '__builtin_offsetof(struct ib_flow_ib_filter, real_sz) == sizeof(struct ib_flow_ib_filter)': offsetof(struct ib_flow_ib_filter, real_sz) == sizeof(struct ib_flow_ib_filter) 1931 | static_assert(offsetof(struct ib_flow_ib_filter, real_sz) == sizeof(struct ib_flow_ib_filter)); __packed on that struct would probably be be OK. Jason