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>
Joan Cirer joan@ev0.net
John Galgay john@galgay.net
Kevin Mancuso kevin.mancuso@rackspace.com
+Kiran Shanbhog kiran@vmware.com
Kirill Kabardin
Koichi Yagishita yagishita.koichi@jrc.co.jp
Konstantin Khorenko khorenko@openvz.org
may_send_learning_packets(const struct bond *bond)
{
return bond->lacp_status == LACP_DISABLED
- && bond->balance != BM_STABLE
+ && (bond->balance == BM_SLB || bond->balance == BM_AB)
&& bond->active_slave;
}