Commit 33f73618 authored by Shyam Prasad N's avatar Shyam Prasad N Committed by Steve French
Browse files

cifs: prevent use-after-free by freeing the cfile later



In smb2_compound_op we have a possible use-after-free
which can cause hard to debug problems later on.

This was revealed during stress testing with KASAN enabled
kernel. Fixing it by moving the cfile free call to
a few lines below, after the usage.

Fixes: 76894f3e ("cifs: improve symlink handling for smb2+")
Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: default avatarShyam Prasad N <sprasad@microsoft.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent f0b6a834
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -398,9 +398,6 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon,
					rsp_iov);

 finished:
	if (cfile)
		cifsFileInfo_put(cfile);

	SMB2_open_free(&rqst[0]);
	if (rc == -EREMCHG) {
		pr_warn_once("server share %s deleted\n", tcon->tree_name);
@@ -529,6 +526,9 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon,
		break;
	}

	if (cfile)
		cifsFileInfo_put(cfile);

	if (rc && err_iov && err_buftype) {
		memcpy(err_iov, rsp_iov, 3 * sizeof(*err_iov));
		memcpy(err_buftype, resp_buftype, 3 * sizeof(*err_buftype));