cifs: don't leak -ENOMEM in smb2_open_file()
authorPaulo Alcantara <pc@cjr.nz>
Mon, 19 Dec 2022 13:21:50 +0000 (10:21 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:56 +0000 (13:32 +0100)
[ Upstream commit f60ffa662d1427cfd31fe9d895c3566ac50bfe52 ]

A NULL error response might be a valid case where smb2_reconnect()
failed to reconnect the session and tcon due to a disconnected server
prior to issuing the I/O operation, so don't leak -ENOMEM to userspace
on such occasions.

Fixes: 76894f3e2f71 ("cifs: improve symlink handling for smb2+")
Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/cifs/smb2file.c

index ffbd9a9..ba6cc50 100644 (file)
@@ -122,8 +122,8 @@ int smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms, __u32
                struct smb2_hdr *hdr = err_iov.iov_base;
 
                if (unlikely(!err_iov.iov_base || err_buftype == CIFS_NO_BUFFER))
-                       rc = -ENOMEM;
-               else if (hdr->Status == STATUS_STOPPED_ON_SYMLINK) {
+                       goto out;
+               if (hdr->Status == STATUS_STOPPED_ON_SYMLINK) {
                        rc = smb2_parse_symlink_response(oparms->cifs_sb, &err_iov,
                                                         &data->symlink_target);
                        if (!rc) {