[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#953246: buster-pu: package openvswitch/2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u1



Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@packages.debian.org
Usertags: pu

Dear release team,

We experienced (in production) a bug in OVS which lead to ovs-vswitchd
being killed, leading to network downtime in our OpenStack environment.
Attached is the fix. I wish to upload this update to Buster.

On top of this upstream fix, a small typo fix in ifupdown.sh.

Please let me upload
openvswitch/2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u2

Cheers,

Thomas Goirand (zigo)
diff -Nru openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/changelog openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/changelog
--- openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/changelog	2019-06-24 08:53:33.000000000 +0200
+++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/changelog	2019-09-19 14:40:49.000000000 +0200
@@ -1,3 +1,11 @@
+openvswitch (2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u2) buster; urgency=medium
+
+  * Fixed debian/ifupdown.sh typo: ovs_vsctl -> ovs-vsctl.
+  * Add patch to fix ovs-vswitchd dying:
+    - Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch
+
+ -- Thomas Goirand <zigo@debian.org>  Thu, 19 Sep 2019 14:40:49 +0200
+
 openvswitch (2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u1) buster; urgency=medium
 
   * Some fixups in debian/ifupdown.sh to allow setting-up the MTU.
diff -Nru openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/ifupdown.sh openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/ifupdown.sh
--- openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/ifupdown.sh	2019-06-24 08:53:33.000000000 +0200
+++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/ifupdown.sh	2019-09-19 14:40:49.000000000 +0200
@@ -103,10 +103,10 @@
                     ifdown --allow="${IFACE}" ${IF_OVS_PORTS}
                 fi
 
-                ovs_vsctl -- --if-exists del-br "${IFACE}"
+                ovs-vsctl -- --if-exists del-br "${IFACE}"
                 ;;
         OVSPort|OVSIntPort|OVSBond|OVSPatchPort|OVSTunnel)
-                ovs_vsctl -- --if-exists del-port "${IF_OVS_BRIDGE}" "${IFACE}"
+                ovs-vsctl -- --if-exists del-port "${IF_OVS_BRIDGE}" "${IFACE}"
                 ;;
         *)
                 exit 0
diff -Nru openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch
--- openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch	1970-01-01 01:00:00.000000000 +0100
+++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch	2019-09-19 14:40:49.000000000 +0200
@@ -0,0 +1,87 @@
+Author: Numan Siddique <nusiddiq@redhat.com>
+Date: Thu, 18 Oct 2018 16:47:05 +0530
+Description: connmgr: Fix vswitchd abort when a port is added and the controller is down
+ We see the below trace when a port is added to a bridge and the configured
+ controller is down
+ .
+ 0x00007fb002f8b207 in raise () from /lib64/libc.so.6
+ 0x00007fb002f8c8f8 in abort () from /lib64/libc.so.6
+ 0x00007fb004953026 in ofputil_protocol_to_ofp_version () from /lib64/libopenvswitch-2.10.so.0
+ 0x00007fb00494e38e in ofputil_encode_port_status () from /lib64/libopenvswitch-2.10.so.0
+ 0x00007fb004ef1c5b in connmgr_send_port_status () from /lib64/libofproto-2.10.so.0
+ 0x00007fb004efa9f4 in ofport_install () from /lib64/libofproto-2.10.so.0
+ 0x00007fb004efbfb2 in update_port () from /lib64/libofproto-2.10.so.0
+ 0x00007fb004efc7f9 in ofproto_port_add () from /lib64/libofproto-2.10.so.0
+ 0x0000556d540a3f95 in bridge_add_ports__ ()
+ 0x0000556d540a5a47 in bridge_reconfigure ()
+ 0x0000556d540a9199 in bridge_run ()
+ 0x0000556d540a02a5 in main ()
+ .
+ The abort is because of ofputil_protocol_to_ofp_version() is called with invalid
+ protocol - OFPUTIL_P_NONE. Please see [1] for more details. Similar aborts are
+ seen as reported in [2].
+ .
+ The commit [3] changed the behavior of the function rconn_get_version().
+ Before the commit [3], the function ofconn_receives_async_msg() would always
+ return false if the connection to the controller was down, since
+ rconn_get_version() used to return -1. This patch now checks the rconn
+ connection status in ofconn_receives_async_msg() and returns false if not
+ connected. This would avoid the aborts seen in the above stack trace.
+ .
+ The issue can be reproduced by running the test added in this patch
+ without the fix.
+ .
+ [1] - https://bugzilla.redhat.com/show_bug.cgi?id=1640045
+ [2] - https://bugzilla.redhat.com/show_bug.cgi?id=1637926
+ .
+ [3] - 476d2551ab ("rconn: Introduce new invariant to fix assertion failure in corner case.")
+Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+Acked-by: Eelco Chaudron <echaudro@redhat.com>
+Origin: upstream, https://github.com/openvswitch/ovs/commit/903f6c4f8a9bce51984435ca3990f2717c63f703.patch
+Last-Update: 2020-03-06
+
+diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
+index 50e0b8f991..9431200249 100644
+--- a/ofproto/connmgr.c
++++ b/ofproto/connmgr.c
+@@ -1538,6 +1538,10 @@ ofconn_receives_async_msg(const struct ofconn *ofconn,
+     ovs_assert(reason < 32);
+     ovs_assert((unsigned int) type < OAM_N_TYPES);
+ 
++    if (!rconn_is_connected(ofconn->rconn)) {
++        return false;
++    }
++
+     /* Keep the following code in sync with the documentation in the
+      * "Asynchronous Messages" section in 'topics/design' */
+ 
+diff --git a/tests/bridge.at b/tests/bridge.at
+index 1c36185632..ee398bdb1e 100644
+--- a/tests/bridge.at
++++ b/tests/bridge.at
+@@ -79,3 +79,24 @@ AT_CHECK([ovs-vsctl --columns=status list controller | dnl
+ OVS_APP_EXIT_AND_WAIT([ovs-vswitchd])
+ OVS_APP_EXIT_AND_WAIT([ovsdb-server])
+ AT_CLEANUP
++
++AT_SETUP([bridge - add port after stopping controller])
++OVS_VSWITCHD_START
++
++dnl Start ovs-testcontroller
++ovs-testcontroller --detach punix:controller --pidfile=ovs-testcontroller.pid
++OVS_WAIT_UNTIL([test -e controller])
++
++AT_CHECK([ovs-vsctl set-controller br0 unix:controller])
++AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=internal], [0], [ignore])
++AT_CHECK([ovs-appctl -t ovs-vswitchd version], [0], [ignore])
++
++# Now kill the ovs-testcontroller
++kill `cat ovs-testcontroller.pid`
++OVS_WAIT_UNTIL([! test -e controller])
++AT_CHECK([ovs-vsctl --no-wait add-port br0 p2 -- set Interface p2 type=internal], [0], [ignore])
++AT_CHECK([ovs-appctl -t ovs-vswitchd version], [0], [ignore])
++
++OVS_APP_EXIT_AND_WAIT([ovs-vswitchd])
++OVS_APP_EXIT_AND_WAIT([ovsdb-server])
++AT_CLEANUP
diff -Nru openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/series openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/series
--- openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/series	2019-06-24 08:53:33.000000000 +0200
+++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/series	2019-09-19 14:40:49.000000000 +0200
@@ -10,3 +10,4 @@
 blacklist-ofproto-async-msg-ctrl-of1.3-because-of-mips.patch
 remove-yet-another-mips-failing-test.patch
 remove-non-deterministic-tests.patch
+Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch

Reply to: