Message ID | 1511288957-68599-3-git-send-email-mark.b.kavanagh@intel.com |
---|---|
State | Superseded |
Delegated to: | Ian Stokes |
Headers | show |
Series | netdev-dpdk: support multi-segment mbufs | expand |
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 <qiudayu@chinac.com>: > https://patchwork.ozlabs.org/patch/777570/ > > Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Acked-by: Michael Qiu <qiudayu@chinac.com> > --- > 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 > } >
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 }
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 <qiudayu@chinac.com>: https://patchwork.ozlabs.org/patch/777570/ Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> --- lib/dp-packet.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)