]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
smb3: do not attempt cifs operation in smb3 query info error path
authorSteve French <stfrench@microsoft.com>
Fri, 19 Oct 2018 05:45:21 +0000 (00:45 -0500)
committerJuerg Haefliger <juergh@canonical.com>
Wed, 24 Jul 2019 01:57:29 +0000 (19:57 -0600)
BugLink: https://bugs.launchpad.net/bugs/1836802
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>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
fs/cifs/inode.c

index 74b60d8fc578a8f7c756a33cab0383fed479f778..5d5367d6b31bebe4f74a933e6263f80a71d997e0 100644 (file)
@@ -776,7 +776,15 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
        } 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) {