]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
cifs: protect session status check in smb2_reconnect()
authorPaulo Alcantara <pc@manguebit.com>
Thu, 27 Apr 2023 19:07:38 +0000 (16:07 -0300)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 7 Jul 2023 10:17:14 +0000 (12:17 +0200)
BugLink: https://bugs.launchpad.net/bugs/2025067
commit 5bff9f741af60b143a5ae73417a8ec47fd5ff2f4 upstream.

Use @ses->ses_lock to protect access of @ses->ses_status.

Cc: stable@vger.kernel.org
Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
fs/cifs/smb2pdu.c

index ab59faf8a06a7742ea213b079ec1950a0e8e0824..537e8679900b8c8754d23181a0aa511ac34ee3ac 100644 (file)
@@ -175,8 +175,17 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon,
                }
        }
        spin_unlock(&tcon->tc_lock);
-       if ((!tcon->ses) || (tcon->ses->ses_status == SES_EXITING) ||
-           (!tcon->ses->server) || !server)
+
+       ses = tcon->ses;
+       if (!ses)
+               return -EIO;
+       spin_lock(&ses->ses_lock);
+       if (ses->ses_status == SES_EXITING) {
+               spin_unlock(&ses->ses_lock);
+               return -EIO;
+       }
+       spin_unlock(&ses->ses_lock);
+       if (!ses->server || !server)
                return -EIO;
 
        spin_lock(&server->srv_lock);
@@ -204,8 +213,6 @@ again:
        if (rc)
                return rc;
 
-       ses = tcon->ses;
-
        spin_lock(&ses->chan_lock);
        if (!cifs_chan_needs_reconnect(ses, server) && !tcon->need_reconnect) {
                spin_unlock(&ses->chan_lock);