2017/11/22 2:29, Mark Kavanagh :

dp_packets are created using xmalloc(); in the case of OvS-DPDK, it's
possible the the resultant mbuf portion of the dp_packet contains
random data. For some mbuf fields, specifically those related to
multi-segment mbufs and/or offload features, random values may cause
unexpected behaviour, should the dp_packet's contents be later copied
to a DPDK mbuf. It is critical therefore, that these fields should be
initialized to 0.

This patch ensures that the following mbuf fields are initialized to 0,
on creation of a new dp_packet:
    - ol_flags
    - nb_segs
    - tx_offload
    - packet_type

Adapted from an idea by Michael Qiu <[email protected]>:
https://patchwork.ozlabs.org/patch/777570/

Signed-off-by: Mark Kavanagh <[email protected]>

Acked-by: Michael Qiu <[email protected]>

---
  lib/dp-packet.h | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/dp-packet.h b/lib/dp-packet.h
index b4b721c..7aa440f 100644
--- a/lib/dp-packet.h
+++ b/lib/dp-packet.h
@@ -626,13 +626,13 @@ dp_packet_mbuf_rss_flag_reset(struct dp_packet *p 
OVS_UNUSED)
/* This initialization is needed for packets that do not come
   * from DPDK interfaces, when vswitchd is built with --with-dpdk.
- * The DPDK rte library will still otherwise manage the mbuf.
- * We only need to initialize the mbuf ol_flags. */
+ * The DPDK rte library will still otherwise manage the mbuf. */
  static inline void
  dp_packet_mbuf_init(struct dp_packet *p OVS_UNUSED)
  {
  #ifdef DPDK_NETDEV
-    p->mbuf.ol_flags = 0;
+    struct rte_mbuf *mbuf = &(p->mbuf);
+    mbuf->ol_flags = mbuf->nb_segs = mbuf->tx_offload = mbuf->packet_type = 0;
  #endif
  }

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to