• R/O
  • HTTP
  • SSH

tomoyo-test1: 提交

This is a test repository.

Commit MetaInfo

修订版9efcc4a129363187c9bf15338692f107c5c9b6f0 (tree)
时间2020-03-27 08:04:29
作者David Howells <dhowells@redh...>
CommiterLinus Torvalds

Log Message

afs: Fix unpinned address list during probing

When it's probing all of a fileserver's interfaces to find which one is
best to use, afs_do_probe_fileserver() takes a lock on the server record
and notes the pointer to the address list.

It doesn't, however, pin the address list, so as soon as it drops the
lock, there's nothing to stop the address list from being freed under

Fix this by taking a ref on the address list inside the locked section
and dropping it at the end of the function.

Fixes: 3bf0fb6f33dd ("afs: Probe multiple fileservers simultaneously")
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>



--- a/fs/afs/fs_probe.c
+++ b/fs/afs/fs_probe.c
@@ -145,6 +145,7 @@ static int afs_do_probe_fileserver(struct afs_net *net,
145145 read_lock(&server->fs_lock);
146146 ac.alist = rcu_dereference_protected(server->addresses,
147147 lockdep_is_held(&server->fs_lock));
148+ afs_get_addrlist(ac.alist);
148149 read_unlock(&server->fs_lock);
150151 atomic_set(&server->probe_outstanding, ac.alist->nr_addrs);
@@ -163,6 +164,7 @@ static int afs_do_probe_fileserver(struct afs_net *net,
164165 if (!in_progress)
165166 afs_fs_probe_done(server);
167+ afs_put_addrlist(ac.alist);
166168 return in_progress;
167169 }
Show on old repository browser