Skip to content

Commit

Permalink
bonding: Fix initialize after use for 3ad machine state spinlock
Browse files Browse the repository at this point in the history
The 3ad machine state spinlock can be used before it is inititialized
while doing bond_enslave() (and the port is being initialized) since
port->slave is set before the lock is prepared, thus causing soft
lock-ups and a multitude of other nasty bugs.

[ Rename __initialize_port_locks() variable name to 'slave' -DaveM ]

Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
nikolay@redhat.com authored and David S. Miller committed Feb 19, 2013
1 parent b59340c commit e0809db
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions drivers/net/bonding/bond_3ad.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,13 +389,13 @@ static u8 __get_duplex(struct port *port)

/**
* __initialize_port_locks - initialize a port's STATE machine spinlock
* @port: the port we're looking at
* @port: the slave of the port we're looking at
*
*/
static inline void __initialize_port_locks(struct port *port)
static inline void __initialize_port_locks(struct slave *slave)
{
// make sure it isn't called twice
spin_lock_init(&(SLAVE_AD_INFO(port->slave).state_machine_lock));
spin_lock_init(&(SLAVE_AD_INFO(slave).state_machine_lock));
}

//conversions
Expand Down Expand Up @@ -1910,6 +1910,7 @@ int bond_3ad_bind_slave(struct slave *slave)

ad_initialize_port(port, bond->params.lacp_fast);

__initialize_port_locks(slave);
port->slave = slave;
port->actor_port_number = SLAVE_AD_INFO(slave).id;
// key is determined according to the link speed, duplex and user key(which is yet not supported)
Expand All @@ -1932,8 +1933,6 @@ int bond_3ad_bind_slave(struct slave *slave)
port->next_port_in_aggregator = NULL;

__disable_port(port);
__initialize_port_locks(port);


// aggregator initialization
aggregator = &(SLAVE_AD_INFO(slave).aggregator);
Expand Down

0 comments on commit e0809db

Please sign in to comment.