All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fdtable: Eradicate fdarray overflow.
@ 2006-10-12  2:58 Vadim Lobanov
  2006-10-12  5:19 ` Eric Dumazet
  0 siblings, 1 reply; 5+ messages in thread
From: Vadim Lobanov @ 2006-10-12  2:58 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

Andrew,

If you want it, here is the "actual patch format" fix for the random kernel
bug issue that has been discovered. This patch is functionally identical to
the one you grabbed, but contains comments and sign-offs.

Fix the computation of the length of an allocated fdarray, when we decide to
grow the fdtable. The rationale behind this fix is as follows:
=> The 'nr' variable is the requested fd, so will be one less than the minimum
   allowable fdarray size.
=> Due to the above fact, when we divide 'nr' by a fourth-of-a-page block, we
   will always be exactly one block short of the size we need.
=> Incrementing before the division is wrong, because the division will discard
   a non-zero modulo, possibly leaving us one fourth-of-a-page block short.

Signed-off-by: Vadim Lobanov <vlobanov@speakeasy.net>

diff -Npru old/fs/file.c new/fs/file.c
--- old/fs/file.c	2006-10-10 18:58:21.000000000 -0700
+++ new/fs/file.c	2006-10-11 19:37:23.000000000 -0700
@@ -164,9 +164,8 @@ static struct fdtable * alloc_fdtable(un
 	 * the fdarray into page-sized chunks: starting at a quarter of a page,
 	 * and growing in powers of two from there on.
 	 */
-	nr++;
 	nr /= (PAGE_SIZE / 4 / sizeof(struct file *));
-	nr = roundup_pow_of_two(nr);
+	nr = roundup_pow_of_two(nr + 1);
 	nr *= (PAGE_SIZE / 4 / sizeof(struct file *));
 	if (nr > NR_OPEN)
 		nr = NR_OPEN;

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

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

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-12  2:58 [PATCH] fdtable: Eradicate fdarray overflow Vadim Lobanov
2006-10-12  5:19 ` Eric Dumazet
2006-10-12  6:07   ` Vadim Lobanov
2006-10-12  6:32     ` Eric Dumazet
2006-10-12  7:16       ` Vadim Lobanov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.