mirror of https://gitee.com/openkylin/linux.git
bonding: fix race condition in bonding_store_slaves_active
Race between bonding_store_slaves_active() and slave manipulation functions. The bond_for_each_slave use in bonding_store_slaves_active() is not protected by any synchronization mechanism. NULL pointer dereference is easy to reach. Fixed by acquiring the bond->lock for the slave walk. v2: Make description text < 75 columns Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
90fb6250c5
commit
e196c0e579
|
@ -1568,6 +1568,7 @@ static ssize_t bonding_store_slaves_active(struct device *d,
|
|||
goto out;
|
||||
}
|
||||
|
||||
read_lock(&bond->lock);
|
||||
bond_for_each_slave(bond, slave, i) {
|
||||
if (!bond_is_active_slave(slave)) {
|
||||
if (new_value)
|
||||
|
@ -1576,6 +1577,7 @@ static ssize_t bonding_store_slaves_active(struct device *d,
|
|||
slave->inactive = 1;
|
||||
}
|
||||
}
|
||||
read_unlock(&bond->lock);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue