decnet: add RTNL lock when reading address list
authorstephen hemminger <shemminger@vyatta.com>
Wed, 11 Nov 2009 07:39:27 +0000 (07:39 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Nov 2009 03:22:15 +0000 (19:22 -0800)
Add missing locking in the case of auto binding to the
default device. The address list might change while this code is looking
at the list.

Compile tested only, I am not a decnet user.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/decnet/dn_dev.c

index b5ef237c8a74334c55692f5b535411aa1b580e84..5790d660bc7d8de4997f21beba90344beacfef43 100644 (file)
@@ -828,13 +828,17 @@ static int dn_dev_get_first(struct net_device *dev, __le16 *addr)
        struct dn_dev *dn_db = (struct dn_dev *)dev->dn_ptr;
        struct dn_ifaddr *ifa;
        int rv = -ENODEV;
+
        if (dn_db == NULL)
                goto out;
+
+       rtnl_lock();
        ifa = dn_db->ifa_list;
        if (ifa != NULL) {
                *addr = ifa->ifa_local;
                rv = 0;
        }
+       rtnl_unlock();
 out:
        return rv;
 }