On Wed, May 20, 2026 at 03:25:32PM +0200, Adrian Schollmeyer wrote: > From: Michael Pfeiffer <[email protected]> > > For a MODIFY_FIELD action, flow_hw_validate_action_modify_field() is > invoked and enforces class_id == 0 in the action's source and > destination, if the modified field is none of > RTE_FLOW_FIELD_GENEVE_OPT_*, as the value is used solely for GENEVE > fields. > > However, this check is flawed due to the way rte_flow_field_data is > initialized. As it consists of unions and anonymous structs as members, > empty initialization of this struct or initializing just the tag_index > only guarantees initialization of the first union member, while the > remaining member's default initialization behavior is unspecified. > Therefore, depending on the compiler type, version and configuration, > the remaining members may either be default-initialized as well or > contain bytes from uninitialized memory. This causes the check to fail > depending on how the struct is initialized wherever it is used. > > For example, rte_flow_configure() sometimes fails on mlx5 under these > circumstances with an error "destination class id is not supported" > during creation of representor tagging rules, as these internally use > MODIFY_FIELD actions in the following call stack: > > 1. rte_flow_configure > 2. mlx5_flow_port_configure > 3. flow_hw_configure > 4. __flow_hw_configure > 5. flow_hw_setup_tx_repr_tagging > 6. flow_hw_create_tx_repr_tag_jump_acts_tmpl > --> various rte_flow_action_modify_field are initialized here, but > class_id remains uninitialized > 7. __flow_hw_actions_template_create > 8. mlx5_flow_hw_actions_validate > 9. flow_hw_validate_action_modify_field > --> invoked with class_id containing uninitialized bytes and > non-GENEVE field type > > Remove the two checks for class_id in the non-GENEVE case, as this field > is unused for these actions and avoids additional implicit dependencies > on the correct ordering of union members. > > Fixes: 1caa89ec1891 ("net/mlx5: support GENEVE options modification") > Cc: [email protected] > > Signed-off-by: Michael Pfeiffer <[email protected]> > Signed-off-by: Adrian Schollmeyer <[email protected]>
Acked-by: Dariusz Sosnowski <[email protected]> Thank you for the contribution. Best regards, Dariusz Sosnowski

