| From 1e77a8c204c9d1b655c61751b8ad0fde22421dbb Mon Sep 17 00:00:00 2001 |
| From: Steve French <stfrench@microsoft.com> |
| Date: Fri, 19 Oct 2018 00:45:21 -0500 |
| Subject: smb3: do not attempt cifs operation in smb3 query info error path |
| |
| From: Steve French <stfrench@microsoft.com> |
| |
| commit 1e77a8c204c9d1b655c61751b8ad0fde22421dbb upstream. |
| |
| If backupuid mount option is sent, we can incorrectly retry |
| (on access denied on query info) with a cifs (FindFirst) operation |
| on an smb3 mount which causes the server to force the session close. |
| |
| We set backup intent on open so no need for this fallback. |
| |
| See kernel bugzilla 201435 |
| |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| CC: Stable <stable@vger.kernel.org> |
| Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/cifs/inode.c | 10 +++++++++- |
| 1 file changed, 9 insertions(+), 1 deletion(-) |
| |
| --- a/fs/cifs/inode.c |
| +++ b/fs/cifs/inode.c |
| @@ -768,7 +768,15 @@ cifs_get_inode_info(struct inode **inode |
| } else if (rc == -EREMOTE) { |
| cifs_create_dfs_fattr(&fattr, sb); |
| rc = 0; |
| - } else if (rc == -EACCES && backup_cred(cifs_sb)) { |
| + } else if ((rc == -EACCES) && backup_cred(cifs_sb) && |
| + (strcmp(server->vals->version_string, SMB1_VERSION_STRING) |
| + == 0)) { |
| + /* |
| + * For SMB2 and later the backup intent flag is already |
| + * sent if needed on open and there is no path based |
| + * FindFirst operation to use to retry with |
| + */ |
| + |
| srchinf = kzalloc(sizeof(struct cifs_search_info), |
| GFP_KERNEL); |
| if (srchinf == NULL) { |