| From foo@baz Sun Jun 17 12:07:34 CEST 2018 |
| From: David Howells <dhowells@redhat.com> |
| Date: Fri, 11 May 2018 23:21:35 +0100 |
| Subject: afs: Fix the handling of CB.InitCallBackState3 to find the server by UUID |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| [ Upstream commit 001ab5a67ee5d191c64aebf4b4ef8c7a0dcfd2bc ] |
| |
| Fix the handling of the CB.InitCallBackState3 service call to find the |
| record of a server that we're using by looking it up by the UUID passed as |
| the parameter rather than by its address (of which it might have many, and |
| which may change). |
| |
| Fixes: c35eccb1f614 ("[AFS]: Implement the CB.InitCallBackState3 operation.") |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/afs/cmservice.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/fs/afs/cmservice.c |
| +++ b/fs/afs/cmservice.c |
| @@ -341,7 +341,6 @@ static int afs_deliver_cb_init_call_back |
| */ |
| static int afs_deliver_cb_init_call_back_state3(struct afs_call *call) |
| { |
| - struct sockaddr_rxrpc srx; |
| struct afs_server *server; |
| struct afs_uuid *r; |
| unsigned loop; |
| @@ -398,8 +397,9 @@ static int afs_deliver_cb_init_call_back |
| |
| /* we'll need the file server record as that tells us which set of |
| * vnodes to operate upon */ |
| - rxrpc_kernel_get_peer(call->net->socket, call->rxcall, &srx); |
| - server = afs_find_server(call->net, &srx); |
| + rcu_read_lock(); |
| + server = afs_find_server_by_uuid(call->net, call->request); |
| + rcu_read_unlock(); |
| if (!server) |
| return -ENOTCONN; |
| call->cm_server = server; |