On 3 Mar 2026, at 15:23, Eelco Chaudron wrote:

> On 9 Feb 2026, at 14:29, Eli Britstein wrote:
>
>> From: Gaetan Rivet <[email protected]>
>>
>> Implicit padding bytes in a struct are not necessarily initialized.
>> Comparing such struct with memcmp might be wrong. To verify correctness
>> of such comparison, add a macro to statically assert whether a structure
>> contains padding.
>
> Thanks for the patch, Gaetan. Some small nits below.

I was thinking about this again after a coffee break, and it seems odd to
define a structure with a macro. Maybe the build assert should just follow
the structure definition? Something like the below more in line with the
Other BUILD_ASSERT_xxx macros:

struct key {
    size_t idx;
    bool b;
    uint8_t pad[7];
};
BUILD_ASSERT_PACKED(struct key);

Ilya is already copied, but maybe he has some thoughts around this...

> //Eelco
>
>> Signed-off-by: Gaetan Rivet <[email protected]>
>> Co-authored-by: Eli Britstein <[email protected]>
>> Signed-off-by: Eli Britstein <[email protected]>
>> ---
>>  include/openvswitch/compiler.h | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/include/openvswitch/compiler.h b/include/openvswitch/compiler.h
>> index 7dee9ec7a..961339944 100644
>> --- a/include/openvswitch/compiler.h
>> +++ b/include/openvswitch/compiler.h
>> @@ -218,6 +218,18 @@
>>  #define OVS_PACKED(DECL) __pragma(pack(push, 1)) DECL __pragma(pack(pop))
>>  #endif
>>
>> +/* Define a type with this macro to enforce during
>> + * compilation that it has no padding, i.e. packed.
>> + * It *DOES NOT* pack the type, only statically check
>> + * that it is already. Either the layout must be
>
> We use double spaces after the end of sentences.
>
>> + * made to fit, or explicit padding must be used.
>> + */
>
> I would personally add the comment ending on the same line. We seem to have
> mixed ways of doing this in this file, but when reviewing I'm trying to steer
> toward ending on the same line, unless the entire file does it differently.
>
>> +#define OVS_ASSERT_PACKED(TYPE, MEMBERS) \
>
> Since this is a build assertion, consider naming it like the other 
> BUILD_ASSERT_*
> macros at the end of this file. Perhaps move it to that section as well for
> consistency?
>
>> +    TYPE { \
>> +        MEMBERS \
>> +    }; \
>> +    BUILD_ASSERT_DECL(sizeof(TYPE) == sizeof(OVS_PACKED(struct { MEMBERS 
>> })))
>> +
>>  /* OVS_ALIGNED_STRUCT may be used to define a structure whose instances 
>> should
>>   * aligned on an N-byte boundary.  This:
>>   *     OVS_ALIGNED_STRUCT(64, mystruct) { ... };
>> -- 
>> 2.34.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to