mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
vfs: add NOFOLLOW flag to umount(2)
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>
This commit is contained in:
parent
440b3c6c16
commit
db1f05bb85
@ -1136,8 +1136,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;
|
||||
|
@ -1305,6 +1305,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