mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
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: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
162004a2f7
commit
0060a4f28a
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user