summaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorAneesh Kumar K.V2011-01-29 14:13:27 +0100
committerAl Viro2011-03-15 07:21:44 +0100
commitaae8a97d3ec30788790d1720b71d76fd8eb44b73 (patch)
tree12dbe7afc10da3eee7ce5dfcf389b655634737e0 /fs/namei.c
parentvfs: Add open by file handle support (diff)
downloadkernel-qcow2-linux-aae8a97d3ec30788790d1720b71d76fd8eb44b73.tar.gz
kernel-qcow2-linux-aae8a97d3ec30788790d1720b71d76fd8eb44b73.tar.xz
kernel-qcow2-linux-aae8a97d3ec30788790d1720b71d76fd8eb44b73.zip
fs: Don't allow to create hardlink for deleted file
Add inode->i_nlink == 0 check in VFS. Some of the file systems do this internally. A followup patch will remove those instance. This is needed to ensure that with link by handle we don't allow to create hardlink of an unlinked file. The check also prevent a race between unlink and link Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 83e92bab79a6..33be51a2ddb7 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2906,7 +2906,11 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de
return error;
mutex_lock(&inode->i_mutex);
- error = dir->i_op->link(old_dentry, dir, new_dentry);
+ /* Make sure we don't allow creating hardlink to an unlinked file */
+ if (inode->i_nlink == 0)
+ error = -ENOENT;
+ else
+ error = dir->i_op->link(old_dentry, dir, new_dentry);
mutex_unlock(&inode->i_mutex);
if (!error)
fsnotify_link(dir, inode, new_dentry);