aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2012-11-29 09:32:28 -0800
committerBen Pfaff <blp@nicira.com>2012-11-29 13:12:57 -0800
commit6ed32382fd9807deb5b090cf4a2c187c1c63b937 (patch)
tree2a860494bb8d9e9ed12626a9987fcfbf7550f0a5
parentd300e26d1d4dbaccc9527ca363bec5b81d3578c5 (diff)
bond: Fix segfault sending learning packets with LACP disabled.
It is essentially an invalid configuration to disable LACP but request TCP balancing: in this configuration, the bond drops all packets. But may_send_learning_packets() would still indicate that learning packets should be sent, so bond_compose_learning_packet() would try to choose an output slave for those packets, which would be NULL (because all packets are dropped), which would cause a segfault upon dereference. This commit fixes the problem by making may_send_learning_packets() no longer indicate that learning packets should be sent. I tested this issue by modifying bond_should_send_learning_packets() to always return true if may_send_learning_packets() returns true, and then introducing the invalid configuration described above. Without this comit, ovs-vswitchd segfaults quickly; with this commit, it does not. Bug #14090. Reported-by: Kiran Shanbhog <kiran@vmware.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--lib/bond.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/bond.c b/lib/bond.c
index b172121b..f6c38e9c 100644
--- a/lib/bond.c
+++ b/lib/bond.c
@@ -488,7 +488,7 @@ static bool
may_send_learning_packets(const struct bond *bond)
{
return bond->lacp_status == LACP_DISABLED
- && bond->balance != BM_AB
+ && (bond->balance == BM_SLB || bond->balance == BM_STABLE)
&& bond->active_slave;
}