From: Nick Piggin <npiggin@suse.de>
To: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@lst.de>,
viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
mfasheh@suse.de
Subject: Re: [PATCH 2/2] check ATTR_SIZE contraints in inode_change_ok
Date: Wed, 9 Jun 2010 20:06:16 +1000 [thread overview]
Message-ID: <20100609100616.GA26335@laptop> (raw)
In-Reply-To: <20100609094121.GC3393@quack.suse.cz>
On Wed, Jun 09, 2010 at 11:41:21AM +0200, Jan Kara wrote:
> On Wed 09-06-10 17:33:36, Nick Piggin wrote:
> > On Tue, Jun 01, 2010 at 01:39:37PM +0200, Christoph Hellwig wrote:
> > > int inode_change_ok(const struct inode *inode, struct iattr *attr)
> > > {
> > > - int retval = -EPERM;
> > > unsigned int ia_valid = attr->ia_valid;
> > >
> > > + /*
> > > + * First check size constraints. These can't be overriden using
> > > + * ATTR_FORCE.
> > > + */
> > > + if (attr->ia_mode & ATTR_SIZE) {
> > > + int error = inode_newsize_ok(inode, attr->ia_size);
> > > + if (error)
> > > + return error;
> > > + }
> >
> > Hmm, I don't know if we can do this unless you have audited the
> > filesystems (in which case they should be on the cc list of this
> > pach).
> >
> > The problem is whether the i_size is valid and stable at this
> > point. And it doesn't help even if you do leave the inode_newsize_ok
> > check inside the vmtruncate part of the fs if the check incorrectly
> > fails here.
> >
> > ocfs2 performs inode_change_ok outside ocfs2_rw_lock and
> > ocfs2_inode_lock, and inode_newsize_ok inside; cifs holds i_lock
> > while checking inode_newsize_ok and updating size; gfs2 inside
> > gfs2_trans_begin.
> That's a good point. For all local filesystems I know, holding i_mutex is
> enough for having stable i_size. But for clustered filesystems it
> definitely isn't. They have to hold cluster locks to be able to reliably
> check current i_size (at least OCFS2 does). Looking at what
> inode_newsize_ok currently does, i_size is only used to decide whether
> we need to check for rlimit or not. So we could falsely miss this
> check (other node is truncating the file below new offset)...
Yes, or falsely disallow a shrinking truncate if it is above our
rlimit.
> Hmm, OK, so
> we really need the cluster lock...
> BTW: Mark, don't we need the cluster lock also for the permission
> checks in inode_change_ok? Otherwise we could see:
> Node1 Node2
> chmod("file", 000);
> truncate("file", 0)
> inode_change_ok still see old perms
> -> success
>
> And Node1 and Node2 can be fully serialized via some userspace
> synchronization and still hit this so it's not just a race...
That's a good point too, yes. I think if the inode_change_ok check
were moved inside the cluster lock, that would solve that problem
and Christoph's i_size problem here.
next prev parent reply other threads:[~2010-06-09 10:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-01 11:39 [PATCH 0/2] new truncate sequence, part3 Christoph Hellwig
2010-06-01 11:39 ` [PATCH 1/2] always call inode_change_ok early in ->setattr Christoph Hellwig
2010-06-01 11:39 ` [PATCH 2/2] check ATTR_SIZE contraints in inode_change_ok Christoph Hellwig
2010-06-01 11:49 ` Steven Whitehouse
2010-06-01 11:47 ` Christoph Hellwig
2010-06-09 7:33 ` Nick Piggin
2010-06-09 9:41 ` Jan Kara
2010-06-09 10:06 ` Nick Piggin [this message]
2010-06-09 10:07 ` Christoph Hellwig
2010-06-09 10:26 ` Nick Piggin
2010-06-10 8:21 ` Christoph Hellwig
2010-06-09 10:59 ` Steven Whitehouse
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=20100609100616.GA26335@laptop \
--to=npiggin@suse.de \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=mfasheh@suse.de \
--cc=viro@zeniv.linux.org.uk \
/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.