mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
vfs: add NOFOLLOW flag to umount(2)
commit db1f05bb85 upstream.
Add a new UMOUNT_NOFOLLOW flag to umount(2). This is needed to prevent
symlink attacks in unprivileged unmounts (fuse, samba, ncpfs).
Additionally, return -EINVAL if an unknown flag is used (and specify
an explicitly unused flag: UMOUNT_UNUSED). This makes it possible for
the caller to determine if a flag is supported or not.
CC: Eugene Teo <eugene@redhat.com>
CC: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
de925d2eec
commit
1ef462bee2
|
|
@ -1119,8 +1119,15 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
|
|||
{
|
||||
struct path path;
|
||||
int retval;
|
||||
int lookup_flags = 0;
|
||||
|
||||
retval = user_path(name, &path);
|
||||
if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW))
|
||||
return -EINVAL;
|
||||
|
||||
if (!(flags & UMOUNT_NOFOLLOW))
|
||||
lookup_flags |= LOOKUP_FOLLOW;
|
||||
|
||||
retval = user_path_at(AT_FDCWD, name, lookup_flags, &path);
|
||||
if (retval)
|
||||
goto out;
|
||||
retval = -EINVAL;
|
||||
|
|
|
|||
|
|
@ -1310,6 +1310,8 @@ extern int send_sigurg(struct fown_struct *fown);
|
|||
#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */
|
||||
#define MNT_DETACH 0x00000002 /* Just detach from the tree */
|
||||
#define MNT_EXPIRE 0x00000004 /* Mark for expiry */
|
||||
#define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */
|
||||
#define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */
|
||||
|
||||
extern struct list_head super_blocks;
|
||||
extern spinlock_t sb_lock;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user