net: devnet_rename_seq should be a seqcount
Using a seqlock for devnet_rename_seq is not a good idea,
as device_rename() can sleep.
As we hold RTNL, we dont need a protection for writers,
and only need a seqcount so that readers can catch a change done
by a writer.
Bug added in commit c91f6df2db
(sockopt: Change getsockopt() of
SO_BINDTODEVICE to return an interface name)
Reported-by: Dave Jones <davej@redhat.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Brian Haley <brian.haley@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f7e75ba177
commit
30e6c9fa93
@@ -583,7 +583,7 @@ static int sock_getbindtodevice(struct sock *sk, char __user *optval,
|
||||
goto out;
|
||||
|
||||
retry:
|
||||
seq = read_seqbegin(&devnet_rename_seq);
|
||||
seq = read_seqcount_begin(&devnet_rename_seq);
|
||||
rcu_read_lock();
|
||||
dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
|
||||
ret = -ENODEV;
|
||||
@@ -594,7 +594,7 @@ retry:
|
||||
|
||||
strcpy(devname, dev->name);
|
||||
rcu_read_unlock();
|
||||
if (read_seqretry(&devnet_rename_seq, seq))
|
||||
if (read_seqcount_retry(&devnet_rename_seq, seq))
|
||||
goto retry;
|
||||
|
||||
len = strlen(devname) + 1;
|
||||
|
Reference in New Issue
Block a user