Commit 0060a4f2 authored by Steve French's avatar Steve French
Browse files

cifs: fix missing spinlock around update to ses->status



In the other places where we update ses->status we protect the
updates via GlobalMid_Lock. So to be consistent add the same
locking around it in cifs_put_smb_ses where it was missing.

Addresses-Coverity: 1268904 ("Data race condition")
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 162004a2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -887,7 +887,7 @@ struct cifs_ses {
	struct mutex session_mutex;
	struct TCP_Server_Info *server;	/* pointer to server info */
	int ses_count;		/* reference counter */
	enum statusEnum status;
	enum statusEnum status;  /* updates protected by GlobalMid_Lock */
	unsigned overrideSecFlg;  /* if non-zero override global sec flags */
	char *serverOS;		/* name of operating system underlying server */
	char *serverNOS;	/* name of network operating system of server */
@@ -1785,6 +1785,7 @@ require use of the stronger protocol */
 *	list operations on pending_mid_q and oplockQ
 *      updates to XID counters, multiplex id  and SMB sequence numbers
 *      list operations on global DnotifyReqList
 *      updates to ses->status
 *  tcp_ses_lock protects:
 *	list operations on tcp and SMB session lists
 *  tcon->open_file_lock protects the list of open files hanging off the tcon
+4 −1
Original line number Diff line number Diff line
@@ -1598,9 +1598,12 @@ void cifs_put_smb_ses(struct cifs_ses *ses)
		spin_unlock(&cifs_tcp_ses_lock);
		return;
	}
	spin_unlock(&cifs_tcp_ses_lock);

	spin_lock(&GlobalMid_Lock);
	if (ses->status == CifsGood)
		ses->status = CifsExiting;
	spin_unlock(&cifs_tcp_ses_lock);
	spin_unlock(&GlobalMid_Lock);

	cifs_free_ipc(ses);