On Tue, Jul 22, 2014 at 10:37 PM, Ben Pfaff <b...@nicira.com> wrote:
> Pravin, the code in dpif-netdev.c modified by this patch is similar but
> not identical on branch-2.3.  Do you have an idea whether differences
> elsewhere in the tree make this safe on branch-2.3 without change?
>
I think same bug exist on 2.3. I do not know why it is safe on 2.3.
Let me check code.


> Thanks,
>
> Ben.
>
> On Tue, Jul 22, 2014 at 10:30:27PM -0700, Ben Pfaff wrote:
>> Thanks, applied to master.
>>
>> On Tue, Jul 22, 2014 at 10:22:30PM -0700, Justin Pettit wrote:
>> > Acked-by: Justin Pettit <jpet...@nicira.com>
>> >
>> >
>> >
>> > On July 22, 2014 at 9:13:58 PM, Ben Pfaff (b...@nicira.com) wrote:
>> > > Commit db73f7166a6 (netdev-dpdk: Fix race condition with DPDK mempools in
>> > > non pmd threads) switched to a new way of setting up 'upcall->packet', 
>> > > but
>> > > only initialized two of the fields in the packet. This could cause
>> > > core dumps and other strange behavior. In particular it caused failures 
>> > > in
>> > > several unit tests on XenServer.
>> > >
>> > > This commit fixes the problem by initializing the entire ofpbuf.
>> > >
>> > > Signed-off-by: Ben Pfaff
>> > > ---
>> > > lib/dpif-netdev.c | 5 +++--
>> > > 1 file changed, 3 insertions(+), 2 deletions(-)
>> > >
>> > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
>> > > index cfd7539..742b118 100644
>> > > --- a/lib/dpif-netdev.c
>> > > +++ b/lib/dpif-netdev.c
>> > > @@ -2153,6 +2153,7 @@ OVS_REQUIRES(q->mutex)
>> > > struct ofpbuf *buf = &u->buf;
>> > > size_t buf_size;
>> > > struct flow flow;
>> > > + void *data;
>> > >
>> > > upcall->type = type;
>> > >
>> > > @@ -2179,8 +2180,8 @@ OVS_REQUIRES(q->mutex)
>> > > /* We have to perform a copy of the packet, because we cannot send DPDK
>> > > * mbufs to a non pmd thread. When the upcall processing will be done
>> > > * in the pmd thread, this copy can be avoided */
>> > > - ofpbuf_set_data(&upcall->packet, ofpbuf_put(buf, ofpbuf_data(packet),
>> > > - ofpbuf_size(packet)));
>> > > + data = ofpbuf_put(buf, ofpbuf_data(packet), ofpbuf_size(packet));
>> > > + ofpbuf_use_stub(&upcall->packet, data, ofpbuf_size(packet));
>> > > ofpbuf_set_size(&upcall->packet, ofpbuf_size(packet));
>> > >
>> > > seq_change(q->seq);
>> > > --
>> > > 1.9.1
>> > >
>> > > _______________________________________________
>> > > dev mailing list
>> > > dev@openvswitch.org
>> > > http://openvswitch.org/mailman/listinfo/dev
>> > >
>> >
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to