On Mon, Apr 5, 2021 at 1:32 AM Ilya Maximets <i.maxim...@ovn.org> wrote: > > 'dpif_execute_helper_cb' doesn't initilalize the 'hash' field that > may be passed down to datapath and might cause execution of a different > set of actions, e.g. on recirculation. > > Thread 6 handler27: > Conditional jump or move depends on uninitialised value(s) > at 0x53A2C2: dpif_netlink_encode_execute (dpif-netlink.c:1841) > by 0x53A2C2: dpif_netlink_operate__ (dpif-netlink.c:1919) > by 0x53A82D: dpif_netlink_operate_chunks (dpif-netlink.c:2238) > by 0x53A82D: dpif_netlink_operate (dpif-netlink.c:2297) > by 0x48135F: dpif_operate (dpif.c:1366) > by 0x481923: dpif_execute.part.24 (dpif.c:1320) > by 0x481C46: dpif_execute (dpif.c:1312) > by 0x481C46: dpif_execute_helper_cb (dpif.c:1243) > by 0x4AE943: odp_execute_actions (odp-execute.c:865) > by 0x47F272: dpif_execute_with_help (dpif.c:1296) > by 0x4812FF: dpif_operate (dpif.c:1422) > by 0x442226: handle_upcalls (ofproto-dpif-upcall.c:1617) > by 0x442226: recv_upcalls.isra.36 (ofproto-dpif-upcall.c:855) > by 0x442351: udpif_upcall_handler (ofproto-dpif-upcall.c:755) > by 0x4FDE2C: ovsthread_wrapper (ovs-thread.c:383) > by 0x5E19159: start_thread (in /usr/lib64/libpthread-2.28.so) > by 0x69ECF72: clone (in /usr/lib64/libc-2.28.so) > Uninitialised value was created by a stack allocation > at 0x481966: dpif_execute_helper_cb (dpif.c:1159) > > Additionally added a missing comment to the 'struct dpif_execute'. Thanks Ilya
Acked-by: Tonghao Zhang <xiangxia.m....@gmail.com> > CC: Tonghao Zhang <xiangxia.m....@gmail.com> > Fixes: 0442bfb11d6c ("ofproto-dpif-upcall: Echo HASH attribute back to > datapath.") > Signed-off-by: Ilya Maximets <i.maxim...@ovn.org> > --- > lib/dpif.c | 1 + > lib/dpif.h | 2 +- > 2 files changed, 2 insertions(+), 1 deletion(-) > > diff --git a/lib/dpif.c b/lib/dpif.c > index 56d0b4a65..26e8bfb7d 100644 > --- a/lib/dpif.c > +++ b/lib/dpif.c > @@ -1240,6 +1240,7 @@ dpif_execute_helper_cb(void *aux_, struct > dp_packet_batch *packets_, > execute.needs_help = false; > execute.probe = false; > execute.mtu = 0; > + execute.hash = 0; > aux->error = dpif_execute(aux->dpif, &execute); > log_execute_message(aux->dpif, &this_module, &execute, > true, aux->error); > diff --git a/lib/dpif.h b/lib/dpif.h > index ecda896c7..f9728e673 100644 > --- a/lib/dpif.h > +++ b/lib/dpif.h > @@ -727,7 +727,7 @@ struct dpif_execute { > bool probe; /* Suppress error messages. */ > unsigned int mtu; /* Maximum transmission unit to fragment. > 0 if not a fragmented packet */ > - uint64_t hash; > + uint64_t hash; /* Packet flow hash. 0 if not specified. > */ > const struct flow *flow; /* Flow extracted from 'packet'. */ > > /* Input, but possibly modified as a side effect of execution. */ > -- > 2.26.2 > -- Best regards, Tonghao _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev