From: Ingo Molnar <mingo@elte.hu>
To: Wu Fengguang <fengguang.wu@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Avan Anishchuk <matimatik@gmail.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Pekka Enberg <penberg@cs.helsinki.fi>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
Subject: Re: [patch] ramfs: add support for "mode=" mount option, fix
Date: Tue, 7 Apr 2009 08:03:09 +0200 [thread overview]
Message-ID: <20090407060309.GA21788@elte.hu> (raw)
In-Reply-To: <20090407055502.GA22881@localhost>
* Wu Fengguang <fengguang.wu@intel.com> wrote:
> On Tue, Apr 07, 2009 at 01:28:01PM +0800, Ingo Molnar wrote:
> >
> > * Linus Torvalds <torvalds@linux-foundation.org> wrote:
> >
> > > On Mon, 6 Apr 2009, Linus Torvalds wrote:
> > > >
> > > > It bisected past them. I'm getting worried that it's timing-related,
> > > > because nothing that remains looks even remotely interesting for that Mac
> > > > mini, but right now:
> > > >
> > > > - bad: 56fcef75117a153f298b3fe54af31053f53997dd
> > > > - good: bb233fdfc7b7cefe45bfa2e8d1b24e79c60a48e5
> > > >
> > > > and there's not a whole lot of commits in between.
> > >
> > > It's c3b1b1cbf002e65a3cabd479e68b5f35886a26db: 'ramfs: add support
> > > for "mode=" mount option'.
> > >
> > > And I checked. Reverting it at the tip fixes it. So no random
> > > timing fluctuations.
> > >
> > > So that commit causes some random SLAB corruption, that then
> > > (depending apparently on luck) may or may not crash in some odd
> > > random places later.
> >
> > ah - forget my previous mail then.
> >
> > This commit does have a couple of genuinely odd looking lines.
> >
> > For example:
> >
> > + sb->s_fs_info = fsi;
> > +
> > + err = ramfs_parse_options(data, &fsi->mount_opts);
> > + if (err)
> > + goto fail;
> >
> > Say we fail in ramfs_parse_options() and do the 'fail' pattern:
> >
> > +fail:
> > + kfree(fsi);
> > + iput(inode);
> > + return err;
> >
> > so we have 'fsi' kfree()'d but dont clear sb->s_fs_info! That's
> > almost always a bad practice. And indeed, in the kill_super
>
> Sorry - yes, the double kfree() shall be the root cause!
>
> get_sb_nodev() calls kill_sb() after a failed fill_super():
>
> error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
> if (error) {
> up_write(&s->s_umount);
> deactivate_super(s);
> return error;
> }
>
> > callback:
> >
> > +static void ramfs_kill_sb(struct super_block *sb)
> > +{
> > + kfree(sb->s_fs_info);
> >
> > What ensures that this cannot be a double kfree() memory corruption?
> > That pointer should have been cleared with something like the patch
> > below. (totally untested)
> >
> > And there's also another, probably just theoretical worry about
> > another failure path:
> >
> > + fsi = kzalloc(sizeof(struct ramfs_fs_info), GFP_KERNEL);
> > + if (!fsi) {
> > + err = -ENOMEM;
> > + goto fail;
> > + }
> > + sb->s_fs_info = fsi;
> >
> > leaves sb->s_fs_info uninitialized in the failure case, and might
> > hit this code unconditionally:
> >
> > +static void ramfs_kill_sb(struct super_block *sb)
> > +{
> > + kfree(sb->s_fs_info);
> > + kill_litter_super(sb);
> > +}
> >
> > Leaving this code at the mercy of the external call environment
> > initializing sb->s_fs_info. Which if it does not do (or stops
> > doing in the future), can trigger a kfree of a random pointer.
> >
> > (I think ->kill_super() gets called even if ->fill_super() fails,
> > but i have not checked closely.)
>
> You are right, see above.
>
> > These kinds of assymetric failure paths are really a red flag during
> > review.
> >
> > VFS infrastructure nit: we have 20 other similar looking but
> > slightly differently implemented filesystem options parsers, in each
> > filesystem. Might make sense to factor that out a bit and
> > standardize it across all filesystems and make it all a bit safer.
> > Duplicating code like that is never good IMHO.
> >
> > Ingo
> >
>
> Acked-by: Wu Fengguang <fengguang.wu@intel.com>
>
> The patch looks pretty good and runs OK here.
ok, good - i didnt even build it - you can add my signoff too:
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Thanks,
Ingo
next prev parent reply other threads:[~2009-04-07 6:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-05 19:39 [GIT PULL] SLAB include file dependency fixes + kmemtrace updates Ingo Molnar
2009-04-05 19:56 ` Linus Torvalds
2009-04-05 20:02 ` Linus Torvalds
2009-04-07 1:51 ` Linus Torvalds
2009-04-07 3:51 ` Linus Torvalds
2009-04-07 4:20 ` Linus Torvalds
2009-04-07 4:45 ` Linus Torvalds
2009-04-07 5:02 ` Wu Fengguang
2009-04-07 5:28 ` [patch] ramfs: add support for "mode=" mount option, fix Ingo Molnar
2009-04-07 5:55 ` Wu Fengguang
2009-04-07 6:03 ` Ingo Molnar [this message]
2009-04-07 6:16 ` [PATCH] ramfs: fix double freeing s_fs_info on failed mount Wu Fengguang
2009-04-07 6:53 ` Ingo Molnar
2009-04-07 7:05 ` Wu Fengguang
2009-04-07 6:20 ` [PATCH] ramfs: add support for "mode=" mount option, fix Ingo Molnar
2009-04-07 5:30 ` [GIT PULL] SLAB include file dependency fixes + kmemtrace updates Wu Fengguang
2009-04-07 4:58 ` Ingo Molnar
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=20090407060309.GA21788@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@linux-foundation.org \
--cc=eduard.munteanu@linux360.ro \
--cc=fengguang.wu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matimatik@gmail.com \
--cc=penberg@cs.helsinki.fi \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 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.