Commit bec1052e5be6a70f03f6adc650f3a6e4c2f44ddf
1 parent
db1f05bb85
Exists in
master
and in
20 other branches
set S_DEAD on unlink() and non-directory rename() victims
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 1 changed file with 6 additions and 1 deletions Side-by-side Diff
fs/namei.c
... | ... | @@ -2262,8 +2262,11 @@ |
2262 | 2262 | error = -EBUSY; |
2263 | 2263 | else { |
2264 | 2264 | error = security_inode_unlink(dir, dentry); |
2265 | - if (!error) | |
2265 | + if (!error) { | |
2266 | 2266 | error = dir->i_op->unlink(dir, dentry); |
2267 | + if (!error) | |
2268 | + dentry->d_inode->i_flags |= S_DEAD; | |
2269 | + } | |
2267 | 2270 | } |
2268 | 2271 | mutex_unlock(&dentry->d_inode->i_mutex); |
2269 | 2272 | |
... | ... | @@ -2616,6 +2619,8 @@ |
2616 | 2619 | else |
2617 | 2620 | error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry); |
2618 | 2621 | if (!error) { |
2622 | + if (target) | |
2623 | + target->i_flags |= S_DEAD; | |
2619 | 2624 | if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) |
2620 | 2625 | d_move(old_dentry, new_dentry); |
2621 | 2626 | } |