linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Erez Zadok <ezk@cs.sunysb.edu>
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
	hch@infradead.org, viro@ftp.linux.org.uk,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [UNIONFS] 00/29 Unionfs and related patches pre-merge review (v2)
Date: Thu, 17 Jan 2008 06:00:17 +0000	[thread overview]
Message-ID: <20080117060017.GC27894@ZenIV.linux.org.uk> (raw)
In-Reply-To: <11999771882152-git-send-email-ezk@cs.sunysb.edu>

After grep for locking-related things:

	* lock_parent(): who said that you won't get dentry moved
before managing to grab i_mutex on parent?  While we are at it,
who said that you won't get dentry moved between fetching d_parent
and doing dget()?  In that case parent could've been _freed_ before
you get to dget().

	* in create_parents():
+                       struct inode *inode = lower_dentry->d_inode;
+                       /*
+                        * If we get here, it means that we created a new
+                        * dentry+inode, but copying permissions failed.
+                        * Therefore, we should delete this inode and dput
+                        * the dentry so as not to leave cruft behind.
+                        */
+                       if (lower_dentry->d_op && lower_dentry->d_op->d_iput)
+                               lower_dentry->d_op->d_iput(lower_dentry,
+                                                          inode);
+                       else
+                               iput(inode);
+                       lower_dentry->d_inode = NULL;
+                       dput(lower_dentry);
+                       lower_dentry = ERR_PTR(err);
+                       goto out;
Really?  So what happens if it had become positive after your test and
somebody had looked it up in lower layer and just now happens to be
in the middle of operations on it?  Will be thucking frilled by that...

	* __unionfs_rename():
+       lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
+       err = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry,
+                        lower_new_dir_dentry->d_inode, lower_new_dentry);
+       unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);

Uh-huh...  To start with, what guarantees that your lower_old_dentry
is still a child of your lower_old_dir_dentry?  What's more, you are
not checking the result of lock_rename(), i.e. asking for serious trouble.

	* revalidation stuff: err...  how the devil can it work for
directories, when there's nothing to prevent changes in underlying
layers between ->d_revalidate() and operation itself?  For the upper
layer (unionfs itself) everything's more or less fine, but the rest
of that...

  parent reply	other threads:[~2008-01-17  6:00 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-10 14:59 [UNIONFS] 00/29 Unionfs and related patches pre-merge review (v2) Erez Zadok
2008-01-10 14:59 ` [PATCH 01/29] Unionfs: documentation Erez Zadok
2008-01-10 14:59 ` [PATCH 02/29] VFS/eCryptfs: use simplified fs_stack API to fsstack_copy_attr_all Erez Zadok
2008-01-10 14:59 ` [PATCH 03/29] Makefile: hook to compile unionfs Erez Zadok
2008-01-10 14:59 ` [PATCH 04/29] Unionfs: main Makefile Erez Zadok
2008-01-10 14:59 ` [PATCH 05/29] Unionfs: fanout header definitions Erez Zadok
2008-01-10 14:59 ` [PATCH 06/29] Unionfs: main header file Erez Zadok
2008-01-10 14:59 ` [PATCH 07/29] Unionfs: common file copyup/revalidation operations Erez Zadok
2008-01-10 14:59 ` [PATCH 08/29] Unionfs: basic file operations Erez Zadok
2008-01-10 14:59 ` [PATCH 09/29] Unionfs: lower-level copyup routines Erez Zadok
2008-01-10 14:59 ` [PATCH 10/29] Unionfs: dentry revalidation Erez Zadok
2008-01-10 14:59 ` [PATCH 11/29] Unionfs: lower-level lookup routines Erez Zadok
2008-01-10 14:59 ` [PATCH 12/29] Unionfs: rename method and helpers Erez Zadok
2008-01-10 14:59 ` [PATCH 13/29] Unionfs: directory reading file operations Erez Zadok
2008-01-10 14:59 ` [PATCH 14/29] Unionfs: readdir helper functions Erez Zadok
2008-01-10 14:59 ` [PATCH 15/29] Unionfs: readdir state helpers Erez Zadok
2008-01-10 14:59 ` [PATCH 16/29] Unionfs: inode operations Erez Zadok
2008-01-10 14:59 ` [PATCH 17/29] Unionfs: unlink/rmdir operations Erez Zadok
2008-01-10 14:59 ` [PATCH 18/29] Unionfs: address-space operations Erez Zadok
2008-01-10 14:59 ` [PATCH 19/29] Unionfs: mount-time and stacking-interposition functions Erez Zadok
2008-01-10 14:59 ` [PATCH 20/29] Unionfs: super_block operations Erez Zadok
2008-01-10 14:59 ` [PATCH 21/29] Unionfs: extended attributes operations Erez Zadok
2008-01-10 14:59 ` [PATCH 22/29] Unionfs: async I/O queue Erez Zadok
2008-01-10 14:59 ` [PATCH 23/29] Unionfs: miscellaneous helper routines Erez Zadok
2008-01-10 14:59 ` [PATCH 24/29] Unionfs: debugging infrastructure Erez Zadok
2008-01-10 14:59 ` [PATCH 25/29] Unionfs file system magic number Erez Zadok
2008-01-10 14:59 ` [PATCH 26/29] Unionfs: common header file for user-land utilities and kernel Erez Zadok
2008-01-10 14:59 ` [PATCH 27/29] VFS path get/put ops used by Unionfs Erez Zadok
2008-01-10 14:59 ` [PATCH 28/29] VFS: export release_open_intent symbol Erez Zadok
2008-01-10 14:59 ` [PATCH 29/29] Put Unionfs and eCryptfs under one layered filesystems menu Erez Zadok
2008-01-10 15:08 ` [UNIONFS] 00/29 Unionfs and related patches pre-merge review (v2) Christoph Hellwig
2008-01-10 15:57   ` Erez Zadok
2008-01-14 22:10     ` Jesse Hathaway
2008-01-16 21:21     ` Michael Halcrow
2008-01-16 21:41       ` Erez Zadok
2008-01-17  6:00 ` Al Viro [this message]
2008-01-17  6:17   ` Erez Zadok
2008-01-26  5:08   ` Erez Zadok
2008-01-26  8:45     ` Al Viro
2008-02-02 18:45       ` Erez Zadok
2008-02-02 20:45         ` Al Viro

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=20080117060017.GC27894@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=ezk@cs.sunysb.edu \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@ftp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).