|
@@ -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);
|