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

Reply via email to