From: Dipankar Sarma <dipankar@in.ibm.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: linux-kernel@vger.kernel.org, torvalds@osdl.org, akpm@osdl.org
Subject: Re: [PATCH]: Brown paper bag in fs/file.c?
Date: Thu, 15 Sep 2005 00:48:42 +0530 [thread overview]
Message-ID: <20050914191842.GA6315@in.ibm.com> (raw)
In-Reply-To: <20050914.113133.78024310.davem@davemloft.net>
On Wed, Sep 14, 2005 at 11:31:33AM -0700, David S. Miller wrote:
>
> The bug is that free_fd_array() takes a "num" argument, but when
> calling it from __free_fdtable() we're instead passing in the size in
> bytes (ie. "num * sizeof(struct file *)").
Yes it is a bug. I think I messed it up while merging newer
changes with an older version where I was using size in bytes
to optimize.
>
> How come this doesn't crash things for people? Perhaps I'm missing
> something. fs/vmalloc.c should bark very loudly if we call it with a
> non-vmalloc area address, since that is what would happen if we pass a
> kmalloc() SLAB object address to vfree().
>
> I think I know what might be happening. If the miscalculation means
> that we kfree() the embedded fdarray, that would actually work just
> fine, and free up the fdtable. I guess if the SLAB redzone stuff were
> enabled for these caches, it would trigger when something like this
> happens.
__free_fdtable() is used only when the fdarray/fdset are vmalloced
(use of the workqueue) or there is a race between two expand_files().
That might be why we haven't seen this cause any explicit problem
so far.
This would be an appropriate patch - (untested). I will update
as soon as testing is done.
Thanks
Dipankar
Fixes the fdtable freeing in the case of vmalloced fdset/arrays.
Signed-off-by: Dipankar Sarma <dipankar@in.ibm.com>
--
fs/file.c | 10 +++-------
1 files changed, 3 insertions(+), 7 deletions(-)
diff -puN fs/file.c~files-fix-fdtable-free fs/file.c
--- linux-2.6.14-rc1-fd/fs/file.c~files-fix-fdtable-free 2005-09-15 00:36:03.000000000 +0530
+++ linux-2.6.14-rc1-fd-dipankar/fs/file.c 2005-09-15 00:39:46.000000000 +0530
@@ -69,13 +69,9 @@ void free_fd_array(struct file **array,
static void __free_fdtable(struct fdtable *fdt)
{
- int fdset_size, fdarray_size;
-
- fdset_size = fdt->max_fdset / 8;
- fdarray_size = fdt->max_fds * sizeof(struct file *);
- free_fdset(fdt->open_fds, fdset_size);
- free_fdset(fdt->close_on_exec, fdset_size);
- free_fd_array(fdt->fd, fdarray_size);
+ free_fdset(fdt->open_fds, fdt->max_fdset);
+ free_fdset(fdt->close_on_exec, fdt->max_fdset);
+ free_fd_array(fdt->fd, fdt->max_fds);
kfree(fdt);
}
_
next prev parent reply other threads:[~2005-09-14 19:24 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-14 18:31 [PATCH]: Brown paper bag in fs/file.c? David S. Miller
2005-09-14 18:48 ` David S. Miller
2005-09-14 19:05 ` David S. Miller
2005-09-14 19:18 ` Dipankar Sarma [this message]
2005-09-14 19:57 ` David S. Miller
2005-09-14 20:15 ` Dipankar Sarma
2005-09-14 20:29 ` David S. Miller
2005-09-14 21:17 ` [PATCH] reorder struct files_struct Eric Dumazet
2005-09-14 21:35 ` Peter Staubach
2005-09-14 22:02 ` Dipankar Sarma
2005-09-14 22:17 ` Andrew Morton
2005-09-14 22:42 ` Eric Dumazet
2005-09-14 22:50 ` Dipankar Sarma
2005-09-14 23:19 ` Eric Dumazet
2005-09-15 4:54 ` Dipankar Sarma
2005-09-15 6:17 ` Eric Dumazet
2005-09-15 9:35 ` Dipankar Sarma
2005-09-15 17:11 ` Eric Dumazet
2005-09-15 21:06 ` [PATCH]: Brown paper bag in fs/file.c? David S. Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050914191842.GA6315@in.ibm.com \
--to=dipankar@in.ibm.com \
--cc=akpm@osdl.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox