cifs: fix missing spinlock around update to ses->status
[ Upstream commit 0060a4f28a9ef45ae8163c0805e944a2b1546762 ] 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: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
a72d660c0d
commit
c35b484130
@@ -979,7 +979,7 @@ struct cifs_ses {
|
|||||||
struct mutex session_mutex;
|
struct mutex session_mutex;
|
||||||
struct TCP_Server_Info *server; /* pointer to server info */
|
struct TCP_Server_Info *server; /* pointer to server info */
|
||||||
int ses_count; /* reference counter */
|
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 */
|
unsigned overrideSecFlg; /* if non-zero override global sec flags */
|
||||||
char *serverOS; /* name of operating system underlying server */
|
char *serverOS; /* name of operating system underlying server */
|
||||||
char *serverNOS; /* name of network operating system of server */
|
char *serverNOS; /* name of network operating system of server */
|
||||||
@@ -1863,6 +1863,7 @@ require use of the stronger protocol */
|
|||||||
* list operations on pending_mid_q and oplockQ
|
* list operations on pending_mid_q and oplockQ
|
||||||
* updates to XID counters, multiplex id and SMB sequence numbers
|
* updates to XID counters, multiplex id and SMB sequence numbers
|
||||||
* list operations on global DnotifyReqList
|
* list operations on global DnotifyReqList
|
||||||
|
* updates to ses->status
|
||||||
* tcp_ses_lock protects:
|
* tcp_ses_lock protects:
|
||||||
* list operations on tcp and SMB session lists
|
* list operations on tcp and SMB session lists
|
||||||
* tcon->open_file_lock protects the list of open files hanging off the tcon
|
* tcon->open_file_lock protects the list of open files hanging off the tcon
|
||||||
|
@@ -2829,9 +2829,12 @@ void cifs_put_smb_ses(struct cifs_ses *ses)
|
|||||||
spin_unlock(&cifs_tcp_ses_lock);
|
spin_unlock(&cifs_tcp_ses_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
spin_unlock(&cifs_tcp_ses_lock);
|
||||||
|
|
||||||
|
spin_lock(&GlobalMid_Lock);
|
||||||
if (ses->status == CifsGood)
|
if (ses->status == CifsGood)
|
||||||
ses->status = CifsExiting;
|
ses->status = CifsExiting;
|
||||||
spin_unlock(&cifs_tcp_ses_lock);
|
spin_unlock(&GlobalMid_Lock);
|
||||||
|
|
||||||
cifs_free_ipc(ses);
|
cifs_free_ipc(ses);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user