diff options
author | Flavio Fernandes <flavio@flaviof.com> | 2018-05-01 19:07:36 -0400 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2018-05-07 14:17:59 -0700 |
commit | b37bef8ad667f0eab74515ab2a5e341ad0c5ab5c (patch) | |
tree | be10e49b884b2eb8281d882b98db89a6688f1af1 | |
parent | f337be3c81311d6ad9be27199ad4a99bc9c34d2d (diff) | |
download | openvswitch-b37bef8ad667f0eab74515ab2a5e341ad0c5ab5c.tar.gz |
ovs-vsctl: Fix segfault when attempting to del-port from parent bridge.
The error message in the check for improper bridge param is de-referencing
parent from the wrong bridge. Also, the message itself had the parent and
child bridges reversed, so that got a small tweak as well.
Also, add a regression test.
Signed-off-by: Flavio Fernandes <flavio@flaviof.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
-rw-r--r-- | tests/ovs-vsctl.at | 17 | ||||
-rw-r--r-- | utilities/ovs-vsctl.c | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at index 14a3879e2..d6a0116df 100644 --- a/tests/ovs-vsctl.at +++ b/tests/ovs-vsctl.at @@ -552,6 +552,23 @@ CHECK_PORTS([xapi1], [eth0.$1]) CHECK_IFACES([xapi1], [eth0.$1]) OVS_VSCTL_CLEANUP AT_CLEANUP + +AT_SETUP([simple fake bridge + del-port from parent (VLAN $1)]) +AT_KEYWORDS([ovs-vsctl fake-bridge del-port]) +OVS_VSCTL_SETUP +OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1]) +AT_CHECK([RUN_OVS_VSCTL([del-port xenbr0 eth0.$1])], [1], [], + [ovs-vsctl: bridge xenbr0 does not have a port eth0.$1 (although its child bridge xapi1 does) +]) +CHECK_PORTS([xenbr0], [eth0]) +CHECK_IFACES([xenbr0], [eth0]) +CHECK_PORTS([xapi1], [eth0.$1]) +CHECK_IFACES([xapi1], [eth0.$1]) +AT_CHECK([RUN_OVS_VSCTL([del-port xapi1 eth0.$1])]) +CHECK_PORTS([xenbr0], [eth0]) +CHECK_IFACES([xenbr0], [eth0]) +OVS_VSCTL_CLEANUP +AT_CLEANUP ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS OVS_VSCTL_FAKE_BRIDGE_TESTS([9]) diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index e7100954a..981af9283 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -1660,9 +1660,9 @@ cmd_del_port(struct ctl_context *ctx) if (port->bridge != bridge) { if (port->bridge->parent == bridge) { ctl_fatal("bridge %s does not have a port %s (although " - "its parent bridge %s does)", + "its child bridge %s does)", ctx->argv[1], ctx->argv[2], - bridge->parent->name); + port->bridge->name); } else { ctl_fatal("bridge %s does not have a port %s", ctx->argv[1], ctx->argv[2]); |