projects/linux·commit f9454548

don't unlink an active swapfile

f9454548 · Hugh Dickins <[email protected]> · 2008-11-19 15:36:38 -08:00

Peter Cordes is sorry that he rm'ed his swapfiles while they were in use,
he then had no pathname to swapoff.  It's a curious little oversight, but
not one worth a lot of hackery.  Kudos to Willy Tarreau for turning this
around from a discussion of synthetic pathnames to how to prevent unlink.
Mimic immutable: prohibit unlinking an active swapfile in may_delete()
(and don't worry my little head over the tiny race window).

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Willy Tarreau <[email protected]>
Acked-by: Christoph Hellwig <[email protected]>
Cc: Peter Cordes <[email protected]>
Cc: Bodo Eggert <[email protected]>
Cc: David Newall <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Commit
f9454548e17cd56bad081bd7d55a09b001950cbb
Parents
63eb6b93

Changes

1 files changed · +1 −1

FileStatusAddDelContent
fs/namei.cmodified+1−1View file

fs/namei.c

View file
diff --git a/fs/namei.c b/fs/namei.c
index 09ce58e..d34e0f9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1378,7 +1378,7 @@ static int may_delete(struct inode *dir,struct dentry *victim,int isdir)
if (IS_APPEND(dir))
return -EPERM;
if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
- IS_IMMUTABLE(victim->d_inode))
+ IS_IMMUTABLE(victim->d_inode) || IS_SWAPFILE(victim->d_inode))
return -EPERM;
if (isdir) {
if (!S_ISDIR(victim->d_inode->i_mode))