diff mbox

[ovs-dev] connmgr: Fix crash when in_band_create() fails.

Message ID 20170717165454.12908-1-blp@ovn.org
State Accepted
Headers show

Commit Message

Ben Pfaff July 17, 2017, 4:54 p.m. UTC
update_in_band_remotes() created an in-band manager and then tried to work
with it without first checking whether creation had succeeded.  If it
failed, this led to a segfault.

Reported-by: Numan Siddique <nusiddiq@redhat.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-July/335530.html
Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 ofproto/connmgr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Justin Pettit July 17, 2017, 5:08 p.m. UTC | #1
> On Jul 17, 2017, at 9:54 AM, Ben Pfaff <blp@ovn.org> wrote:
> 
> update_in_band_remotes() created an in-band manager and then tried to work
> with it without first checking whether creation had succeeded.  If it
> failed, this led to a segfault.
> 
> Reported-by: Numan Siddique <nusiddiq@redhat.com>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-July/335530.html
> Signed-off-by: Ben Pfaff <blp@ovn.org>

Acked-by: Justin Pettit <jpettit@ovn.org>

--Justin
Ben Pfaff July 17, 2017, 5:14 p.m. UTC | #2
On Mon, Jul 17, 2017 at 10:08:50AM -0700, Justin Pettit wrote:
> 
> > On Jul 17, 2017, at 9:54 AM, Ben Pfaff <blp@ovn.org> wrote:
> > 
> > update_in_band_remotes() created an in-band manager and then tried to work
> > with it without first checking whether creation had succeeded.  If it
> > failed, this led to a segfault.
> > 
> > Reported-by: Numan Siddique <nusiddiq@redhat.com>
> > Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-July/335530.html
> > Signed-off-by: Ben Pfaff <blp@ovn.org>
> 
> Acked-by: Justin Pettit <jpettit@ovn.org>

Thanks, applied to master and backported as far as 2.0.
diff mbox

Patch

diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
index 2b0b78f6192d..2dc414d31239 100644
--- a/ofproto/connmgr.c
+++ b/ofproto/connmgr.c
@@ -791,12 +791,12 @@  update_in_band_remotes(struct connmgr *mgr)
         if (!mgr->in_band) {
             in_band_create(mgr->ofproto, mgr->local_port_name, &mgr->in_band);
         }
-        in_band_set_queue(mgr->in_band, mgr->in_band_queue);
     } else {
         /* in_band_run() needs a chance to delete any existing in-band flows.
          * We will destroy mgr->in_band after it's done with that. */
     }
     if (mgr->in_band) {
+        in_band_set_queue(mgr->in_band, mgr->in_band_queue);
         in_band_set_remotes(mgr->in_band, addrs, n_addrs);
     }