Skip to content

Commit 28b7bd4

Browse files
committed
Merge tag '6.1-rc2-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6
Pull cifs fixes from Steve French: - use after free fix for reconnect race - two memory leak fixes * tag '6.1-rc2-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: fix use-after-free caused by invalid pointer `hostname` cifs: Fix pages leak when writedata alloc failed in cifs_write_from_iter() cifs: Fix pages array leak when writedata alloc failed in cifs_writedata_alloc()
2 parents 882ad2a + 153695d commit 28b7bd4

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

fs/cifs/connect.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,6 +1584,7 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
15841584
server->session_key.response = NULL;
15851585
server->session_key.len = 0;
15861586
kfree(server->hostname);
1587+
server->hostname = NULL;
15871588

15881589
task = xchg(&server->tsk, NULL);
15891590
if (task)

fs/cifs/file.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2434,12 +2434,16 @@ cifs_writev_complete(struct work_struct *work)
24342434
struct cifs_writedata *
24352435
cifs_writedata_alloc(unsigned int nr_pages, work_func_t complete)
24362436
{
2437+
struct cifs_writedata *writedata = NULL;
24372438
struct page **pages =
24382439
kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
2439-
if (pages)
2440-
return cifs_writedata_direct_alloc(pages, complete);
2440+
if (pages) {
2441+
writedata = cifs_writedata_direct_alloc(pages, complete);
2442+
if (!writedata)
2443+
kvfree(pages);
2444+
}
24412445

2442-
return NULL;
2446+
return writedata;
24432447
}
24442448

24452449
struct cifs_writedata *
@@ -3299,6 +3303,9 @@ cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
32993303
cifs_uncached_writev_complete);
33003304
if (!wdata) {
33013305
rc = -ENOMEM;
3306+
for (i = 0; i < nr_pages; i++)
3307+
put_page(pagevec[i]);
3308+
kvfree(pagevec);
33023309
add_credits_and_wake_if(server, credits, 0);
33033310
break;
33043311
}

0 commit comments

Comments
 (0)