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"

>  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