Commit 09ba47b4 authored by Paulo Alcantara's avatar Paulo Alcantara Committed by Steve French
Browse files

cifs: prevent infinite recursion in CIFSGetDFSRefer()



We can't call smb_init() in CIFSGetDFSRefer() as cifs_reconnect_tcon()
may end up calling CIFSGetDFSRefer() again to get new DFS referrals
and thus causing an infinite recursion.

Signed-off-by: default avatarPaulo Alcantara (SUSE) <pc@manguebit.com>
Reviewed-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
Cc: stable@vger.kernel.org # 6.2
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 6cc041e9
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -4382,8 +4382,13 @@ CIFSGetDFSRefer(const unsigned int xid, struct cifs_ses *ses,
		return -ENODEV;

getDFSRetry:
	rc = smb_init(SMB_COM_TRANSACTION2, 15, ses->tcon_ipc, (void **) &pSMB,
		      (void **) &pSMBr);
	/*
	 * Use smb_init_no_reconnect() instead of smb_init() as
	 * CIFSGetDFSRefer() may be called from cifs_reconnect_tcon() and thus
	 * causing an infinite recursion.
	 */
	rc = smb_init_no_reconnect(SMB_COM_TRANSACTION2, 15, ses->tcon_ipc,
				   (void **)&pSMB, (void **)&pSMBr);
	if (rc)
		return rc;