public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fdset's leakage
@ 2006-07-10 13:40 Kirill Korotaev
  2006-07-11  8:01 ` Andrew Morton
  0 siblings, 1 reply; 8+ messages in thread
From: Kirill Korotaev @ 2006-07-10 13:40 UTC (permalink / raw)
  To: Andrew Morton, Linux Kernel Mailing List, devel, Alexey Kuznetsov

[-- Attachment #1: Type: text/plain, Size: 453 bytes --]

Andrew,

Another patch from Alexey Kuznetsov fixing memory leak in alloc_fdtable().

[PATCH] fdset's leakage

When found, it is obvious. nfds calculated when allocating fdsets
is rewritten by calculation of size of fdtable, and when we are
unlucky, we try to free fdsets of wrong size.

Found due to OpenVZ resource management (User Beancounters).

Signed-Off-By: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Signed-Off-By: Kirill Korotaev <dev@openvz.org>


[-- Attachment #2: diff-fdset-leakage --]
[-- Type: text/plain, Size: 523 bytes --]

diff -urp linux-2.6-orig/fs/file.c linux-2.6/fs/file.c
--- linux-2.6-orig/fs/file.c	2006-07-10 12:10:51.000000000 +0400
+++ linux-2.6/fs/file.c	2006-07-10 14:47:01.000000000 +0400
@@ -277,11 +277,13 @@ static struct fdtable *alloc_fdtable(int
 	} while (nfds <= nr);
 	new_fds = alloc_fd_array(nfds);
 	if (!new_fds)
-		goto out;
+		goto out2;
 	fdt->fd = new_fds;
 	fdt->max_fds = nfds;
 	fdt->free_files = NULL;
 	return fdt;
+out2:
+	nfds = fdt->max_fdset;
 out:
   	if (new_openset)
   		free_fdset(new_openset, nfds);

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-07-12 10:50 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-10 13:40 [PATCH] fdset's leakage Kirill Korotaev
2006-07-11  8:01 ` Andrew Morton
2006-07-11  9:02   ` Rene Scharfe
2006-07-11  9:05   ` Kirill Korotaev
2006-07-11  9:28     ` Andrew Morton
2006-07-11 16:13     ` Vadim Lobanov
2006-07-11 17:26       ` Eric Dumazet
2006-07-12 10:49       ` Kirill Korotaev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox