diff --git a/[refs] b/[refs] index 24637fe91d30..003be13c087f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 69df9d5993bd7dd7499ad0e98fe824147fbe5667 +refs/heads/master: bf8e56bfc4fcfcef9f08e6233dc619706807893a diff --git a/trunk/net/core/sock.c b/trunk/net/core/sock.c index 5a51512f638a..38820eaecd43 100644 --- a/trunk/net/core/sock.c +++ b/trunk/net/core/sock.c @@ -420,14 +420,16 @@ static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen) if (devname[0] == '\0') { index = 0; } else { - struct net_device *dev = dev_get_by_name(net, devname); + struct net_device *dev; + rcu_read_lock(); + dev = dev_get_by_name_rcu(net, devname); + if (dev) + index = dev->ifindex; + rcu_read_unlock(); ret = -ENODEV; if (!dev) goto out; - - index = dev->ifindex; - dev_put(dev); } lock_sock(sk);