Messages in this thread | | | Date | Thu, 10 Dec 2015 00:48:51 +0000 | From | Al Viro <> | Subject | Re: linux-next: build failure after merge of the vfs tree |
| |
On Thu, Dec 10, 2015 at 11:23:22AM +1100, Stephen Rothwell wrote: > [Just adding the origefs maintainer to the cc list] > > -static const char *pvfs2_follow_link(struct dentry *dentry, void **cookie) > > +static const char *pvfs2_get_link(struct dentry *dentry, struct inode *inode, > > + void **cookie) > > { > > - char *target = PVFS2_I(dentry->d_inode)->link_target;
Better fix is to have inode->link = PVFS2_I(dentry->d_inode)->link_target; when we set the latter and use .get_link = simple_get_link...
Said that, there is an unpleasant bug in that area - link_target of a live inode can be overwritten, right under the pathname resolution walking the old contents of that thing.
copy_attributes_to_inode() is triggered by ->d_revalidate() and by ->getattr() and it's really, really unsafe for a live inode. Just look what it does to ->i_mode... Sure, normally a server won't return different symlink bodies on subsequent getattr requests. As long as it's sane (and not compromised, etc.), but relying upon that is not a good idea.
| |