| From d96e4d7edc293a7ee3ad432ffc56976a5c82efb9 Mon Sep 17 00:00:00 2001 |
| From: Benjamin Coddington <bcodding@redhat.com> |
| Date: Thu, 9 May 2019 07:25:21 -0400 |
| Subject: NFS: Fix a double unlock from nfs_match,get_client |
| |
| [ Upstream commit c260121a97a3e4df6536edbc2f26e166eff370ce ] |
| |
| Now that nfs_match_client drops the nfs_client_lock, we should be |
| careful |
| to always return it in the same condition: locked. |
| |
| Fixes: 950a578c6128 ("NFS: make nfs_match_client killable") |
| Reported-by: syzbot+228a82b263b5da91883d@syzkaller.appspotmail.com |
| Signed-off-by: Benjamin Coddington <bcodding@redhat.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/nfs/client.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/fs/nfs/client.c b/fs/nfs/client.c |
| index 350cfa561e0e8..dfb796eab9121 100644 |
| --- a/fs/nfs/client.c |
| +++ b/fs/nfs/client.c |
| @@ -299,9 +299,9 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *dat |
| spin_unlock(&nn->nfs_client_lock); |
| error = nfs_wait_client_init_complete(clp); |
| nfs_put_client(clp); |
| + spin_lock(&nn->nfs_client_lock); |
| if (error < 0) |
| return ERR_PTR(error); |
| - spin_lock(&nn->nfs_client_lock); |
| goto again; |
| } |
| |
| -- |
| 2.20.1 |
| |