diff options
author | Nikolay Aleksandrov <nikolay@redhat.com> | 2014-09-10 01:17:00 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-10 04:31:35 +0400 |
commit | 059b47e8aaf997245bc531e980581de492315fe6 (patch) | |
tree | e6f179bf980f970af3e53659b491828570f6616d /drivers/net/bonding/bond_sysfs.c | |
parent | ecfede424e95b211050f777c3ae96356926ed1c4 (diff) | |
download | linux-059b47e8aaf997245bc531e980581de492315fe6.tar.xz |
bonding: convert primary_slave to use RCU
This is necessary mainly for two bonding call sites: procfs and
sysfs as it was dereferenced without any real protection.
Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding/bond_sysfs.c')
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 98db8edd9c75..5555517284db 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c @@ -425,11 +425,15 @@ static ssize_t bonding_show_primary(struct device *d, struct device_attribute *attr, char *buf) { - int count = 0; struct bonding *bond = to_bond(d); + struct slave *primary; + int count = 0; - if (bond->primary_slave) - count = sprintf(buf, "%s\n", bond->primary_slave->dev->name); + rcu_read_lock(); + primary = rcu_dereference(bond->primary_slave); + if (primary) + count = sprintf(buf, "%s\n", primary->dev->name); + rcu_read_unlock(); return count; } |