On 13 Jan 2026, at 18:17, Aaron Conole wrote:
> Eelco Chaudron <[email protected]> writes: > >> The probe functions try to install a flow without any actions. >> For some reason, this only triggers an undefined behavior error after >> the next patch in this series. >> >> Fixes: 02bb2824e51d ("dpif-netdev: do hw flow offload in a thread") >> Acked-by: Eli Britstein <elibr.nvidia.com> >> Signed-off-by: Eelco Chaudron <[email protected]> >> --- > > I'm not sure that this is solely due to the commit above, although after > spending too much time swapping back and forth, I think it's true that > there is a bug there. Rather, I think this gets exacerbated by: > "[22/40] dpif-offload: Add operate implementation to dpif-offload." > coupled with your testing with flow offloading. > > Especially, I think the error comes with an ENODEV resulted upcall, > while having HW-offload enabled. This can occur in the testing when > creating bridges and adding/deleting ports while IPv6 is enabled on the > local system (because it will attempt neighbor discovery automatically, > sending packets, etc). > > I'm surprised it was never observed before, but I guess we also never > did any kind of ubsan testing with hardware offload. I guess the timing > that the code in the patch introduces may be causing this. It's just a > guess, but seems most likely. > > Given that you delete this code path completely in: > "[36/40] dpif-offload-dpdk: Abstract rte_flow implementation from > dpif-netdev." > > it's probably not a huge deal, but we should get this in to older > branches "just-in-case" Thanks, Aaron, for investigating this. I plan to keep this as a separate patch in the series, and once applied, I’ll ensure that this particular patch is backported. >> lib/dpif-netdev.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c >> index 0084dd1ea..8c260fd42 100644 >> --- a/lib/dpif-netdev.c >> +++ b/lib/dpif-netdev.c >> @@ -3090,7 +3090,7 @@ queue_netdev_flow_put(struct dp_netdev_pmd_thread *pmd, >> flow_offload = &item->data->flow; >> flow_offload->match = *match; >> flow_offload->actions = xmalloc(actions_len); >> - memcpy(flow_offload->actions, actions, actions_len); >> + nullable_memcpy(flow_offload->actions, actions, actions_len); >> flow_offload->actions_len = actions_len; >> flow_offload->orig_in_port = flow->orig_in_port; _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
