All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Ben Myers <bpm@sgi.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>, xfs@oss.sgi.com
Subject: Re: [PATCH v2] xfs: don't leak root inode reference
Date: Wed, 28 Aug 2013 08:08:33 +1000	[thread overview]
Message-ID: <20130827220833.GY6023@dastard> (raw)
In-Reply-To: <20130827212558.GY5262@sgi.com>

On Tue, Aug 27, 2013 at 04:25:58PM -0500, Ben Myers wrote:
> On Tue, Aug 27, 2013 at 07:24:23AM +1000, Dave Chinner wrote:
> > On Mon, Aug 26, 2013 at 03:47:30PM -0500, Ben Myers wrote:
> > > Looks like in 48fde701 we removed the iput of the root inode in
> > > xfs_fs_fill_super for the error case.  Add it back.
> > > 
> > > Signed-off-by: Ben Myers <bpm@sgi.com>
> > > 
> > > ---
> > >  fs/xfs/xfs_super.c |    6 ++++--
> > >  1 file changed, 4 insertions(+), 2 deletions(-)
> > > 
> > > Index: b/fs/xfs/xfs_super.c
> > > ===================================================================
> > > --- a/fs/xfs/xfs_super.c	2013-08-26 15:36:09.170848579 -0500
> > > +++ b/fs/xfs/xfs_super.c	2013-08-26 15:40:19.450817933 -0500
> > > @@ -1493,12 +1493,12 @@ xfs_fs_fill_super(
> > >  	}
> > >  	if (is_bad_inode(root)) {
> > >  		error = EINVAL;
> > > -		goto out_unmount;
> > > +		goto out_iput;
> > >  	}
> > >  	sb->s_root = d_make_root(root);
> > >  	if (!sb->s_root) {
> > >  		error = ENOMEM;
> > > -		goto out_unmount;
> > > +		goto out_iput;
> > >  	}
> > 
> > That's wrong. d_make_root() drops the reference to the inode on
> > failure itself, and so the change in 48fde701 is correct and valid.
> > 
> > The leak on bad inodes (which, AFAICT, can never happen on XFS) has
> > been around a lot longer than Al's change - this commit introduced
> > it:
> > 
> > 	2bcf6e9 xfs: start periodic workers later
> > 
> > with this hunk:
> > 
> >         if (is_bad_inode(root)) {
> >                 error = EINVAL;
> > -               goto fail_vnrele;
> > +               goto out_syncd_stop;
> >         }
> 
> Thanks Gents.  Here's another try:
> 
> xfs: don't leak root inode reference
> 
> Looks like in 2bcf6e9 we removed the iput of the root inode in
> xfs_fs_fill_super for the is_bad_inode error case.  Add it back.
> 
> Signed-off-by: Ben Myers <bpm@sgi.com>

I don't think this is right, either.

As I said in my previous reply, I don't think that XFS can ever see
a bad inode. The fact is that we're grabbing mp->m_rootip, which is
we already have a reference to and is in cache and validated thanks
to an xfs_iget() call in xfs_mountfs().  If we fail validation when
reading the root inode into cache then xfs_mountfs() will fail and
we won't ever get to this check.

Further, XFS never marks inodes bad - even on a failed lookup or a
shut down filesystem - and so AFAICT we cannot ever see the root
inode (or any other XFS inode) as a bad inode.

Hence I think that the is_bad_inode(root) check should just go away.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2013-08-27 22:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-26 20:47 [PATCH] xfs: don't leak root inode reference Ben Myers
2013-08-26 21:03 ` Al Viro
2013-08-26 21:24 ` Dave Chinner
2013-08-27 21:25   ` [PATCH v2] " Ben Myers
2013-08-27 22:08     ` Dave Chinner [this message]
2013-09-10 23:11       ` Ben Myers
2013-09-18  3:13         ` Dave Chinner
2013-10-01 22:40         ` Ben Myers

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=20130827220833.GY6023@dastard \
    --to=david@fromorbit.com \
    --cc=bpm@sgi.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=xfs@oss.sgi.com \
    /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.