diff options
author | Pavel Shilovsky <pshilovsky@samba.org> | 2014-05-24 08:42:02 -0400 |
---|---|---|
committer | Steve French <smfrench@gmail.com> | 2014-05-24 16:24:20 -0400 |
commit | 663a962151593c69374776e8651238d0da072459 (patch) | |
tree | 6f2a60475f96a8acee862cb15c760eac3e40a8df | |
parent | 08b37d518af365e7a52fe11320ea683856407581 (diff) |
CIFS: Fix memory leaks in SMB2_open
Cc: <stable@vger.kernel.org> # v3.12+
Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org>
Reviewed-by: Shirish Pargaonkar <spargaonkar@suse.com>
Signed-off-by: Steve French <smfrench@gmail.com>
-rw-r--r-- | fs/cifs/smb2pdu.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index b0037b609c54..b0b260dbb19d 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c | |||
@@ -1097,6 +1097,7 @@ SMB2_open(const unsigned int xid, struct cifs_open_parms *oparms, __le16 *path, | |||
1097 | int rc = 0; | 1097 | int rc = 0; |
1098 | unsigned int num_iovecs = 2; | 1098 | unsigned int num_iovecs = 2; |
1099 | __u32 file_attributes = 0; | 1099 | __u32 file_attributes = 0; |
1100 | char *dhc_buf = NULL, *lc_buf = NULL; | ||
1100 | 1101 | ||
1101 | cifs_dbg(FYI, "create/open\n"); | 1102 | cifs_dbg(FYI, "create/open\n"); |
1102 | 1103 | ||
@@ -1163,6 +1164,7 @@ SMB2_open(const unsigned int xid, struct cifs_open_parms *oparms, __le16 *path, | |||
1163 | kfree(copy_path); | 1164 | kfree(copy_path); |
1164 | return rc; | 1165 | return rc; |
1165 | } | 1166 | } |
1167 | lc_buf = iov[num_iovecs-1].iov_base; | ||
1166 | } | 1168 | } |
1167 | 1169 | ||
1168 | if (*oplock == SMB2_OPLOCK_LEVEL_BATCH) { | 1170 | if (*oplock == SMB2_OPLOCK_LEVEL_BATCH) { |
@@ -1177,9 +1179,10 @@ SMB2_open(const unsigned int xid, struct cifs_open_parms *oparms, __le16 *path, | |||
1177 | if (rc) { | 1179 | if (rc) { |
1178 | cifs_small_buf_release(req); | 1180 | cifs_small_buf_release(req); |
1179 | kfree(copy_path); | 1181 | kfree(copy_path); |
1180 | kfree(iov[num_iovecs-1].iov_base); | 1182 | kfree(lc_buf); |
1181 | return rc; | 1183 | return rc; |
1182 | } | 1184 | } |
1185 | dhc_buf = iov[num_iovecs-1].iov_base; | ||
1183 | } | 1186 | } |
1184 | 1187 | ||
1185 | rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buftype, 0); | 1188 | rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buftype, 0); |
@@ -1211,6 +1214,8 @@ SMB2_open(const unsigned int xid, struct cifs_open_parms *oparms, __le16 *path, | |||
1211 | *oplock = rsp->OplockLevel; | 1214 | *oplock = rsp->OplockLevel; |
1212 | creat_exit: | 1215 | creat_exit: |
1213 | kfree(copy_path); | 1216 | kfree(copy_path); |
1217 | kfree(lc_buf); | ||
1218 | kfree(dhc_buf); | ||
1214 | free_rsp_buf(resp_buftype, rsp); | 1219 | free_rsp_buf(resp_buftype, rsp); |
1215 | return rc; | 1220 | return rc; |
1216 | } | 1221 | } |