Version in base suite: 2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u1 Base version: openvswitch_2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u1 Target version: openvswitch_2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u2 Base file: /srv/ftp-master.debian.org/ftp/pool/main/o/openvswitch/openvswitch_2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/o/openvswitch/openvswitch_2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12+deb10u2.dsc changelog | 8 ifupdown.sh | 4 patches/Fix_vswitchd_abort_when_a_port_is_added_and_the_controller_is_down.patch | 87 ++++++++++ patches/series | 1 4 files changed, 98 insertions(+), 2 deletions(-) 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 06:53:33.000000000 +0000 +++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/changelog 2019-09-19 12:40:49.000000000 +0000 @@ -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 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 06:53:33.000000000 +0000 +++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/ifupdown.sh 2019-09-19 12:40:49.000000000 +0000 @@ -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 00:00:00.000000000 +0000 +++ 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 12:40:49.000000000 +0000 @@ -0,0 +1,87 @@ +Author: Numan Siddique +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 +Signed-off-by: Ben Pfaff +Acked-by: Eelco Chaudron +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 06:53:33.000000000 +0000 +++ openvswitch-2.10.0+2018.08.28+git.8ca7c82b7d+ds1/debian/patches/series 2019-09-19 12:40:49.000000000 +0000 @@ -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