namei.c 120.4 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0
L
Linus Torvalds 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 *  linux/fs/namei.c
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 */

/*
 * Some corrections by tytso.
 */

/* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname
 * lookup logic.
 */
/* [Feb-Apr 2000, AV] Rewrite to the new namespace architecture.
 */

#include <linux/init.h>
19
#include <linux/export.h>
20
#include <linux/kernel.h>
L
Linus Torvalds 已提交
21 22 23 24
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/namei.h>
#include <linux/pagemap.h>
R
Robert Love 已提交
25
#include <linux/fsnotify.h>
L
Linus Torvalds 已提交
26 27
#include <linux/personality.h>
#include <linux/security.h>
M
Mimi Zohar 已提交
28
#include <linux/ima.h>
L
Linus Torvalds 已提交
29 30 31
#include <linux/syscalls.h>
#include <linux/mount.h>
#include <linux/audit.h>
32
#include <linux/capability.h>
33
#include <linux/file.h>
34
#include <linux/fcntl.h>
35
#include <linux/device_cgroup.h>
36
#include <linux/fs_struct.h>
37
#include <linux/posix_acl.h>
38
#include <linux/hash.h>
39
#include <linux/bitops.h>
40
#include <linux/init_task.h>
41
#include <linux/uaccess.h>
L
Linus Torvalds 已提交
42

43
#include "internal.h"
44
#include "mount.h"
45

L
Linus Torvalds 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
/* [Feb-1997 T. Schoebel-Theuer]
 * Fundamental changes in the pathname lookup mechanisms (namei)
 * were necessary because of omirr.  The reason is that omirr needs
 * to know the _real_ pathname, not the user-supplied one, in case
 * of symlinks (and also when transname replacements occur).
 *
 * The new code replaces the old recursive symlink resolution with
 * an iterative one (in case of non-nested symlink chains).  It does
 * this with calls to <fs>_follow_link().
 * As a side effect, dir_namei(), _namei() and follow_link() are now 
 * replaced with a single function lookup_dentry() that can handle all 
 * the special cases of the former code.
 *
 * With the new dcache, the pathname is stored at each inode, at least as
 * long as the refcount of the inode is positive.  As a side effect, the
 * size of the dcache depends on the inode cache and thus is dynamic.
 *
 * [29-Apr-1998 C. Scott Ananian] Updated above description of symlink
 * resolution to correspond with current state of the code.
 *
 * Note that the symlink resolution is not *completely* iterative.
 * There is still a significant amount of tail- and mid- recursion in
 * the algorithm.  Also, note that <fs>_readlink() is not used in
 * lookup_dentry(): lookup_dentry() on the result of <fs>_readlink()
 * may return different results than <fs>_follow_link().  Many virtual
 * filesystems (including /proc) exhibit this behavior.
 */

/* [24-Feb-97 T. Schoebel-Theuer] Side effects caused by new implementation:
 * New symlink semantics: when open() is called with flags O_CREAT | O_EXCL
 * and the name already exists in form of a symlink, try to create the new
 * name indicated by the symlink. The old code always complained that the
 * name already exists, due to not following the symlink even if its target
 * is nonexistent.  The new semantics affects also mknod() and link() when
L
Lucas De Marchi 已提交
80
 * the name is a symlink pointing to a non-existent name.
L
Linus Torvalds 已提交
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
 *
 * I don't know which semantics is the right one, since I have no access
 * to standards. But I found by trial that HP-UX 9.0 has the full "new"
 * semantics implemented, while SunOS 4.1.1 and Solaris (SunOS 5.4) have the
 * "old" one. Personally, I think the new semantics is much more logical.
 * Note that "ln old new" where "new" is a symlink pointing to a non-existing
 * file does succeed in both HP-UX and SunOs, but not in Solaris
 * and in the old Linux semantics.
 */

/* [16-Dec-97 Kevin Buhr] For security reasons, we change some symlink
 * semantics.  See the comments in "open_namei" and "do_link" below.
 *
 * [10-Sep-98 Alan Modra] Another symlink change.
 */

/* [Feb-Apr 2000 AV] Complete rewrite. Rules for symlinks:
 *	inside the path - always follow.
 *	in the last component in creation/removal/renaming - never follow.
 *	if LOOKUP_FOLLOW passed - follow.
 *	if the pathname has trailing slashes - follow.
 *	otherwise - don't follow.
 * (applied in that order).
 *
 * [Jun 2000 AV] Inconsistent behaviour of open() in case if flags==O_CREAT
 * restored for 2.4. This is the last surviving part of old 4.2BSD bug.
 * During the 2.4 we need to fix the userland stuff depending on it -
 * hopefully we will be able to get rid of that wart in 2.5. So far only
 * XEmacs seems to be relying on it...
 */
/*
 * [Sep 2001 AV] Single-semaphore locking scheme (kudos to David Holland)
113
 * implemented.  Let's see if raised priority of ->s_vfs_rename_mutex gives
L
Linus Torvalds 已提交
114 115 116 117 118 119 120 121 122 123
 * any extra contention...
 */

/* In order to reduce some races, while at the same time doing additional
 * checking and hopefully speeding things up, we copy filenames to the
 * kernel data space before using them..
 *
 * POSIX.1 2.4: an empty pathname is invalid (ENOENT).
 * PATH_MAX includes the nul terminator --RR.
 */
124

A
Al Viro 已提交
125
#define EMBEDDED_NAME_MAX	(PATH_MAX - offsetof(struct filename, iname))
126

127
struct filename *
128 129
getname_flags(const char __user *filename, int flags, int *empty)
{
A
Al Viro 已提交
130
	struct filename *result;
131
	char *kname;
A
Al Viro 已提交
132
	int len;
133

134 135 136 137
	result = audit_reusename(filename);
	if (result)
		return result;

138
	result = __getname();
139
	if (unlikely(!result))
140 141
		return ERR_PTR(-ENOMEM);

142 143 144 145
	/*
	 * First, try to embed the struct filename inside the names_cache
	 * allocation
	 */
A
Al Viro 已提交
146
	kname = (char *)result->iname;
147
	result->name = kname;
148

A
Al Viro 已提交
149
	len = strncpy_from_user(kname, filename, EMBEDDED_NAME_MAX);
150
	if (unlikely(len < 0)) {
A
Al Viro 已提交
151 152
		__putname(result);
		return ERR_PTR(len);
153
	}
154

155 156 157 158 159 160
	/*
	 * Uh-oh. We have a name that's approaching PATH_MAX. Allocate a
	 * separate struct filename so we can dedicate the entire
	 * names_cache allocation for the pathname, and re-do the copy from
	 * userland.
	 */
A
Al Viro 已提交
161
	if (unlikely(len == EMBEDDED_NAME_MAX)) {
A
Al Viro 已提交
162
		const size_t size = offsetof(struct filename, iname[1]);
163 164
		kname = (char *)result;

A
Al Viro 已提交
165 166 167 168 169 170
		/*
		 * size is chosen that way we to guarantee that
		 * result->iname[0] is within the same object and that
		 * kname can't be equal to result->iname, no matter what.
		 */
		result = kzalloc(size, GFP_KERNEL);
A
Al Viro 已提交
171 172 173
		if (unlikely(!result)) {
			__putname(kname);
			return ERR_PTR(-ENOMEM);
174 175
		}
		result->name = kname;
A
Al Viro 已提交
176 177 178 179 180 181 182 183 184 185 186
		len = strncpy_from_user(kname, filename, PATH_MAX);
		if (unlikely(len < 0)) {
			__putname(kname);
			kfree(result);
			return ERR_PTR(len);
		}
		if (unlikely(len == PATH_MAX)) {
			__putname(kname);
			kfree(result);
			return ERR_PTR(-ENAMETOOLONG);
		}
187 188
	}

A
Al Viro 已提交
189
	result->refcnt = 1;
190 191 192
	/* The empty path is special. */
	if (unlikely(!len)) {
		if (empty)
193
			*empty = 1;
A
Al Viro 已提交
194 195 196 197
		if (!(flags & LOOKUP_EMPTY)) {
			putname(result);
			return ERR_PTR(-ENOENT);
		}
L
Linus Torvalds 已提交
198
	}
199

200
	result->uptr = filename;
201
	result->aname = NULL;
202 203
	audit_getname(result);
	return result;
L
Linus Torvalds 已提交
204 205
}

206 207
struct filename *
getname(const char __user * filename)
A
Al Viro 已提交
208
{
209
	return getname_flags(filename, 0, NULL);
A
Al Viro 已提交
210 211
}

212 213 214 215
struct filename *
getname_kernel(const char * filename)
{
	struct filename *result;
216
	int len = strlen(filename) + 1;
217 218 219 220 221

	result = __getname();
	if (unlikely(!result))
		return ERR_PTR(-ENOMEM);

222
	if (len <= EMBEDDED_NAME_MAX) {
A
Al Viro 已提交
223
		result->name = (char *)result->iname;
224
	} else if (len <= PATH_MAX) {
225
		const size_t size = offsetof(struct filename, iname[1]);
226 227
		struct filename *tmp;

228
		tmp = kmalloc(size, GFP_KERNEL);
229 230 231 232 233 234 235 236 237 238 239
		if (unlikely(!tmp)) {
			__putname(result);
			return ERR_PTR(-ENOMEM);
		}
		tmp->name = (char *)result;
		result = tmp;
	} else {
		__putname(result);
		return ERR_PTR(-ENAMETOOLONG);
	}
	memcpy((char *)result->name, filename, len);
240 241
	result->uptr = NULL;
	result->aname = NULL;
242
	result->refcnt = 1;
243
	audit_getname(result);
244 245 246 247

	return result;
}

248
void putname(struct filename *name)
L
Linus Torvalds 已提交
249
{
250 251 252 253 254
	BUG_ON(name->refcnt <= 0);

	if (--name->refcnt > 0)
		return;

A
Al Viro 已提交
255
	if (name->name != name->iname) {
256 257 258 259
		__putname(name->name);
		kfree(name);
	} else
		__putname(name);
L
Linus Torvalds 已提交
260 261
}

262 263
static int check_acl(struct inode *inode, int mask)
{
264
#ifdef CONFIG_FS_POSIX_ACL
265 266 267
	struct posix_acl *acl;

	if (mask & MAY_NOT_BLOCK) {
268 269
		acl = get_cached_acl_rcu(inode, ACL_TYPE_ACCESS);
	        if (!acl)
270
	                return -EAGAIN;
271
		/* no ->get_acl() calls in RCU mode... */
272
		if (is_uncached_acl(acl))
273
			return -ECHILD;
274
	        return posix_acl_permission(inode, acl, mask);
275 276
	}

C
Christoph Hellwig 已提交
277 278 279
	acl = get_acl(inode, ACL_TYPE_ACCESS);
	if (IS_ERR(acl))
		return PTR_ERR(acl);
280 281 282 283 284
	if (acl) {
	        int error = posix_acl_permission(inode, acl, mask);
	        posix_acl_release(acl);
	        return error;
	}
285
#endif
286 287 288 289

	return -EAGAIN;
}

290
/*
291 292 293 294
 * This does the basic UNIX permission checking.
 *
 * Note that the POSIX ACL check cares about the MAY_NOT_BLOCK bit,
 * for RCU walking.
L
Linus Torvalds 已提交
295
 */
296
static int acl_permission_check(struct inode *inode, int mask)
L
Linus Torvalds 已提交
297
{
298
	unsigned int mode = inode->i_mode;
L
Linus Torvalds 已提交
299

300 301 302
	/* Are we the owner? If so, ACL's don't matter */
	if (likely(uid_eq(current_fsuid(), inode->i_uid))) {
		mask &= 7;
L
Linus Torvalds 已提交
303
		mode >>= 6;
304 305
		return (mask & ~mode) ? -EACCES : 0;
	}
L
Linus Torvalds 已提交
306

307 308 309 310 311
	/* Do we have ACL's? */
	if (IS_POSIXACL(inode) && (mode & S_IRWXG)) {
		int error = check_acl(inode, mask);
		if (error != -EAGAIN)
			return error;
L
Linus Torvalds 已提交
312 313
	}

314 315 316
	/* Only RWX matters for group/other mode bits */
	mask &= 7;

L
Linus Torvalds 已提交
317
	/*
318 319 320
	 * Are the group permissions different from
	 * the other permissions in the bits we care
	 * about? Need to check group ownership if so.
L
Linus Torvalds 已提交
321
	 */
322 323 324 325 326 327 328
	if (mask & (mode ^ (mode >> 3))) {
		if (in_group_p(inode->i_gid))
			mode >>= 3;
	}

	/* Bits in 'mode' clear that we require? */
	return (mask & ~mode) ? -EACCES : 0;
329 330 331
}

/**
332
 * generic_permission -  check for access rights on a Posix-like filesystem
333
 * @inode:	inode to check access rights for
334 335
 * @mask:	right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC,
 *		%MAY_NOT_BLOCK ...)
336 337 338 339
 *
 * Used to check for read/write/execute permissions on a file.
 * We use "fsuid" for this, letting us set arbitrary permissions
 * for filesystem access without changing the "normal" uids which
340 341 342 343 344
 * are used for other things.
 *
 * generic_permission is rcu-walk aware. It returns -ECHILD in case an rcu-walk
 * request cannot be satisfied (eg. requires blocking or too much complexity).
 * It would then be called again in ref-walk mode.
345
 */
346
int generic_permission(struct inode *inode, int mask)
347 348 349 350
{
	int ret;

	/*
351
	 * Do the basic permission checks.
352
	 */
353
	ret = acl_permission_check(inode, mask);
354 355
	if (ret != -EACCES)
		return ret;
L
Linus Torvalds 已提交
356

357 358 359
	if (S_ISDIR(inode->i_mode)) {
		/* DACs are overridable for directories */
		if (!(mask & MAY_WRITE))
360 361
			if (capable_wrt_inode_uidgid(inode,
						     CAP_DAC_READ_SEARCH))
362
				return 0;
363
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
L
Linus Torvalds 已提交
364
			return 0;
365 366
		return -EACCES;
	}
L
Linus Torvalds 已提交
367 368 369 370

	/*
	 * Searching includes executable on directories, else just read.
	 */
371
	mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
372
	if (mask == MAY_READ)
373
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_READ_SEARCH))
L
Linus Torvalds 已提交
374
			return 0;
375 376 377 378 379 380 381 382
	/*
	 * Read/write DACs are always overridable.
	 * Executable DACs are overridable when there is
	 * at least one exec bit set.
	 */
	if (!(mask & MAY_EXEC) || (inode->i_mode & S_IXUGO))
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
			return 0;
L
Linus Torvalds 已提交
383 384 385

	return -EACCES;
}
386
EXPORT_SYMBOL(generic_permission);
L
Linus Torvalds 已提交
387

388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
/*
 * We _really_ want to just do "generic_permission()" without
 * even looking at the inode->i_op values. So we keep a cache
 * flag in inode->i_opflags, that says "this has not special
 * permission function, use the fast case".
 */
static inline int do_inode_permission(struct inode *inode, int mask)
{
	if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
		if (likely(inode->i_op->permission))
			return inode->i_op->permission(inode, mask);

		/* This gets set once for the inode lifetime */
		spin_lock(&inode->i_lock);
		inode->i_opflags |= IOP_FASTPERM;
		spin_unlock(&inode->i_lock);
	}
	return generic_permission(inode, mask);
}

D
David Howells 已提交
408 409 410
/**
 * sb_permission - Check superblock-level permissions
 * @sb: Superblock of inode to check permission on
411
 * @inode: Inode to check permission on
D
David Howells 已提交
412 413 414 415 416 417 418 419 420 421
 * @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 *
 * Separate out file-system wide checks from inode-specific permission checks.
 */
static int sb_permission(struct super_block *sb, struct inode *inode, int mask)
{
	if (unlikely(mask & MAY_WRITE)) {
		umode_t mode = inode->i_mode;

		/* Nobody gets write access to a read-only fs. */
422
		if (sb_rdonly(sb) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
D
David Howells 已提交
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
			return -EROFS;
	}
	return 0;
}

/**
 * inode_permission - Check for access rights to a given inode
 * @inode: Inode to check permission on
 * @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 *
 * Check for read/write/execute permissions on an inode.  We use fs[ug]id for
 * this, letting us set arbitrary permissions for filesystem access without
 * changing the "normal" UIDs which are used for other things.
 *
 * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
 */
int inode_permission(struct inode *inode, int mask)
{
	int retval;

	retval = sb_permission(inode->i_sb, inode, mask);
	if (retval)
		return retval;
446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471

	if (unlikely(mask & MAY_WRITE)) {
		/*
		 * Nobody gets write access to an immutable file.
		 */
		if (IS_IMMUTABLE(inode))
			return -EPERM;

		/*
		 * Updating mtime will likely cause i_uid and i_gid to be
		 * written back improperly if their true value is unknown
		 * to the vfs.
		 */
		if (HAS_UNMAPPED_ID(inode))
			return -EACCES;
	}

	retval = do_inode_permission(inode, mask);
	if (retval)
		return retval;

	retval = devcgroup_inode_permission(inode, mask);
	if (retval)
		return retval;

	return security_inode_permission(inode, mask);
D
David Howells 已提交
472
}
473
EXPORT_SYMBOL(inode_permission);
D
David Howells 已提交
474

J
Jan Blunck 已提交
475 476 477 478 479 480
/**
 * path_get - get a reference to a path
 * @path: path to get the reference to
 *
 * Given a path increment the reference count to the dentry and the vfsmount.
 */
481
void path_get(const struct path *path)
J
Jan Blunck 已提交
482 483 484 485 486 487
{
	mntget(path->mnt);
	dget(path->dentry);
}
EXPORT_SYMBOL(path_get);

J
Jan Blunck 已提交
488 489 490 491 492 493
/**
 * path_put - put a reference to a path
 * @path: path to put the reference to
 *
 * Given a path decrement the reference count to the dentry and the vfsmount.
 */
494
void path_put(const struct path *path)
L
Linus Torvalds 已提交
495
{
J
Jan Blunck 已提交
496 497
	dput(path->dentry);
	mntput(path->mnt);
L
Linus Torvalds 已提交
498
}
J
Jan Blunck 已提交
499
EXPORT_SYMBOL(path_put);
L
Linus Torvalds 已提交
500

501
#define EMBEDDED_LEVELS 2
502 503
struct nameidata {
	struct path	path;
A
Al Viro 已提交
504
	struct qstr	last;
505 506
	struct path	root;
	struct inode	*inode; /* path.dentry.d_inode */
507
	unsigned int	flags, state;
508
	unsigned	seq, m_seq, r_seq;
509 510
	int		last_type;
	unsigned	depth;
511
	int		total_link_count;
512 513
	struct saved {
		struct path link;
514
		struct delayed_call done;
515
		const char *name;
516
		unsigned seq;
517
	} *stack, internal[EMBEDDED_LEVELS];
518 519 520 521
	struct filename	*name;
	struct nameidata *saved;
	unsigned	root_seq;
	int		dfd;
522 523
	kuid_t		dir_uid;
	umode_t		dir_mode;
524
} __randomize_layout;
525

526 527 528 529
#define ND_ROOT_PRESET 1
#define ND_ROOT_GRABBED 2
#define ND_JUMPED 4

530
static void set_nameidata(struct nameidata *p, int dfd, struct filename *name)
531
{
532 533
	struct nameidata *old = current->nameidata;
	p->stack = p->internal;
534 535
	p->dfd = dfd;
	p->name = name;
536 537
	p->path.mnt = NULL;
	p->path.dentry = NULL;
538
	p->total_link_count = old ? old->total_link_count : 0;
539
	p->saved = old;
540
	p->state = 0;
541
	current->nameidata = p;
542 543
}

544
static void restore_nameidata(void)
545
{
546
	struct nameidata *now = current->nameidata, *old = now->saved;
547 548 549 550

	current->nameidata = old;
	if (old)
		old->total_link_count = now->total_link_count;
551
	if (now->stack != now->internal)
552
		kfree(now->stack);
553 554
}

555
static bool nd_alloc_stack(struct nameidata *nd)
556
{
A
Al Viro 已提交
557 558
	struct saved *p;

559 560 561 562
	p= kmalloc_array(MAXSYMLINKS, sizeof(struct saved),
			 nd->flags & LOOKUP_RCU ? GFP_ATOMIC : GFP_KERNEL);
	if (unlikely(!p))
		return false;
563 564
	memcpy(p, nd->internal, sizeof(nd->internal));
	nd->stack = p;
565
	return true;
566 567
}

568
/**
569
 * path_connected - Verify that a dentry is below mnt.mnt_root
570 571 572 573
 *
 * Rename can sometimes move a file or directory outside of a bind
 * mount, path_connected allows those cases to be detected.
 */
574
static bool path_connected(struct vfsmount *mnt, struct dentry *dentry)
575
{
576
	struct super_block *sb = mnt->mnt_sb;
577

578 579
	/* Bind mounts can have disconnected paths */
	if (mnt->mnt_root == sb->s_root)
580 581
		return true;

582
	return is_subdir(dentry, mnt->mnt_root);
583 584
}

585 586 587 588 589
static void drop_links(struct nameidata *nd)
{
	int i = nd->depth;
	while (i--) {
		struct saved *last = nd->stack + i;
590 591
		do_delayed_call(&last->done);
		clear_delayed_call(&last->done);
592 593 594 595 596 597 598 599 600 601 602
	}
}

static void terminate_walk(struct nameidata *nd)
{
	drop_links(nd);
	if (!(nd->flags & LOOKUP_RCU)) {
		int i;
		path_put(&nd->path);
		for (i = 0; i < nd->depth; i++)
			path_put(&nd->stack[i].link);
603
		if (nd->state & ND_ROOT_GRABBED) {
604
			path_put(&nd->root);
605
			nd->state &= ~ND_ROOT_GRABBED;
606
		}
607 608 609 610 611
	} else {
		nd->flags &= ~LOOKUP_RCU;
		rcu_read_unlock();
	}
	nd->depth = 0;
612 613
	nd->path.mnt = NULL;
	nd->path.dentry = NULL;
614 615 616
}

/* path_put is needed afterwards regardless of success or failure */
617
static bool __legitimize_path(struct path *path, unsigned seq, unsigned mseq)
618
{
619
	int res = __legitimize_mnt(path->mnt, mseq);
620 621 622 623 624 625 626 627 628 629 630 631 632
	if (unlikely(res)) {
		if (res > 0)
			path->mnt = NULL;
		path->dentry = NULL;
		return false;
	}
	if (unlikely(!lockref_get_not_dead(&path->dentry->d_lockref))) {
		path->dentry = NULL;
		return false;
	}
	return !read_seqcount_retry(&path->dentry->d_seq, seq);
}

633 634 635
static inline bool legitimize_path(struct nameidata *nd,
			    struct path *path, unsigned seq)
{
A
Al Viro 已提交
636
	return __legitimize_path(path, seq, nd->m_seq);
637 638
}

639 640 641
static bool legitimize_links(struct nameidata *nd)
{
	int i;
642 643 644 645 646
	if (unlikely(nd->flags & LOOKUP_CACHED)) {
		drop_links(nd);
		nd->depth = 0;
		return false;
	}
647 648 649 650 651 652 653 654 655 656 657
	for (i = 0; i < nd->depth; i++) {
		struct saved *last = nd->stack + i;
		if (unlikely(!legitimize_path(nd, &last->link, last->seq))) {
			drop_links(nd);
			nd->depth = i + 1;
			return false;
		}
	}
	return true;
}

658 659
static bool legitimize_root(struct nameidata *nd)
{
660 661 662 663 664 665 666 667
	/*
	 * For scoped-lookups (where nd->root has been zeroed), we need to
	 * restart the whole lookup from scratch -- because set_root() is wrong
	 * for these lookups (nd->dfd is the root, not the filesystem root).
	 */
	if (!nd->root.mnt && (nd->flags & LOOKUP_IS_SCOPED))
		return false;
	/* Nothing to do if nd->root is zero or is managed by the VFS user. */
668
	if (!nd->root.mnt || (nd->state & ND_ROOT_PRESET))
669
		return true;
670
	nd->state |= ND_ROOT_GRABBED;
671 672 673
	return legitimize_path(nd, &nd->root, nd->root_seq);
}

A
Al Viro 已提交
674
/*
N
Nick Piggin 已提交
675
 * Path walking has 2 modes, rcu-walk and ref-walk (see
A
Al Viro 已提交
676 677
 * Documentation/filesystems/path-lookup.txt).  In situations when we can't
 * continue in RCU mode, we attempt to drop out of rcu-walk mode and grab
M
Mike Marshall 已提交
678
 * normal reference counts on dentries and vfsmounts to transition to ref-walk
A
Al Viro 已提交
679 680 681 682
 * mode.  Refcounts are grabbed at the last known good point before rcu-walk
 * got stuck, so ref-walk may continue from there. If this is not successful
 * (eg. a seqcount has changed), then failure is returned and it's up to caller
 * to restart the path walk from the beginning in ref-walk mode.
N
Nick Piggin 已提交
683 684 685
 */

/**
686
 * try_to_unlazy - try to switch to ref-walk mode.
A
Al Viro 已提交
687
 * @nd: nameidata pathwalk data
688
 * Returns: true on success, false on failure
N
Nick Piggin 已提交
689
 *
690
 * try_to_unlazy attempts to legitimize the current nd->path and nd->root
A
Al Viro 已提交
691 692
 * for ref-walk mode.
 * Must be called from rcu-walk context.
693
 * Nothing should touch nameidata between try_to_unlazy() failure and
694
 * terminate_walk().
N
Nick Piggin 已提交
695
 */
696
static bool try_to_unlazy(struct nameidata *nd)
N
Nick Piggin 已提交
697 698 699 700
{
	struct dentry *parent = nd->path.dentry;

	BUG_ON(!(nd->flags & LOOKUP_RCU));
701

A
Al Viro 已提交
702 703 704
	nd->flags &= ~LOOKUP_RCU;
	if (unlikely(!legitimize_links(nd)))
		goto out1;
705 706
	if (unlikely(!legitimize_path(nd, &nd->path, nd->seq)))
		goto out;
707 708
	if (unlikely(!legitimize_root(nd)))
		goto out;
A
Al Viro 已提交
709 710
	rcu_read_unlock();
	BUG_ON(nd->inode != parent->d_inode);
711
	return true;
A
Al Viro 已提交
712

713
out1:
A
Al Viro 已提交
714 715 716 717
	nd->path.mnt = NULL;
	nd->path.dentry = NULL;
out:
	rcu_read_unlock();
718
	return false;
A
Al Viro 已提交
719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737
}

/**
 * unlazy_child - try to switch to ref-walk mode.
 * @nd: nameidata pathwalk data
 * @dentry: child of nd->path.dentry
 * @seq: seq number to check dentry against
 * Returns: 0 on success, -ECHILD on failure
 *
 * unlazy_child attempts to legitimize the current nd->path, nd->root and dentry
 * for ref-walk mode.  @dentry must be a path found by a do_lookup call on
 * @nd.  Must be called from rcu-walk context.
 * Nothing should touch nameidata between unlazy_child() failure and
 * terminate_walk().
 */
static int unlazy_child(struct nameidata *nd, struct dentry *dentry, unsigned seq)
{
	BUG_ON(!(nd->flags & LOOKUP_RCU));

738
	nd->flags &= ~LOOKUP_RCU;
739 740 741 742
	if (unlikely(!legitimize_links(nd)))
		goto out2;
	if (unlikely(!legitimize_mnt(nd->path.mnt, nd->m_seq)))
		goto out2;
A
Al Viro 已提交
743
	if (unlikely(!lockref_get_not_dead(&nd->path.dentry->d_lockref)))
744
		goto out1;
A
Al Viro 已提交
745

746
	/*
A
Al Viro 已提交
747 748 749 750 751
	 * We need to move both the parent and the dentry from the RCU domain
	 * to be properly refcounted. And the sequence number in the dentry
	 * validates *both* dentry counters, since we checked the sequence
	 * number of the parent after we got the child sequence number. So we
	 * know the parent must still be valid if the child sequence number is
752
	 */
A
Al Viro 已提交
753 754
	if (unlikely(!lockref_get_not_dead(&dentry->d_lockref)))
		goto out;
755 756
	if (unlikely(read_seqcount_retry(&dentry->d_seq, seq)))
		goto out_dput;
757 758 759 760
	/*
	 * Sequence counts matched. Now make sure that the root is
	 * still valid and get it if required.
	 */
761 762
	if (unlikely(!legitimize_root(nd)))
		goto out_dput;
A
Al Viro 已提交
763
	rcu_read_unlock();
N
Nick Piggin 已提交
764
	return 0;
A
Al Viro 已提交
765

766 767 768 769
out2:
	nd->path.mnt = NULL;
out1:
	nd->path.dentry = NULL;
770
out:
A
Al Viro 已提交
771
	rcu_read_unlock();
772 773 774 775
	return -ECHILD;
out_dput:
	rcu_read_unlock();
	dput(dentry);
N
Nick Piggin 已提交
776 777 778
	return -ECHILD;
}

779
static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
780
{
781 782 783 784
	if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
		return dentry->d_op->d_revalidate(dentry, flags);
	else
		return 1;
785 786
}

787 788 789
/**
 * complete_walk - successful completion of path walk
 * @nd:  pointer nameidata
790
 *
791 792 793 794 795
 * If we had been in RCU mode, drop out of it and legitimize nd->path.
 * Revalidate the final result, unless we'd already done that during
 * the path walk or the filesystem doesn't ask for it.  Return 0 on
 * success, -error on failure.  In case of failure caller does not
 * need to drop nd->path.
796
 */
797
static int complete_walk(struct nameidata *nd)
798
{
A
Al Viro 已提交
799
	struct dentry *dentry = nd->path.dentry;
800 801
	int status;

802
	if (nd->flags & LOOKUP_RCU) {
803 804 805 806
		/*
		 * We don't want to zero nd->root for scoped-lookups or
		 * externally-managed nd->root.
		 */
807 808 809
		if (!(nd->state & ND_ROOT_PRESET))
			if (!(nd->flags & LOOKUP_IS_SCOPED))
				nd->root.mnt = NULL;
J
Jens Axboe 已提交
810
		nd->flags &= ~LOOKUP_CACHED;
811
		if (!try_to_unlazy(nd))
812 813 814
			return -ECHILD;
	}

815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835
	if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) {
		/*
		 * While the guarantee of LOOKUP_IS_SCOPED is (roughly) "don't
		 * ever step outside the root during lookup" and should already
		 * be guaranteed by the rest of namei, we want to avoid a namei
		 * BUG resulting in userspace being given a path that was not
		 * scoped within the root at some point during the lookup.
		 *
		 * So, do a final sanity-check to make sure that in the
		 * worst-case scenario (a complete bypass of LOOKUP_IS_SCOPED)
		 * we won't silently return an fd completely outside of the
		 * requested root to userspace.
		 *
		 * Userspace could move the path outside the root after this
		 * check, but as discussed elsewhere this is not a concern (the
		 * resolved file was inside the root at some point).
		 */
		if (!path_is_under(&nd->path, &nd->root))
			return -EXDEV;
	}

836
	if (likely(!(nd->state & ND_JUMPED)))
A
Al Viro 已提交
837 838
		return 0;

839
	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
840 841
		return 0;

842
	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
843 844 845
	if (status > 0)
		return 0;

A
Al Viro 已提交
846
	if (!status)
847
		status = -ESTALE;
A
Al Viro 已提交
848

849 850 851
	return status;
}

852
static int set_root(struct nameidata *nd)
N
Nick Piggin 已提交
853
{
854
	struct fs_struct *fs = current->fs;
N
Nick Piggin 已提交
855

856 857 858 859 860 861 862 863
	/*
	 * Jumping to the real root in a scoped-lookup is a BUG in namei, but we
	 * still have to ensure it doesn't happen because it will cause a breakout
	 * from the dirfd.
	 */
	if (WARN_ON(nd->flags & LOOKUP_IS_SCOPED))
		return -ENOTRECOVERABLE;

864 865 866 867 868 869 870 871 872 873
	if (nd->flags & LOOKUP_RCU) {
		unsigned seq;

		do {
			seq = read_seqcount_begin(&fs->seq);
			nd->root = fs->root;
			nd->root_seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
		} while (read_seqcount_retry(&fs->seq, seq));
	} else {
		get_fs_root(fs, &nd->root);
874
		nd->state |= ND_ROOT_GRABBED;
875
	}
876
	return 0;
N
Nick Piggin 已提交
877 878
}

879 880
static int nd_jump_root(struct nameidata *nd)
{
881 882
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return -EXDEV;
883 884 885 886 887
	if (unlikely(nd->flags & LOOKUP_NO_XDEV)) {
		/* Absolute path arguments to path_init() are allowed. */
		if (nd->path.mnt != NULL && nd->path.mnt != nd->root.mnt)
			return -EXDEV;
	}
888 889 890 891 892
	if (!nd->root.mnt) {
		int error = set_root(nd);
		if (error)
			return error;
	}
893 894 895 896 897 898 899 900 901 902 903 904 905 906
	if (nd->flags & LOOKUP_RCU) {
		struct dentry *d;
		nd->path = nd->root;
		d = nd->path.dentry;
		nd->inode = d->d_inode;
		nd->seq = nd->root_seq;
		if (unlikely(read_seqcount_retry(&d->d_seq, nd->seq)))
			return -ECHILD;
	} else {
		path_put(&nd->path);
		nd->path = nd->root;
		path_get(&nd->path);
		nd->inode = nd->path.dentry->d_inode;
	}
907
	nd->state |= ND_JUMPED;
908 909 910
	return 0;
}

C
Christoph Hellwig 已提交
911
/*
912
 * Helper to directly jump to a known parsed path from ->get_link,
C
Christoph Hellwig 已提交
913 914
 * caller must have taken a reference to path beforehand.
 */
915
int nd_jump_link(struct path *path)
C
Christoph Hellwig 已提交
916
{
917
	int error = -ELOOP;
918
	struct nameidata *nd = current->nameidata;
C
Christoph Hellwig 已提交
919

920 921 922
	if (unlikely(nd->flags & LOOKUP_NO_MAGICLINKS))
		goto err;

923 924 925 926 927
	error = -EXDEV;
	if (unlikely(nd->flags & LOOKUP_NO_XDEV)) {
		if (nd->path.mnt != path->mnt)
			goto err;
	}
928 929 930
	/* Not currently safe for scoped-lookups. */
	if (unlikely(nd->flags & LOOKUP_IS_SCOPED))
		goto err;
931

932
	path_put(&nd->path);
C
Christoph Hellwig 已提交
933 934
	nd->path = *path;
	nd->inode = nd->path.dentry->d_inode;
935
	nd->state |= ND_JUMPED;
936
	return 0;
937 938 939 940

err:
	path_put(path);
	return error;
C
Christoph Hellwig 已提交
941 942
}

943
static inline void put_link(struct nameidata *nd)
944
{
A
Al Viro 已提交
945
	struct saved *last = nd->stack + --nd->depth;
946
	do_delayed_call(&last->done);
A
Al Viro 已提交
947 948
	if (!(nd->flags & LOOKUP_RCU))
		path_put(&last->link);
949 950
}

951 952
int sysctl_protected_symlinks __read_mostly = 0;
int sysctl_protected_hardlinks __read_mostly = 0;
953 954
int sysctl_protected_fifos __read_mostly;
int sysctl_protected_regular __read_mostly;
K
Kees Cook 已提交
955 956 957

/**
 * may_follow_link - Check symlink following for unsafe situations
958
 * @nd: nameidata pathwalk data
K
Kees Cook 已提交
959 960 961 962 963 964 965 966 967 968 969 970
 *
 * In the case of the sysctl_protected_symlinks sysctl being enabled,
 * CAP_DAC_OVERRIDE needs to be specifically ignored if the symlink is
 * in a sticky world-writable directory. This is to protect privileged
 * processes from failing races against path names that may change out
 * from under them by way of other users creating malicious symlinks.
 * It will permit symlinks to be followed only when outside a sticky
 * world-writable directory, or when the uid of the symlink and follower
 * match, or when the directory owner matches the symlink's owner.
 *
 * Returns 0 if following the symlink is allowed, -ve on error.
 */
971
static inline int may_follow_link(struct nameidata *nd, const struct inode *inode)
K
Kees Cook 已提交
972 973 974 975 976
{
	if (!sysctl_protected_symlinks)
		return 0;

	/* Allowed if owner and follower match. */
977
	if (uid_eq(current_cred()->fsuid, inode->i_uid))
K
Kees Cook 已提交
978 979 980
		return 0;

	/* Allowed if parent directory not sticky and world-writable. */
981
	if ((nd->dir_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH))
K
Kees Cook 已提交
982 983 984
		return 0;

	/* Allowed if parent directory and link owner match. */
985
	if (uid_valid(nd->dir_uid) && uid_eq(nd->dir_uid, inode->i_uid))
K
Kees Cook 已提交
986 987
		return 0;

988 989 990
	if (nd->flags & LOOKUP_RCU)
		return -ECHILD;

991
	audit_inode(nd->name, nd->stack[0].link.dentry, 0);
K
Kees Cook 已提交
992
	audit_log_path_denied(AUDIT_ANOM_LINK, "follow_link");
K
Kees Cook 已提交
993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038
	return -EACCES;
}

/**
 * safe_hardlink_source - Check for safe hardlink conditions
 * @inode: the source inode to hardlink from
 *
 * Return false if at least one of the following conditions:
 *    - inode is not a regular file
 *    - inode is setuid
 *    - inode is setgid and group-exec
 *    - access failure for read and write
 *
 * Otherwise returns true.
 */
static bool safe_hardlink_source(struct inode *inode)
{
	umode_t mode = inode->i_mode;

	/* Special files should not get pinned to the filesystem. */
	if (!S_ISREG(mode))
		return false;

	/* Setuid files should not get pinned to the filesystem. */
	if (mode & S_ISUID)
		return false;

	/* Executable setgid files should not get pinned to the filesystem. */
	if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
		return false;

	/* Hardlinking to unreadable or unwritable sources is dangerous. */
	if (inode_permission(inode, MAY_READ | MAY_WRITE))
		return false;

	return true;
}

/**
 * may_linkat - Check permissions for creating a hardlink
 * @link: the source to hardlink from
 *
 * Block hardlink when all of:
 *  - sysctl_protected_hardlinks enabled
 *  - fsuid does not match inode
 *  - hardlink source is unsafe (see safe_hardlink_source() above)
1039
 *  - not CAP_FOWNER in a namespace with the inode owner uid mapped
K
Kees Cook 已提交
1040 1041 1042
 *
 * Returns 0 if successful, -ve on error.
 */
1043
int may_linkat(struct path *link)
K
Kees Cook 已提交
1044
{
1045 1046 1047 1048 1049
	struct inode *inode = link->dentry->d_inode;

	/* Inode writeback is not safe when the uid or gid are invalid. */
	if (!uid_valid(inode->i_uid) || !gid_valid(inode->i_gid))
		return -EOVERFLOW;
K
Kees Cook 已提交
1050 1051 1052 1053 1054 1055 1056

	if (!sysctl_protected_hardlinks)
		return 0;

	/* Source inode owner (or CAP_FOWNER) can hardlink all they like,
	 * otherwise, it must be a safe source.
	 */
1057
	if (safe_hardlink_source(inode) || inode_owner_or_capable(inode))
K
Kees Cook 已提交
1058 1059
		return 0;

K
Kees Cook 已提交
1060
	audit_log_path_denied(AUDIT_ANOM_LINK, "linkat");
K
Kees Cook 已提交
1061 1062 1063
	return -EPERM;
}

1064 1065 1066 1067
/**
 * may_create_in_sticky - Check whether an O_CREAT open in a sticky directory
 *			  should be allowed, or not, on files that already
 *			  exist.
1068 1069
 * @dir_mode: mode bits of directory
 * @dir_uid: owner of directory
1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084
 * @inode: the inode of the file to open
 *
 * Block an O_CREAT open of a FIFO (or a regular file) when:
 *   - sysctl_protected_fifos (or sysctl_protected_regular) is enabled
 *   - the file already exists
 *   - we are in a sticky directory
 *   - we don't own the file
 *   - the owner of the directory doesn't own the file
 *   - the directory is world writable
 * If the sysctl_protected_fifos (or sysctl_protected_regular) is set to 2
 * the directory doesn't have to be world writable: being group writable will
 * be enough.
 *
 * Returns 0 if the open is allowed, -ve on error.
 */
1085
static int may_create_in_sticky(umode_t dir_mode, kuid_t dir_uid,
1086 1087 1088 1089
				struct inode * const inode)
{
	if ((!sysctl_protected_fifos && S_ISFIFO(inode->i_mode)) ||
	    (!sysctl_protected_regular && S_ISREG(inode->i_mode)) ||
1090 1091
	    likely(!(dir_mode & S_ISVTX)) ||
	    uid_eq(inode->i_uid, dir_uid) ||
1092 1093 1094
	    uid_eq(current_fsuid(), inode->i_uid))
		return 0;

1095 1096
	if (likely(dir_mode & 0002) ||
	    (dir_mode & 0020 &&
1097 1098
	     ((sysctl_protected_fifos >= 2 && S_ISFIFO(inode->i_mode)) ||
	      (sysctl_protected_regular >= 2 && S_ISREG(inode->i_mode))))) {
K
Kees Cook 已提交
1099 1100 1101 1102
		const char *operation = S_ISFIFO(inode->i_mode) ?
					"sticky_create_fifo" :
					"sticky_create_regular";
		audit_log_path_denied(AUDIT_ANOM_CREAT, operation);
1103 1104 1105 1106 1107
		return -EACCES;
	}
	return 0;
}

1108 1109 1110 1111 1112 1113 1114 1115 1116 1117
/*
 * follow_up - Find the mountpoint of path's vfsmount
 *
 * Given a path, find the mountpoint of its source file system.
 * Replace @path with the path of the mountpoint in the parent mount.
 * Up is towards /.
 *
 * Return 1 if we went up a level and 0 if we were already at the
 * root.
 */
A
Al Viro 已提交
1118
int follow_up(struct path *path)
L
Linus Torvalds 已提交
1119
{
1120 1121
	struct mount *mnt = real_mount(path->mnt);
	struct mount *parent;
L
Linus Torvalds 已提交
1122
	struct dentry *mountpoint;
N
Nick Piggin 已提交
1123

A
Al Viro 已提交
1124
	read_seqlock_excl(&mount_lock);
1125
	parent = mnt->mnt_parent;
A
Al Viro 已提交
1126
	if (parent == mnt) {
A
Al Viro 已提交
1127
		read_sequnlock_excl(&mount_lock);
L
Linus Torvalds 已提交
1128 1129
		return 0;
	}
1130
	mntget(&parent->mnt);
1131
	mountpoint = dget(mnt->mnt_mountpoint);
A
Al Viro 已提交
1132
	read_sequnlock_excl(&mount_lock);
A
Al Viro 已提交
1133 1134 1135
	dput(path->dentry);
	path->dentry = mountpoint;
	mntput(path->mnt);
1136
	path->mnt = &parent->mnt;
L
Linus Torvalds 已提交
1137 1138
	return 1;
}
1139
EXPORT_SYMBOL(follow_up);
L
Linus Torvalds 已提交
1140

A
Al Viro 已提交
1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160
static bool choose_mountpoint_rcu(struct mount *m, const struct path *root,
				  struct path *path, unsigned *seqp)
{
	while (mnt_has_parent(m)) {
		struct dentry *mountpoint = m->mnt_mountpoint;

		m = m->mnt_parent;
		if (unlikely(root->dentry == mountpoint &&
			     root->mnt == &m->mnt))
			break;
		if (mountpoint != m->mnt.mnt_root) {
			path->mnt = &m->mnt;
			path->dentry = mountpoint;
			*seqp = read_seqcount_begin(&mountpoint->d_seq);
			return true;
		}
	}
	return false;
}

1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185
static bool choose_mountpoint(struct mount *m, const struct path *root,
			      struct path *path)
{
	bool found;

	rcu_read_lock();
	while (1) {
		unsigned seq, mseq = read_seqbegin(&mount_lock);

		found = choose_mountpoint_rcu(m, root, path, &seq);
		if (unlikely(!found)) {
			if (!read_seqretry(&mount_lock, mseq))
				break;
		} else {
			if (likely(__legitimize_path(path, seq, mseq)))
				break;
			rcu_read_unlock();
			path_put(path);
			rcu_read_lock();
		}
	}
	rcu_read_unlock();
	return found;
}

N
Nick Piggin 已提交
1186
/*
1187 1188 1189
 * Perform an automount
 * - return -EISDIR to tell follow_managed() to stop and return the path we
 *   were called with.
L
Linus Torvalds 已提交
1190
 */
1191
static int follow_automount(struct path *path, int *count, unsigned lookup_flags)
N
Nick Piggin 已提交
1192
{
1193
	struct dentry *dentry = path->dentry;
1194

1195 1196 1197 1198 1199 1200 1201 1202 1203 1204
	/* We don't want to mount if someone's just doing a stat -
	 * unless they're stat'ing a directory and appended a '/' to
	 * the name.
	 *
	 * We do, however, want to mount if someone wants to open or
	 * create a file of any type under the mountpoint, wants to
	 * traverse through the mountpoint or wants to open the
	 * mounted directory.  Also, autofs may mark negative dentries
	 * as being automount points.  These will need the attentions
	 * of the daemon to instantiate them before they can be used.
1205
	 */
1206
	if (!(lookup_flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
1207
			   LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
1208
	    dentry->d_inode)
1209
		return -EISDIR;
1210

1211
	if (count && (*count)++ >= MAXSYMLINKS)
1212 1213
		return -ELOOP;

1214
	return finish_automount(dentry->d_op->d_automount(path), path);
A
Al Viro 已提交
1215 1216
}

1217
/*
A
Al Viro 已提交
1218 1219 1220 1221
 * mount traversal - out-of-line part.  One note on ->d_flags accesses -
 * dentries are pinned but not locked here, so negative dentry can go
 * positive right under us.  Use of smp_load_acquire() provides a barrier
 * sufficient for ->d_inode and ->d_flags consistency.
1222
 */
A
Al Viro 已提交
1223 1224
static int __traverse_mounts(struct path *path, unsigned flags, bool *jumped,
			     int *count, unsigned lookup_flags)
L
Linus Torvalds 已提交
1225
{
A
Al Viro 已提交
1226
	struct vfsmount *mnt = path->mnt;
1227
	bool need_mntput = false;
1228
	int ret = 0;
1229

A
Al Viro 已提交
1230
	while (flags & DCACHE_MANAGED_DENTRY) {
1231 1232
		/* Allow the filesystem to manage the transit without i_mutex
		 * being held. */
1233
		if (flags & DCACHE_MANAGE_TRANSIT) {
1234
			ret = path->dentry->d_op->d_manage(path, false);
1235
			flags = smp_load_acquire(&path->dentry->d_flags);
1236
			if (ret < 0)
1237
				break;
1238 1239
		}

A
Al Viro 已提交
1240
		if (flags & DCACHE_MOUNTED) {	// something's mounted on it..
1241
			struct vfsmount *mounted = lookup_mnt(path);
A
Al Viro 已提交
1242
			if (mounted) {		// ... in our namespace
1243 1244 1245 1246 1247
				dput(path->dentry);
				if (need_mntput)
					mntput(path->mnt);
				path->mnt = mounted;
				path->dentry = dget(mounted->mnt_root);
A
Al Viro 已提交
1248 1249
				// here we know it's positive
				flags = path->dentry->d_flags;
1250 1251 1252 1253 1254
				need_mntput = true;
				continue;
			}
		}

A
Al Viro 已提交
1255 1256
		if (!(flags & DCACHE_NEED_AUTOMOUNT))
			break;
1257

A
Al Viro 已提交
1258 1259 1260 1261 1262
		// uncovered automount point
		ret = follow_automount(path, count, lookup_flags);
		flags = smp_load_acquire(&path->dentry->d_flags);
		if (ret < 0)
			break;
L
Linus Torvalds 已提交
1263
	}
1264

A
Al Viro 已提交
1265 1266 1267 1268 1269 1270
	if (ret == -EISDIR)
		ret = 0;
	// possible if you race with several mount --move
	if (need_mntput && path->mnt == mnt)
		mntput(path->mnt);
	if (!ret && unlikely(d_flags_negative(flags)))
1271
		ret = -ENOENT;
A
Al Viro 已提交
1272
	*jumped = need_mntput;
1273
	return ret;
L
Linus Torvalds 已提交
1274 1275
}

A
Al Viro 已提交
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290
static inline int traverse_mounts(struct path *path, bool *jumped,
				  int *count, unsigned lookup_flags)
{
	unsigned flags = smp_load_acquire(&path->dentry->d_flags);

	/* fastpath */
	if (likely(!(flags & DCACHE_MANAGED_DENTRY))) {
		*jumped = false;
		if (unlikely(d_flags_negative(flags)))
			return -ENOENT;
		return 0;
	}
	return __traverse_mounts(path, flags, jumped, count, lookup_flags);
}

1291
int follow_down_one(struct path *path)
L
Linus Torvalds 已提交
1292 1293 1294
{
	struct vfsmount *mounted;

A
Al Viro 已提交
1295
	mounted = lookup_mnt(path);
L
Linus Torvalds 已提交
1296
	if (mounted) {
A
Al Viro 已提交
1297 1298 1299 1300
		dput(path->dentry);
		mntput(path->mnt);
		path->mnt = mounted;
		path->dentry = dget(mounted->mnt_root);
L
Linus Torvalds 已提交
1301 1302 1303 1304
		return 1;
	}
	return 0;
}
1305
EXPORT_SYMBOL(follow_down_one);
L
Linus Torvalds 已提交
1306

A
Al Viro 已提交
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323
/*
 * Follow down to the covering mount currently visible to userspace.  At each
 * point, the filesystem owning that dentry may be queried as to whether the
 * caller is permitted to proceed or not.
 */
int follow_down(struct path *path)
{
	struct vfsmount *mnt = path->mnt;
	bool jumped;
	int ret = traverse_mounts(path, &jumped, NULL, 0);

	if (path->mnt != mnt)
		mntput(mnt);
	return ret;
}
EXPORT_SYMBOL(follow_down);

1324
/*
1325 1326
 * Try to skip to top of mountpoint pile in rcuwalk mode.  Fail if
 * we meet a managed dentry that would need blocking.
1327 1328
 */
static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
1329
			       struct inode **inode, unsigned *seqp)
1330
{
A
Al Viro 已提交
1331 1332 1333 1334 1335 1336 1337 1338 1339
	struct dentry *dentry = path->dentry;
	unsigned int flags = dentry->d_flags;

	if (likely(!(flags & DCACHE_MANAGED_DENTRY)))
		return true;

	if (unlikely(nd->flags & LOOKUP_NO_XDEV))
		return false;

1340 1341 1342 1343 1344
	for (;;) {
		/*
		 * Don't forget we might have a non-mountpoint managed dentry
		 * that wants to block transit.
		 */
A
Al Viro 已提交
1345 1346 1347 1348 1349
		if (unlikely(flags & DCACHE_MANAGE_TRANSIT)) {
			int res = dentry->d_op->d_manage(path, true);
			if (res)
				return res == -EISDIR;
			flags = dentry->d_flags;
1350
		}
1351

A
Al Viro 已提交
1352 1353 1354 1355 1356
		if (flags & DCACHE_MOUNTED) {
			struct mount *mounted = __lookup_mnt(path->mnt, dentry);
			if (mounted) {
				path->mnt = &mounted->mnt;
				dentry = path->dentry = mounted->mnt.mnt_root;
1357
				nd->state |= ND_JUMPED;
A
Al Viro 已提交
1358 1359 1360 1361 1362 1363 1364 1365 1366
				*seqp = read_seqcount_begin(&dentry->d_seq);
				*inode = dentry->d_inode;
				/*
				 * We don't need to re-check ->d_seq after this
				 * ->d_inode read - there will be an RCU delay
				 * between mount hash removal and ->mnt_root
				 * becoming unpinned.
				 */
				flags = dentry->d_flags;
1367 1368
				if (read_seqretry(&mount_lock, nd->m_seq))
					return false;
A
Al Viro 已提交
1369 1370 1371 1372 1373 1374
				continue;
			}
			if (read_seqretry(&mount_lock, nd->m_seq))
				return false;
		}
		return !(flags & DCACHE_NEED_AUTOMOUNT);
1375
	}
1376 1377
}

1378 1379 1380
static inline int handle_mounts(struct nameidata *nd, struct dentry *dentry,
			  struct path *path, struct inode **inode,
			  unsigned int *seqp)
1381
{
A
Al Viro 已提交
1382
	bool jumped;
1383
	int ret;
1384

1385 1386
	path->mnt = nd->path.mnt;
	path->dentry = dentry;
1387 1388 1389 1390 1391
	if (nd->flags & LOOKUP_RCU) {
		unsigned int seq = *seqp;
		if (unlikely(!*inode))
			return -ENOENT;
		if (likely(__follow_mount_rcu(nd, path, inode, seqp)))
A
Al Viro 已提交
1392
			return 0;
1393 1394 1395 1396 1397 1398
		if (unlazy_child(nd, dentry, seq))
			return -ECHILD;
		// *path might've been clobbered by __follow_mount_rcu()
		path->mnt = nd->path.mnt;
		path->dentry = dentry;
	}
A
Al Viro 已提交
1399 1400 1401 1402 1403
	ret = traverse_mounts(path, &jumped, &nd->total_link_count, nd->flags);
	if (jumped) {
		if (unlikely(nd->flags & LOOKUP_NO_XDEV))
			ret = -EXDEV;
		else
1404
			nd->state |= ND_JUMPED;
A
Al Viro 已提交
1405 1406 1407 1408 1409 1410
	}
	if (unlikely(ret)) {
		dput(path->dentry);
		if (path->mnt != nd->path.mnt)
			mntput(path->mnt);
	} else {
1411 1412 1413 1414 1415 1416
		*inode = d_backing_inode(path->dentry);
		*seqp = 0; /* out of RCU mode, so the value doesn't matter */
	}
	return ret;
}

1417
/*
1418 1419
 * This looks up the name in dcache and possibly revalidates the found dentry.
 * NULL is returned if the dentry does not exist in the cache.
1420
 */
1421 1422
static struct dentry *lookup_dcache(const struct qstr *name,
				    struct dentry *dir,
1423
				    unsigned int flags)
1424
{
1425
	struct dentry *dentry = d_lookup(dir, name);
M
Miklos Szeredi 已提交
1426
	if (dentry) {
1427 1428 1429 1430 1431 1432
		int error = d_revalidate(dentry, flags);
		if (unlikely(error <= 0)) {
			if (!error)
				d_invalidate(dentry);
			dput(dentry);
			return ERR_PTR(error);
M
Miklos Szeredi 已提交
1433 1434
		}
	}
1435 1436 1437
	return dentry;
}

1438
/*
1439 1440 1441 1442 1443
 * Parent directory has inode locked exclusive.  This is one
 * and only case when ->lookup() gets called on non in-lookup
 * dentries - as the matter of fact, this only gets called
 * when directory is guaranteed to have no in-lookup children
 * at all.
1444
 */
1445
static struct dentry *__lookup_hash(const struct qstr *name,
1446
		struct dentry *base, unsigned int flags)
1447
{
1448
	struct dentry *dentry = lookup_dcache(name, base, flags);
1449 1450
	struct dentry *old;
	struct inode *dir = base->d_inode;
1451

1452
	if (dentry)
M
Miklos Szeredi 已提交
1453
		return dentry;
1454

1455 1456 1457 1458
	/* Don't create child dentry for a dead directory. */
	if (unlikely(IS_DEADDIR(dir)))
		return ERR_PTR(-ENOENT);

1459 1460 1461 1462
	dentry = d_alloc(base, name);
	if (unlikely(!dentry))
		return ERR_PTR(-ENOMEM);

1463 1464 1465 1466 1467 1468
	old = dir->i_op->lookup(dir, dentry, flags);
	if (unlikely(old)) {
		dput(dentry);
		dentry = old;
	}
	return dentry;
1469 1470
}

1471 1472 1473
static struct dentry *lookup_fast(struct nameidata *nd,
				  struct inode **inode,
			          unsigned *seqp)
L
Linus Torvalds 已提交
1474
{
N
Nick Piggin 已提交
1475
	struct dentry *dentry, *parent = nd->path.dentry;
A
Al Viro 已提交
1476
	int status = 1;
1477

1478 1479
	/*
	 * Rename seqlock is not required here because in the off chance
A
Al Viro 已提交
1480 1481
	 * of a false negative due to a concurrent rename, the caller is
	 * going to fall back to non-racy lookup.
1482
	 */
N
Nick Piggin 已提交
1483 1484
	if (nd->flags & LOOKUP_RCU) {
		unsigned seq;
1485
		dentry = __d_lookup_rcu(parent, &nd->last, &seq);
A
Al Viro 已提交
1486
		if (unlikely(!dentry)) {
1487
			if (!try_to_unlazy(nd))
1488 1489
				return ERR_PTR(-ECHILD);
			return NULL;
A
Al Viro 已提交
1490
		}
A
Al Viro 已提交
1491

1492 1493 1494 1495
		/*
		 * This sequence count validates that the inode matches
		 * the dentry name information from lookup.
		 */
1496
		*inode = d_backing_inode(dentry);
A
Al Viro 已提交
1497
		if (unlikely(read_seqcount_retry(&dentry->d_seq, seq)))
1498
			return ERR_PTR(-ECHILD);
1499 1500 1501 1502 1503 1504 1505 1506

		/*
		 * This sequence count validates that the parent had no
		 * changes while we did the lookup of the dentry above.
		 *
		 * The memory barrier in read_seqcount_begin of child is
		 *  enough, we can use __read_seqcount_retry here.
		 */
A
Al Viro 已提交
1507
		if (unlikely(__read_seqcount_retry(&parent->d_seq, nd->seq)))
1508
			return ERR_PTR(-ECHILD);
A
Al Viro 已提交
1509

1510
		*seqp = seq;
1511
		status = d_revalidate(dentry, nd->flags);
1512
		if (likely(status > 0))
1513
			return dentry;
A
Al Viro 已提交
1514
		if (unlazy_child(nd, dentry, seq))
1515
			return ERR_PTR(-ECHILD);
1516 1517 1518
		if (unlikely(status == -ECHILD))
			/* we'd been told to redo it in non-rcu mode */
			status = d_revalidate(dentry, nd->flags);
A
Al Viro 已提交
1519
	} else {
A
Al Viro 已提交
1520
		dentry = __d_lookup(parent, &nd->last);
A
Al Viro 已提交
1521
		if (unlikely(!dentry))
1522
			return NULL;
1523
		status = d_revalidate(dentry, nd->flags);
1524
	}
A
Al Viro 已提交
1525
	if (unlikely(status <= 0)) {
1526
		if (!status)
A
Al Viro 已提交
1527
			d_invalidate(dentry);
1528
		dput(dentry);
1529
		return ERR_PTR(status);
1530
	}
1531
	return dentry;
M
Miklos Szeredi 已提交
1532 1533 1534
}

/* Fast lookup failed, do it the slow way */
A
Al Viro 已提交
1535 1536 1537
static struct dentry *__lookup_slow(const struct qstr *name,
				    struct dentry *dir,
				    unsigned int flags)
M
Miklos Szeredi 已提交
1538
{
A
Al Viro 已提交
1539
	struct dentry *dentry, *old;
1540
	struct inode *inode = dir->d_inode;
1541
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1542 1543

	/* Don't go there if it's already dead */
A
Al Viro 已提交
1544
	if (unlikely(IS_DEADDIR(inode)))
A
Al Viro 已提交
1545
		return ERR_PTR(-ENOENT);
A
Al Viro 已提交
1546
again:
1547
	dentry = d_alloc_parallel(dir, name, &wq);
A
Al Viro 已提交
1548
	if (IS_ERR(dentry))
A
Al Viro 已提交
1549
		return dentry;
A
Al Viro 已提交
1550
	if (unlikely(!d_in_lookup(dentry))) {
1551 1552 1553 1554
		int error = d_revalidate(dentry, flags);
		if (unlikely(error <= 0)) {
			if (!error) {
				d_invalidate(dentry);
1555
				dput(dentry);
1556
				goto again;
1557
			}
1558 1559
			dput(dentry);
			dentry = ERR_PTR(error);
1560
		}
A
Al Viro 已提交
1561 1562 1563 1564 1565 1566
	} else {
		old = inode->i_op->lookup(inode, dentry, flags);
		d_lookup_done(dentry);
		if (unlikely(old)) {
			dput(dentry);
			dentry = old;
1567 1568
		}
	}
1569
	return dentry;
L
Linus Torvalds 已提交
1570 1571
}

A
Al Viro 已提交
1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583
static struct dentry *lookup_slow(const struct qstr *name,
				  struct dentry *dir,
				  unsigned int flags)
{
	struct inode *inode = dir->d_inode;
	struct dentry *res;
	inode_lock_shared(inode);
	res = __lookup_slow(name, dir, flags);
	inode_unlock_shared(inode);
	return res;
}

1584 1585 1586
static inline int may_lookup(struct nameidata *nd)
{
	if (nd->flags & LOOKUP_RCU) {
1587
		int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1588
		if (err != -ECHILD || !try_to_unlazy(nd))
1589 1590
			return err;
	}
1591
	return inode_permission(nd->inode, MAY_EXEC);
1592 1593
}

1594 1595 1596 1597
static int reserve_stack(struct nameidata *nd, struct path *link, unsigned seq)
{
	if (unlikely(nd->total_link_count++ >= MAXSYMLINKS))
		return -ELOOP;
1598 1599 1600 1601 1602

	if (likely(nd->depth != EMBEDDED_LEVELS))
		return 0;
	if (likely(nd->stack != nd->internal))
		return 0;
1603
	if (likely(nd_alloc_stack(nd)))
1604
		return 0;
1605 1606 1607 1608

	if (nd->flags & LOOKUP_RCU) {
		// we need to grab link before we do unlazy.  And we can't skip
		// unlazy even if we fail to grab the link - cleanup needs it
1609
		bool grabbed_link = legitimize_path(nd, link, seq);
1610

1611
		if (!try_to_unlazy(nd) != 0 || !grabbed_link)
1612 1613 1614 1615
			return -ECHILD;

		if (nd_alloc_stack(nd))
			return 0;
1616
	}
1617
	return -ENOMEM;
1618 1619
}

1620 1621
enum {WALK_TRAILING = 1, WALK_MORE = 2, WALK_NOFOLLOW = 4};

1622
static const char *pick_link(struct nameidata *nd, struct path *link,
1623
		     struct inode *inode, unsigned seq, int flags)
1624
{
A
Al Viro 已提交
1625
	struct saved *last;
1626
	const char *res;
1627
	int error = reserve_stack(nd, link, seq);
1628

1629
	if (unlikely(error)) {
1630
		if (!(nd->flags & LOOKUP_RCU))
A
Al Viro 已提交
1631
			path_put(link);
1632
		return ERR_PTR(error);
1633
	}
1634
	last = nd->stack + nd->depth++;
A
Al Viro 已提交
1635
	last->link = *link;
1636
	clear_delayed_call(&last->done);
1637
	last->seq = seq;
1638

1639
	if (flags & WALK_TRAILING) {
1640 1641 1642 1643 1644
		error = may_follow_link(nd, inode);
		if (unlikely(error))
			return ERR_PTR(error);
	}

1645 1646
	if (unlikely(nd->flags & LOOKUP_NO_SYMLINKS) ||
			unlikely(link->mnt->mnt_flags & MNT_NOSYMFOLLOW))
1647 1648 1649 1650 1651 1652
		return ERR_PTR(-ELOOP);

	if (!(nd->flags & LOOKUP_RCU)) {
		touch_atime(&last->link);
		cond_resched();
	} else if (atime_needs_update(&last->link, inode)) {
1653
		if (!try_to_unlazy(nd))
1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669
			return ERR_PTR(-ECHILD);
		touch_atime(&last->link);
	}

	error = security_inode_follow_link(link->dentry, inode,
					   nd->flags & LOOKUP_RCU);
	if (unlikely(error))
		return ERR_PTR(error);

	res = READ_ONCE(inode->i_link);
	if (!res) {
		const char * (*get)(struct dentry *, struct inode *,
				struct delayed_call *);
		get = inode->i_op->get_link;
		if (nd->flags & LOOKUP_RCU) {
			res = get(NULL, inode, &last->done);
1670
			if (res == ERR_PTR(-ECHILD) && try_to_unlazy(nd))
1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691
				res = get(link->dentry, inode, &last->done);
		} else {
			res = get(link->dentry, inode, &last->done);
		}
		if (!res)
			goto all_done;
		if (IS_ERR(res))
			return res;
	}
	if (*res == '/') {
		error = nd_jump_root(nd);
		if (unlikely(error))
			return ERR_PTR(error);
		while (unlikely(*++res == '/'))
			;
	}
	if (*res)
		return res;
all_done: // pure jump
	put_link(nd);
	return NULL;
1692 1693
}

1694 1695 1696 1697 1698 1699
/*
 * Do we need to follow links? We _really_ want to be able
 * to do this check without having to look at inode->i_op,
 * so we keep a cache of "no, this doesn't need follow_link"
 * for the common case.
 */
1700
static const char *step_into(struct nameidata *nd, int flags,
A
Al Viro 已提交
1701
		     struct dentry *dentry, struct inode *inode, unsigned seq)
1702
{
A
Al Viro 已提交
1703 1704 1705 1706
	struct path path;
	int err = handle_mounts(nd, dentry, &path, &inode, &seq);

	if (err < 0)
1707
		return ERR_PTR(err);
A
Al Viro 已提交
1708
	if (likely(!d_is_symlink(path.dentry)) ||
1709
	   ((flags & WALK_TRAILING) && !(nd->flags & LOOKUP_FOLLOW)) ||
A
Al Viro 已提交
1710
	   (flags & WALK_NOFOLLOW)) {
1711
		/* not a symlink or should not follow */
1712 1713 1714 1715 1716 1717
		if (!(nd->flags & LOOKUP_RCU)) {
			dput(nd->path.dentry);
			if (nd->path.mnt != path.mnt)
				mntput(nd->path.mnt);
		}
		nd->path = path;
1718 1719
		nd->inode = inode;
		nd->seq = seq;
1720
		return NULL;
1721
	}
1722
	if (nd->flags & LOOKUP_RCU) {
1723
		/* make sure that d_is_symlink above matches inode */
A
Al Viro 已提交
1724
		if (read_seqcount_retry(&path.dentry->d_seq, seq))
1725
			return ERR_PTR(-ECHILD);
1726 1727 1728
	} else {
		if (path.mnt == nd->path.mnt)
			mntget(path.mnt);
1729
	}
1730
	return pick_link(nd, &path, inode, seq, flags);
1731 1732
}

1733 1734 1735
static struct dentry *follow_dotdot_rcu(struct nameidata *nd,
					struct inode **inodep,
					unsigned *seqp)
1736
{
A
Al Viro 已提交
1737
	struct dentry *parent, *old;
1738

A
Al Viro 已提交
1739 1740 1741
	if (path_equal(&nd->path, &nd->root))
		goto in_root;
	if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
A
Al Viro 已提交
1742
		struct path path;
1743
		unsigned seq;
A
Al Viro 已提交
1744 1745 1746
		if (!choose_mountpoint_rcu(real_mount(nd->path.mnt),
					   &nd->root, &path, &seq))
			goto in_root;
1747 1748 1749 1750 1751 1752 1753 1754
		if (unlikely(nd->flags & LOOKUP_NO_XDEV))
			return ERR_PTR(-ECHILD);
		nd->path = path;
		nd->inode = path.dentry->d_inode;
		nd->seq = seq;
		if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
			return ERR_PTR(-ECHILD);
		/* we know that mountpoint was pinned */
1755
	}
A
Al Viro 已提交
1756 1757 1758 1759 1760 1761 1762 1763 1764 1765
	old = nd->path.dentry;
	parent = old->d_parent;
	*inodep = parent->d_inode;
	*seqp = read_seqcount_begin(&parent->d_seq);
	if (unlikely(read_seqcount_retry(&old->d_seq, nd->seq)))
		return ERR_PTR(-ECHILD);
	if (unlikely(!path_connected(nd->path.mnt, parent)))
		return ERR_PTR(-ECHILD);
	return parent;
in_root:
1766 1767
	if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
		return ERR_PTR(-ECHILD);
1768 1769 1770
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-ECHILD);
	return NULL;
1771 1772
}

1773 1774 1775
static struct dentry *follow_dotdot(struct nameidata *nd,
				 struct inode **inodep,
				 unsigned *seqp)
1776
{
A
Al Viro 已提交
1777 1778 1779 1780 1781
	struct dentry *parent;

	if (path_equal(&nd->path, &nd->root))
		goto in_root;
	if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
1782 1783 1784 1785 1786
		struct path path;

		if (!choose_mountpoint(real_mount(nd->path.mnt),
				       &nd->root, &path))
			goto in_root;
1787 1788
		path_put(&nd->path);
		nd->path = path;
1789
		nd->inode = path.dentry->d_inode;
1790 1791
		if (unlikely(nd->flags & LOOKUP_NO_XDEV))
			return ERR_PTR(-EXDEV);
1792
	}
A
Al Viro 已提交
1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803
	/* rare case of legitimate dget_parent()... */
	parent = dget_parent(nd->path.dentry);
	if (unlikely(!path_connected(nd->path.mnt, parent))) {
		dput(parent);
		return ERR_PTR(-ENOENT);
	}
	*seqp = 0;
	*inodep = parent->d_inode;
	return parent;

in_root:
1804 1805 1806 1807
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-EXDEV);
	dget(nd->path.dentry);
	return NULL;
1808 1809
}

1810
static const char *handle_dots(struct nameidata *nd, int type)
1811 1812
{
	if (type == LAST_DOTDOT) {
1813
		const char *error = NULL;
1814 1815 1816
		struct dentry *parent;
		struct inode *inode;
		unsigned seq;
1817 1818

		if (!nd->root.mnt) {
1819
			error = ERR_PTR(set_root(nd));
1820 1821 1822 1823
			if (error)
				return error;
		}
		if (nd->flags & LOOKUP_RCU)
1824
			parent = follow_dotdot_rcu(nd, &inode, &seq);
1825
		else
1826 1827 1828 1829 1830 1831 1832 1833 1834 1835
			parent = follow_dotdot(nd, &inode, &seq);
		if (IS_ERR(parent))
			return ERR_CAST(parent);
		if (unlikely(!parent))
			error = step_into(nd, WALK_NOFOLLOW,
					 nd->path.dentry, nd->inode, nd->seq);
		else
			error = step_into(nd, WALK_NOFOLLOW,
					 parent, inode, seq);
		if (unlikely(error))
1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846
			return error;

		if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) {
			/*
			 * If there was a racing rename or mount along our
			 * path, then we can't be sure that ".." hasn't jumped
			 * above nd->root (and so userspace should retry or use
			 * some fallback).
			 */
			smp_rmb();
			if (unlikely(__read_seqcount_retry(&mount_lock.seqcount, nd->m_seq)))
1847
				return ERR_PTR(-EAGAIN);
1848
			if (unlikely(__read_seqcount_retry(&rename_lock.seqcount, nd->r_seq)))
1849
				return ERR_PTR(-EAGAIN);
1850 1851
		}
	}
1852
	return NULL;
1853 1854
}

1855
static const char *walk_component(struct nameidata *nd, int flags)
1856
{
1857
	struct dentry *dentry;
1858
	struct inode *inode;
1859
	unsigned seq;
1860 1861 1862 1863 1864
	/*
	 * "." and ".." are special - ".." especially so because it has
	 * to be able to know about the current root directory and
	 * parent relationships.
	 */
1865
	if (unlikely(nd->last_type != LAST_NORM)) {
A
Al Viro 已提交
1866
		if (!(flags & WALK_MORE) && nd->depth)
1867
			put_link(nd);
1868
		return handle_dots(nd, nd->last_type);
1869
	}
1870 1871
	dentry = lookup_fast(nd, &inode, &seq);
	if (IS_ERR(dentry))
1872
		return ERR_CAST(dentry);
1873
	if (unlikely(!dentry)) {
1874 1875
		dentry = lookup_slow(&nd->last, nd->path.dentry, nd->flags);
		if (IS_ERR(dentry))
1876
			return ERR_CAST(dentry);
1877
	}
1878 1879
	if (!(flags & WALK_MORE) && nd->depth)
		put_link(nd);
1880
	return step_into(nd, flags, dentry, inode, seq);
1881 1882
}

1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901
/*
 * We can do the critical dentry name comparison and hashing
 * operations one word at a time, but we are limited to:
 *
 * - Architectures with fast unaligned word accesses. We could
 *   do a "get_unaligned()" if this helps and is sufficiently
 *   fast.
 *
 * - non-CONFIG_DEBUG_PAGEALLOC configurations (so that we
 *   do not trap on the (extremely unlikely) case of a page
 *   crossing operation.
 *
 * - Furthermore, we need an efficient 64-bit compile for the
 *   64-bit case in order to generate the "number of bytes in
 *   the final mask". Again, that could be replaced with a
 *   efficient population count instruction or similar.
 */
#ifdef CONFIG_DCACHE_WORD_ACCESS

1902
#include <asm/word-at-a-time.h>
1903

1904
#ifdef HASH_MIX
1905

1906
/* Architecture provides HASH_MIX and fold_hash() in <asm/hash.h> */
1907

1908
#elif defined(CONFIG_64BIT)
1909
/*
1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936
 * Register pressure in the mixing function is an issue, particularly
 * on 32-bit x86, but almost any function requires one state value and
 * one temporary.  Instead, use a function designed for two state values
 * and no temporaries.
 *
 * This function cannot create a collision in only two iterations, so
 * we have two iterations to achieve avalanche.  In those two iterations,
 * we have six layers of mixing, which is enough to spread one bit's
 * influence out to 2^6 = 64 state bits.
 *
 * Rotate constants are scored by considering either 64 one-bit input
 * deltas or 64*63/2 = 2016 two-bit input deltas, and finding the
 * probability of that delta causing a change to each of the 128 output
 * bits, using a sample of random initial states.
 *
 * The Shannon entropy of the computed probabilities is then summed
 * to produce a score.  Ideally, any input change has a 50% chance of
 * toggling any given output bit.
 *
 * Mixing scores (in bits) for (12,45):
 * Input delta: 1-bit      2-bit
 * 1 round:     713.3    42542.6
 * 2 rounds:   2753.7   140389.8
 * 3 rounds:   5954.1   233458.2
 * 4 rounds:   7862.6   256672.2
 * Perfect:    8192     258048
 *            (64*128) (64*63/2 * 128)
1937
 */
1938 1939 1940 1941 1942
#define HASH_MIX(x, y, a)	\
	(	x ^= (a),	\
	y ^= x,	x = rol64(x,12),\
	x += y,	y = rol64(y,45),\
	y *= 9			)
1943

1944
/*
1945 1946 1947
 * Fold two longs into one 32-bit hash value.  This must be fast, but
 * latency isn't quite as critical, as there is a fair bit of additional
 * work done before the hash value is used.
1948
 */
1949
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1950
{
1951 1952 1953
	y ^= x * GOLDEN_RATIO_64;
	y *= GOLDEN_RATIO_64;
	return y >> 32;
1954 1955
}

1956 1957
#else	/* 32-bit case */

1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972
/*
 * Mixing scores (in bits) for (7,20):
 * Input delta: 1-bit      2-bit
 * 1 round:     330.3     9201.6
 * 2 rounds:   1246.4    25475.4
 * 3 rounds:   1907.1    31295.1
 * 4 rounds:   2042.3    31718.6
 * Perfect:    2048      31744
 *            (32*64)   (32*31/2 * 64)
 */
#define HASH_MIX(x, y, a)	\
	(	x ^= (a),	\
	y ^= x,	x = rol32(x, 7),\
	x += y,	y = rol32(y,20),\
	y *= 9			)
1973

1974
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1975
{
1976 1977
	/* Use arch-optimized multiply if one exists */
	return __hash_32(y ^ __hash_32(x));
1978 1979
}

1980 1981
#endif

1982 1983 1984 1985 1986 1987 1988
/*
 * Return the hash of a string of known length.  This is carfully
 * designed to match hash_name(), which is the more critical function.
 * In particular, we must end by hashing a final word containing 0..7
 * payload bytes, to match the way that hash_name() iterates until it
 * finds the delimiter after the name.
 */
1989
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
1990
{
1991
	unsigned long a, x = 0, y = (unsigned long)salt;
1992 1993

	for (;;) {
1994 1995
		if (!len)
			goto done;
1996
		a = load_unaligned_zeropad(name);
1997 1998
		if (len < sizeof(unsigned long))
			break;
1999
		HASH_MIX(x, y, a);
2000 2001 2002
		name += sizeof(unsigned long);
		len -= sizeof(unsigned long);
	}
2003
	x ^= a & bytemask_from_count(len);
2004
done:
2005
	return fold_hash(x, y);
2006 2007 2008
}
EXPORT_SYMBOL(full_name_hash);

2009
/* Return the "hash_len" (hash and length) of a null-terminated string */
2010
u64 hashlen_string(const void *salt, const char *name)
2011
{
2012 2013
	unsigned long a = 0, x = 0, y = (unsigned long)salt;
	unsigned long adata, mask, len;
2014 2015
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;

2016 2017 2018
	len = 0;
	goto inside;

2019
	do {
2020
		HASH_MIX(x, y, a);
2021
		len += sizeof(unsigned long);
2022
inside:
2023 2024 2025 2026 2027
		a = load_unaligned_zeropad(name+len);
	} while (!has_zero(a, &adata, &constants));

	adata = prep_zero_mask(a, adata, &constants);
	mask = create_zero_mask(adata);
2028
	x ^= a & zero_bytemask(mask);
2029

2030
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2031 2032 2033
}
EXPORT_SYMBOL(hashlen_string);

2034 2035
/*
 * Calculate the length and hash of the path component, and
2036
 * return the "hash_len" as the result.
2037
 */
2038
static inline u64 hash_name(const void *salt, const char *name)
2039
{
2040 2041
	unsigned long a = 0, b, x = 0, y = (unsigned long)salt;
	unsigned long adata, bdata, mask, len;
2042
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
2043

2044 2045 2046
	len = 0;
	goto inside;

2047
	do {
2048
		HASH_MIX(x, y, a);
2049
		len += sizeof(unsigned long);
2050
inside:
2051
		a = load_unaligned_zeropad(name+len);
2052 2053 2054 2055 2056 2057
		b = a ^ REPEAT_BYTE('/');
	} while (!(has_zero(a, &adata, &constants) | has_zero(b, &bdata, &constants)));

	adata = prep_zero_mask(a, adata, &constants);
	bdata = prep_zero_mask(b, bdata, &constants);
	mask = create_zero_mask(adata | bdata);
2058
	x ^= a & zero_bytemask(mask);
2059

2060
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2061 2062
}

2063
#else	/* !CONFIG_DCACHE_WORD_ACCESS: Slow, byte-at-a-time version */
2064

2065
/* Return the hash of a string of known length */
2066
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
L
Linus Torvalds 已提交
2067
{
2068
	unsigned long hash = init_name_hash(salt);
L
Linus Torvalds 已提交
2069
	while (len--)
2070
		hash = partial_name_hash((unsigned char)*name++, hash);
L
Linus Torvalds 已提交
2071 2072
	return end_name_hash(hash);
}
2073
EXPORT_SYMBOL(full_name_hash);
L
Linus Torvalds 已提交
2074

2075
/* Return the "hash_len" (hash and length) of a null-terminated string */
2076
u64 hashlen_string(const void *salt, const char *name)
2077
{
2078
	unsigned long hash = init_name_hash(salt);
2079 2080 2081
	unsigned long len = 0, c;

	c = (unsigned char)*name;
2082
	while (c) {
2083 2084 2085
		len++;
		hash = partial_name_hash(c, hash);
		c = (unsigned char)name[len];
2086
	}
2087 2088
	return hashlen_create(end_name_hash(hash), len);
}
2089
EXPORT_SYMBOL(hashlen_string);
2090

2091 2092 2093 2094
/*
 * We know there's a real path component here of at least
 * one character.
 */
2095
static inline u64 hash_name(const void *salt, const char *name)
2096
{
2097
	unsigned long hash = init_name_hash(salt);
2098 2099 2100 2101 2102 2103 2104 2105
	unsigned long len = 0, c;

	c = (unsigned char)*name;
	do {
		len++;
		hash = partial_name_hash(c, hash);
		c = (unsigned char)name[len];
	} while (c && c != '/');
2106
	return hashlen_create(end_name_hash(hash), len);
2107 2108
}

2109 2110
#endif

L
Linus Torvalds 已提交
2111 2112
/*
 * Name resolution.
2113 2114
 * This is the basic name resolution function, turning a pathname into
 * the final dentry. We expect 'base' to be positive and a directory.
L
Linus Torvalds 已提交
2115
 *
2116 2117
 * Returns 0 and nd will have valid dentry and mnt on success.
 * Returns error and drops reference to input namei data on failure.
L
Linus Torvalds 已提交
2118
 */
2119
static int link_path_walk(const char *name, struct nameidata *nd)
L
Linus Torvalds 已提交
2120
{
2121
	int depth = 0; // depth <= nd->depth
L
Linus Torvalds 已提交
2122
	int err;
A
Al Viro 已提交
2123

2124
	nd->last_type = LAST_ROOT;
2125
	nd->flags |= LOOKUP_PARENT;
2126 2127
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
2128 2129 2130
	while (*name=='/')
		name++;
	if (!*name)
2131
		return 0;
L
Linus Torvalds 已提交
2132 2133 2134

	/* At this point we know we have a real path component. */
	for(;;) {
2135
		const char *link;
2136
		u64 hash_len;
A
Al Viro 已提交
2137
		int type;
L
Linus Torvalds 已提交
2138

2139
		err = may_lookup(nd);
2140
		if (err)
2141
			return err;
L
Linus Torvalds 已提交
2142

2143
		hash_len = hash_name(nd->path.dentry, name);
L
Linus Torvalds 已提交
2144

A
Al Viro 已提交
2145
		type = LAST_NORM;
2146
		if (name[0] == '.') switch (hashlen_len(hash_len)) {
A
Al Viro 已提交
2147
			case 2:
2148
				if (name[1] == '.') {
A
Al Viro 已提交
2149
					type = LAST_DOTDOT;
2150
					nd->state |= ND_JUMPED;
A
Al Viro 已提交
2151
				}
A
Al Viro 已提交
2152 2153 2154 2155
				break;
			case 1:
				type = LAST_DOT;
		}
2156 2157
		if (likely(type == LAST_NORM)) {
			struct dentry *parent = nd->path.dentry;
2158
			nd->state &= ~ND_JUMPED;
2159
			if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
2160
				struct qstr this = { { .hash_len = hash_len }, .name = name };
2161
				err = parent->d_op->d_hash(parent, &this);
2162
				if (err < 0)
2163
					return err;
2164 2165
				hash_len = this.hash_len;
				name = this.name;
2166 2167
			}
		}
A
Al Viro 已提交
2168

2169 2170
		nd->last.hash_len = hash_len;
		nd->last.name = name;
2171 2172
		nd->last_type = type;

2173 2174
		name += hashlen_len(hash_len);
		if (!*name)
2175
			goto OK;
2176 2177 2178 2179 2180
		/*
		 * If it wasn't NUL, we know it was '/'. Skip that
		 * slash, and continue until no more slashes.
		 */
		do {
2181 2182
			name++;
		} while (unlikely(*name == '/'));
2183 2184
		if (unlikely(!*name)) {
OK:
2185
			/* pathname or trailing symlink, done */
2186
			if (!depth) {
2187 2188
				nd->dir_uid = nd->inode->i_uid;
				nd->dir_mode = nd->inode->i_mode;
2189
				nd->flags &= ~LOOKUP_PARENT;
2190
				return 0;
2191
			}
2192
			/* last component of nested symlink */
2193
			name = nd->stack[--depth].name;
2194
			link = walk_component(nd, 0);
A
Al Viro 已提交
2195 2196
		} else {
			/* not the last component */
2197
			link = walk_component(nd, WALK_MORE);
2198
		}
2199 2200 2201 2202
		if (unlikely(link)) {
			if (IS_ERR(link))
				return PTR_ERR(link);
			/* a symlink to follow */
2203
			nd->stack[depth++].name = name;
2204 2205
			name = link;
			continue;
N
Nick Piggin 已提交
2206
		}
2207 2208
		if (unlikely(!d_can_lookup(nd->path.dentry))) {
			if (nd->flags & LOOKUP_RCU) {
2209
				if (!try_to_unlazy(nd))
2210 2211
					return -ECHILD;
			}
2212
			return -ENOTDIR;
2213
		}
L
Linus Torvalds 已提交
2214 2215 2216
	}
}

2217
/* must be paired with terminate_walk() */
2218
static const char *path_init(struct nameidata *nd, unsigned flags)
N
Nick Piggin 已提交
2219
{
2220
	int error;
2221
	const char *s = nd->name->name;
N
Nick Piggin 已提交
2222

J
Jens Axboe 已提交
2223 2224 2225 2226
	/* LOOKUP_CACHED requires RCU, ask caller to retry */
	if ((flags & (LOOKUP_RCU | LOOKUP_CACHED)) == LOOKUP_CACHED)
		return ERR_PTR(-EAGAIN);

2227 2228
	if (!*s)
		flags &= ~LOOKUP_RCU;
2229 2230
	if (flags & LOOKUP_RCU)
		rcu_read_lock();
2231

2232 2233
	nd->flags = flags;
	nd->state |= ND_JUMPED;
N
Nick Piggin 已提交
2234
	nd->depth = 0;
2235 2236 2237 2238 2239

	nd->m_seq = __read_seqcount_begin(&mount_lock.seqcount);
	nd->r_seq = __read_seqcount_begin(&rename_lock.seqcount);
	smp_rmb();

2240
	if (nd->state & ND_ROOT_PRESET) {
2241 2242
		struct dentry *root = nd->root.dentry;
		struct inode *inode = root->d_inode;
2243 2244
		if (*s && unlikely(!d_can_lookup(root)))
			return ERR_PTR(-ENOTDIR);
2245 2246 2247
		nd->path = nd->root;
		nd->inode = inode;
		if (flags & LOOKUP_RCU) {
2248
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
2249
			nd->root_seq = nd->seq;
2250 2251 2252
		} else {
			path_get(&nd->path);
		}
2253
		return s;
2254 2255
	}

N
Nick Piggin 已提交
2256 2257
	nd->root.mnt = NULL;

2258 2259
	/* Absolute pathname -- fetch the root (LOOKUP_IN_ROOT uses nd->dfd). */
	if (*s == '/' && !(flags & LOOKUP_IN_ROOT)) {
2260 2261 2262 2263
		error = nd_jump_root(nd);
		if (unlikely(error))
			return ERR_PTR(error);
		return s;
2264 2265 2266 2267
	}

	/* Relative pathname -- get the starting-point it is relative to. */
	if (nd->dfd == AT_FDCWD) {
A
Al Viro 已提交
2268 2269 2270
		if (flags & LOOKUP_RCU) {
			struct fs_struct *fs = current->fs;
			unsigned seq;
N
Nick Piggin 已提交
2271

A
Al Viro 已提交
2272 2273 2274
			do {
				seq = read_seqcount_begin(&fs->seq);
				nd->path = fs->pwd;
2275
				nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2276 2277 2278 2279
				nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
			} while (read_seqcount_retry(&fs->seq, seq));
		} else {
			get_fs_pwd(current->fs, &nd->path);
2280
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2281
		}
N
Nick Piggin 已提交
2282
	} else {
2283
		/* Caller must check execute permissions on the starting path component */
2284
		struct fd f = fdget_raw(nd->dfd);
N
Nick Piggin 已提交
2285 2286
		struct dentry *dentry;

2287
		if (!f.file)
2288
			return ERR_PTR(-EBADF);
N
Nick Piggin 已提交
2289

2290
		dentry = f.file->f_path.dentry;
N
Nick Piggin 已提交
2291

2292 2293 2294
		if (*s && unlikely(!d_can_lookup(dentry))) {
			fdput(f);
			return ERR_PTR(-ENOTDIR);
A
Al Viro 已提交
2295
		}
N
Nick Piggin 已提交
2296

2297
		nd->path = f.file->f_path;
A
Al Viro 已提交
2298
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
2299 2300
			nd->inode = nd->path.dentry->d_inode;
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
A
Al Viro 已提交
2301
		} else {
2302
			path_get(&nd->path);
A
Al Viro 已提交
2303
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2304
		}
A
Al Viro 已提交
2305
		fdput(f);
N
Nick Piggin 已提交
2306
	}
2307

2308 2309 2310 2311 2312 2313 2314
	/* For scoped-lookups we need to set the root to the dirfd as well. */
	if (flags & LOOKUP_IS_SCOPED) {
		nd->root = nd->path;
		if (flags & LOOKUP_RCU) {
			nd->root_seq = nd->seq;
		} else {
			path_get(&nd->root);
2315
			nd->state |= ND_ROOT_GRABBED;
2316 2317 2318
		}
	}
	return s;
2319 2320
}

2321
static inline const char *lookup_last(struct nameidata *nd)
2322 2323 2324 2325
{
	if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
		nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;

2326
	return walk_component(nd, WALK_TRAILING);
2327 2328
}

2329 2330
static int handle_lookup_down(struct nameidata *nd)
{
2331
	if (!(nd->flags & LOOKUP_RCU))
2332
		dget(nd->path.dentry);
2333 2334
	return PTR_ERR(step_into(nd, WALK_NOFOLLOW,
			nd->path.dentry, nd->inode, nd->seq));
2335 2336
}

2337
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2338
static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path)
2339
{
2340
	const char *s = path_init(nd, flags);
2341
	int err;
N
Nick Piggin 已提交
2342

2343
	if (unlikely(flags & LOOKUP_DOWN) && !IS_ERR(s)) {
2344
		err = handle_lookup_down(nd);
2345 2346
		if (unlikely(err < 0))
			s = ERR_PTR(err);
2347 2348
	}

2349 2350 2351
	while (!(err = link_path_walk(s, nd)) &&
	       (s = lookup_last(nd)) != NULL)
		;
2352 2353
	if (!err && unlikely(nd->flags & LOOKUP_MOUNTPOINT)) {
		err = handle_lookup_down(nd);
2354
		nd->state &= ~ND_JUMPED; // no d_weak_revalidate(), please...
2355
	}
2356 2357
	if (!err)
		err = complete_walk(nd);
2358

2359 2360
	if (!err && nd->flags & LOOKUP_DIRECTORY)
		if (!d_can_lookup(nd->path.dentry))
A
Al Viro 已提交
2361
			err = -ENOTDIR;
2362 2363 2364 2365 2366 2367
	if (!err) {
		*path = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2368
	return err;
A
Al Viro 已提交
2369
}
N
Nick Piggin 已提交
2370

2371 2372
int filename_lookup(int dfd, struct filename *name, unsigned flags,
		    struct path *path, struct path *root)
A
Al Viro 已提交
2373
{
2374
	int retval;
2375
	struct nameidata nd;
2376 2377
	if (IS_ERR(name))
		return PTR_ERR(name);
2378
	set_nameidata(&nd, dfd, name);
2379 2380
	if (unlikely(root)) {
		nd.root = *root;
2381
		nd.state = ND_ROOT_PRESET;
2382
	}
2383
	retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2384
	if (unlikely(retval == -ECHILD))
2385
		retval = path_lookupat(&nd, flags, path);
A
Al Viro 已提交
2386
	if (unlikely(retval == -ESTALE))
2387
		retval = path_lookupat(&nd, flags | LOOKUP_REVAL, path);
N
Nick Piggin 已提交
2388

2389
	if (likely(!retval))
2390 2391
		audit_inode(name, path->dentry,
			    flags & LOOKUP_MOUNTPOINT ? AUDIT_INODE_NOEVAL : 0);
2392
	restore_nameidata();
2393
	putname(name);
2394
	return retval;
L
Linus Torvalds 已提交
2395 2396
}

2397
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2398
static int path_parentat(struct nameidata *nd, unsigned flags,
2399
				struct path *parent)
2400
{
2401
	const char *s = path_init(nd, flags);
2402
	int err = link_path_walk(s, nd);
2403 2404
	if (!err)
		err = complete_walk(nd);
2405 2406 2407 2408 2409 2410
	if (!err) {
		*parent = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2411 2412 2413
	return err;
}

2414
static struct filename *filename_parentat(int dfd, struct filename *name,
2415 2416
				unsigned int flags, struct path *parent,
				struct qstr *last, int *type)
2417 2418
{
	int retval;
2419
	struct nameidata nd;
2420

2421 2422
	if (IS_ERR(name))
		return name;
2423
	set_nameidata(&nd, dfd, name);
2424
	retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
2425
	if (unlikely(retval == -ECHILD))
2426
		retval = path_parentat(&nd, flags, parent);
2427
	if (unlikely(retval == -ESTALE))
2428
		retval = path_parentat(&nd, flags | LOOKUP_REVAL, parent);
2429 2430 2431
	if (likely(!retval)) {
		*last = nd.last;
		*type = nd.last_type;
2432
		audit_inode(name, parent->dentry, AUDIT_INODE_PARENT);
2433 2434 2435
	} else {
		putname(name);
		name = ERR_PTR(retval);
2436
	}
2437
	restore_nameidata();
2438
	return name;
2439 2440
}

A
Al Viro 已提交
2441 2442
/* does lookup, returns the object with parent locked */
struct dentry *kern_path_locked(const char *name, struct path *path)
2443
{
2444 2445
	struct filename *filename;
	struct dentry *d;
2446 2447
	struct qstr last;
	int type;
2448

2449 2450
	filename = filename_parentat(AT_FDCWD, getname_kernel(name), 0, path,
				    &last, &type);
2451 2452
	if (IS_ERR(filename))
		return ERR_CAST(filename);
2453
	if (unlikely(type != LAST_NORM)) {
2454
		path_put(path);
2455 2456
		putname(filename);
		return ERR_PTR(-EINVAL);
A
Al Viro 已提交
2457
	}
A
Al Viro 已提交
2458
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
2459
	d = __lookup_hash(&last, path->dentry, 0);
A
Al Viro 已提交
2460
	if (IS_ERR(d)) {
A
Al Viro 已提交
2461
		inode_unlock(path->dentry->d_inode);
2462
		path_put(path);
A
Al Viro 已提交
2463
	}
2464
	putname(filename);
A
Al Viro 已提交
2465
	return d;
2466 2467
}

A
Al Viro 已提交
2468 2469
int kern_path(const char *name, unsigned int flags, struct path *path)
{
2470 2471
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags, path, NULL);
A
Al Viro 已提交
2472
}
2473
EXPORT_SYMBOL(kern_path);
A
Al Viro 已提交
2474

2475 2476 2477 2478 2479 2480
/**
 * vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair
 * @dentry:  pointer to dentry of the base directory
 * @mnt: pointer to vfs mount of the base directory
 * @name: pointer to file name
 * @flags: lookup flags
2481
 * @path: pointer to struct path to fill
2482 2483 2484
 */
int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
		    const char *name, unsigned int flags,
2485
		    struct path *path)
2486
{
2487 2488
	struct path root = {.mnt = mnt, .dentry = dentry};
	/* the first argument of filename_lookup() is ignored with root */
2489 2490
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags , path, &root);
2491
}
2492
EXPORT_SYMBOL(vfs_path_lookup);
2493

2494 2495
static int lookup_one_len_common(const char *name, struct dentry *base,
				 int len, struct qstr *this)
2496
{
2497 2498 2499
	this->name = name;
	this->len = len;
	this->hash = full_name_hash(base, name, len);
A
Al Viro 已提交
2500
	if (!len)
2501
		return -EACCES;
A
Al Viro 已提交
2502

A
Al Viro 已提交
2503 2504
	if (unlikely(name[0] == '.')) {
		if (len < 2 || (len == 2 && name[1] == '.'))
2505
			return -EACCES;
A
Al Viro 已提交
2506 2507
	}

A
Al Viro 已提交
2508
	while (len--) {
2509
		unsigned int c = *(const unsigned char *)name++;
A
Al Viro 已提交
2510
		if (c == '/' || c == '\0')
2511
			return -EACCES;
A
Al Viro 已提交
2512
	}
2513 2514 2515 2516 2517
	/*
	 * See if the low-level filesystem might want
	 * to use its own hash..
	 */
	if (base->d_flags & DCACHE_OP_HASH) {
2518
		int err = base->d_op->d_hash(base, this);
2519
		if (err < 0)
2520
			return err;
2521
	}
2522

2523 2524 2525
	return inode_permission(base->d_inode, MAY_EXEC);
}

2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554
/**
 * try_lookup_one_len - filesystem helper to lookup single pathname component
 * @name:	pathname component to lookup
 * @base:	base directory to lookup from
 * @len:	maximum length @len should be interpreted to
 *
 * Look up a dentry by name in the dcache, returning NULL if it does not
 * currently exist.  The function does not try to create a dentry.
 *
 * Note that this routine is purely a helper for filesystem usage and should
 * not be called by generic code.
 *
 * The caller must hold base->i_mutex.
 */
struct dentry *try_lookup_one_len(const char *name, struct dentry *base, int len)
{
	struct qstr this;
	int err;

	WARN_ON_ONCE(!inode_is_locked(base->d_inode));

	err = lookup_one_len_common(name, base, len, &this);
	if (err)
		return ERR_PTR(err);

	return lookup_dcache(&this, base, 0);
}
EXPORT_SYMBOL(try_lookup_one_len);

2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567
/**
 * lookup_one_len - filesystem helper to lookup single pathname component
 * @name:	pathname component to lookup
 * @base:	base directory to lookup from
 * @len:	maximum length @len should be interpreted to
 *
 * Note that this routine is purely a helper for filesystem usage and should
 * not be called by generic code.
 *
 * The caller must hold base->i_mutex.
 */
struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
{
2568
	struct dentry *dentry;
2569 2570 2571 2572 2573 2574
	struct qstr this;
	int err;

	WARN_ON_ONCE(!inode_is_locked(base->d_inode));

	err = lookup_one_len_common(name, base, len, &this);
2575 2576 2577
	if (err)
		return ERR_PTR(err);

2578 2579
	dentry = lookup_dcache(&this, base, 0);
	return dentry ? dentry : __lookup_slow(&this, base, 0);
2580
}
2581
EXPORT_SYMBOL(lookup_one_len);
2582

2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599
/**
 * lookup_one_len_unlocked - filesystem helper to lookup single pathname component
 * @name:	pathname component to lookup
 * @base:	base directory to lookup from
 * @len:	maximum length @len should be interpreted to
 *
 * Note that this routine is purely a helper for filesystem usage and should
 * not be called by generic code.
 *
 * Unlike lookup_one_len, it should be called without the parent
 * i_mutex held, and will take the i_mutex itself if necessary.
 */
struct dentry *lookup_one_len_unlocked(const char *name,
				       struct dentry *base, int len)
{
	struct qstr this;
	int err;
2600
	struct dentry *ret;
2601

2602
	err = lookup_one_len_common(name, base, len, &this);
2603 2604 2605
	if (err)
		return ERR_PTR(err);

2606 2607 2608 2609
	ret = lookup_dcache(&this, base, 0);
	if (!ret)
		ret = lookup_slow(&this, base, 0);
	return ret;
2610 2611 2612
}
EXPORT_SYMBOL(lookup_one_len_unlocked);

A
Al Viro 已提交
2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624
/*
 * Like lookup_one_len_unlocked(), except that it yields ERR_PTR(-ENOENT)
 * on negatives.  Returns known positive or ERR_PTR(); that's what
 * most of the users want.  Note that pinned negative with unlocked parent
 * _can_ become positive at any time, so callers of lookup_one_len_unlocked()
 * need to be very careful; pinned positives have ->d_inode stable, so
 * this one avoids such problems.
 */
struct dentry *lookup_positive_unlocked(const char *name,
				       struct dentry *base, int len)
{
	struct dentry *ret = lookup_one_len_unlocked(name, base, len);
2625
	if (!IS_ERR(ret) && d_flags_negative(smp_load_acquire(&ret->d_flags))) {
A
Al Viro 已提交
2626 2627 2628 2629 2630 2631 2632
		dput(ret);
		ret = ERR_PTR(-ENOENT);
	}
	return ret;
}
EXPORT_SYMBOL(lookup_positive_unlocked);

2633 2634 2635 2636 2637 2638
#ifdef CONFIG_UNIX98_PTYS
int path_pts(struct path *path)
{
	/* Find something mounted on "pts" in the same directory as
	 * the input path.
	 */
2639 2640
	struct dentry *parent = dget_parent(path->dentry);
	struct dentry *child;
A
Al Viro 已提交
2641
	struct qstr this = QSTR_INIT("pts", 3);
2642

2643 2644
	if (unlikely(!path_connected(path->mnt, parent))) {
		dput(parent);
2645
		return -ENOENT;
2646
	}
2647 2648
	dput(path->dentry);
	path->dentry = parent;
2649 2650 2651 2652 2653 2654
	child = d_hash_and_lookup(parent, &this);
	if (!child)
		return -ENOENT;

	path->dentry = child;
	dput(parent);
A
Al Viro 已提交
2655
	follow_down(path);
2656 2657 2658 2659
	return 0;
}
#endif

2660 2661
int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
		 struct path *path, int *empty)
L
Linus Torvalds 已提交
2662
{
2663 2664
	return filename_lookup(dfd, getname_flags(name, flags, empty),
			       flags, path, NULL);
L
Linus Torvalds 已提交
2665
}
2666
EXPORT_SYMBOL(user_path_at_empty);
2667

M
Miklos Szeredi 已提交
2668
int __check_sticky(struct inode *dir, struct inode *inode)
L
Linus Torvalds 已提交
2669
{
2670
	kuid_t fsuid = current_fsuid();
2671

2672
	if (uid_eq(inode->i_uid, fsuid))
L
Linus Torvalds 已提交
2673
		return 0;
2674
	if (uid_eq(dir->i_uid, fsuid))
L
Linus Torvalds 已提交
2675
		return 0;
2676
	return !capable_wrt_inode_uidgid(inode, CAP_FOWNER);
L
Linus Torvalds 已提交
2677
}
M
Miklos Szeredi 已提交
2678
EXPORT_SYMBOL(__check_sticky);
L
Linus Torvalds 已提交
2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692

/*
 *	Check whether we can remove a link victim from directory dir, check
 *  whether the type of victim is right.
 *  1. We can't do it if dir is read-only (done in permission())
 *  2. We should have write and exec permissions on dir
 *  3. We can't remove anything from append-only dir
 *  4. We can't do anything with immutable dir (done in permission())
 *  5. If the sticky bit on dir is set we should either
 *	a. be owner of dir, or
 *	b. be owner of victim, or
 *	c. have CAP_FOWNER capability
 *  6. If the victim is append-only or immutable we can't do antyhing with
 *     links pointing to it.
2693 2694 2695 2696 2697
 *  7. If the victim has an unknown uid or gid we can't change the inode.
 *  8. If we were asked to remove a directory and victim isn't one - ENOTDIR.
 *  9. If we were asked to remove a non-directory and victim isn't one - EISDIR.
 * 10. We can't remove a root or mountpoint.
 * 11. We don't allow removal of NFS sillyrenamed files; it's handled by
L
Linus Torvalds 已提交
2698 2699
 *     nfs_async_unlink().
 */
2700
static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
L
Linus Torvalds 已提交
2701
{
2702
	struct inode *inode = d_backing_inode(victim);
L
Linus Torvalds 已提交
2703 2704
	int error;

2705
	if (d_is_negative(victim))
L
Linus Torvalds 已提交
2706
		return -ENOENT;
2707
	BUG_ON(!inode);
L
Linus Torvalds 已提交
2708 2709

	BUG_ON(victim->d_parent->d_inode != dir);
2710 2711 2712 2713 2714

	/* Inode writeback is not safe when the uid or gid are invalid. */
	if (!uid_valid(inode->i_uid) || !gid_valid(inode->i_gid))
		return -EOVERFLOW;

2715
	audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
L
Linus Torvalds 已提交
2716

2717
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2718 2719 2720 2721
	if (error)
		return error;
	if (IS_APPEND(dir))
		return -EPERM;
2722 2723

	if (check_sticky(dir, inode) || IS_APPEND(inode) ||
2724
	    IS_IMMUTABLE(inode) || IS_SWAPFILE(inode) || HAS_UNMAPPED_ID(inode))
L
Linus Torvalds 已提交
2725 2726
		return -EPERM;
	if (isdir) {
M
Miklos Szeredi 已提交
2727
		if (!d_is_dir(victim))
L
Linus Torvalds 已提交
2728 2729 2730
			return -ENOTDIR;
		if (IS_ROOT(victim))
			return -EBUSY;
M
Miklos Szeredi 已提交
2731
	} else if (d_is_dir(victim))
L
Linus Torvalds 已提交
2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744
		return -EISDIR;
	if (IS_DEADDIR(dir))
		return -ENOENT;
	if (victim->d_flags & DCACHE_NFSFS_RENAMED)
		return -EBUSY;
	return 0;
}

/*	Check whether we can create an object with dentry child in directory
 *  dir.
 *  1. We can't do it if child already exists (open has special treatment for
 *     this case, but since we are inlined it's OK)
 *  2. We can't do it if dir is read-only (done in permission())
2745 2746 2747
 *  3. We can't do it if the fs can't represent the fsuid or fsgid.
 *  4. We should have write and exec permissions on dir
 *  5. We can't do it if dir is immutable (done in permission())
L
Linus Torvalds 已提交
2748
 */
2749
static inline int may_create(struct inode *dir, struct dentry *child)
L
Linus Torvalds 已提交
2750
{
2751
	struct user_namespace *s_user_ns;
2752
	audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
L
Linus Torvalds 已提交
2753 2754 2755 2756
	if (child->d_inode)
		return -EEXIST;
	if (IS_DEADDIR(dir))
		return -ENOENT;
2757 2758 2759 2760
	s_user_ns = dir->i_sb->s_user_ns;
	if (!kuid_has_mapping(s_user_ns, current_fsuid()) ||
	    !kgid_has_mapping(s_user_ns, current_fsgid()))
		return -EOVERFLOW;
2761
	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2762 2763 2764 2765 2766 2767 2768 2769 2770 2771
}

/*
 * p1 and p2 should be directories on the same fs.
 */
struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
{
	struct dentry *p;

	if (p1 == p2) {
A
Al Viro 已提交
2772
		inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
L
Linus Torvalds 已提交
2773 2774 2775
		return NULL;
	}

2776
	mutex_lock(&p1->d_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2777

2778 2779
	p = d_ancestor(p2, p1);
	if (p) {
A
Al Viro 已提交
2780 2781
		inode_lock_nested(p2->d_inode, I_MUTEX_PARENT);
		inode_lock_nested(p1->d_inode, I_MUTEX_CHILD);
2782
		return p;
L
Linus Torvalds 已提交
2783 2784
	}

2785 2786
	p = d_ancestor(p1, p2);
	if (p) {
A
Al Viro 已提交
2787 2788
		inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
		inode_lock_nested(p2->d_inode, I_MUTEX_CHILD);
2789
		return p;
L
Linus Torvalds 已提交
2790 2791
	}

A
Al Viro 已提交
2792 2793
	inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
	inode_lock_nested(p2->d_inode, I_MUTEX_PARENT2);
L
Linus Torvalds 已提交
2794 2795
	return NULL;
}
2796
EXPORT_SYMBOL(lock_rename);
L
Linus Torvalds 已提交
2797 2798 2799

void unlock_rename(struct dentry *p1, struct dentry *p2)
{
A
Al Viro 已提交
2800
	inode_unlock(p1->d_inode);
L
Linus Torvalds 已提交
2801
	if (p1 != p2) {
A
Al Viro 已提交
2802
		inode_unlock(p2->d_inode);
2803
		mutex_unlock(&p1->d_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2804 2805
	}
}
2806
EXPORT_SYMBOL(unlock_rename);
L
Linus Torvalds 已提交
2807

A
Al Viro 已提交
2808
int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
A
Al Viro 已提交
2809
		bool want_excl)
L
Linus Torvalds 已提交
2810
{
2811
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
2812 2813 2814
	if (error)
		return error;

A
Al Viro 已提交
2815
	if (!dir->i_op->create)
L
Linus Torvalds 已提交
2816 2817 2818 2819 2820 2821
		return -EACCES;	/* shouldn't it be ENOSYS? */
	mode &= S_IALLUGO;
	mode |= S_IFREG;
	error = security_inode_create(dir, dentry, mode);
	if (error)
		return error;
A
Al Viro 已提交
2822
	error = dir->i_op->create(dir, dentry, mode, want_excl);
2823
	if (!error)
2824
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
2825 2826
	return error;
}
2827
EXPORT_SYMBOL(vfs_create);
L
Linus Torvalds 已提交
2828

A
Al Viro 已提交
2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849
int vfs_mkobj(struct dentry *dentry, umode_t mode,
		int (*f)(struct dentry *, umode_t, void *),
		void *arg)
{
	struct inode *dir = dentry->d_parent->d_inode;
	int error = may_create(dir, dentry);
	if (error)
		return error;

	mode &= S_IALLUGO;
	mode |= S_IFREG;
	error = security_inode_create(dir, dentry, mode);
	if (error)
		return error;
	error = f(dentry, mode, arg);
	if (!error)
		fsnotify_create(dir, dentry);
	return error;
}
EXPORT_SYMBOL(vfs_mkobj);

2850 2851 2852 2853 2854 2855
bool may_open_dev(const struct path *path)
{
	return !(path->mnt->mnt_flags & MNT_NODEV) &&
		!(path->mnt->mnt_sb->s_iflags & SB_I_NODEV);
}

A
Al Viro 已提交
2856
static int may_open(const struct path *path, int acc_mode, int flag)
L
Linus Torvalds 已提交
2857
{
2858
	struct dentry *dentry = path->dentry;
L
Linus Torvalds 已提交
2859 2860 2861 2862 2863 2864
	struct inode *inode = dentry->d_inode;
	int error;

	if (!inode)
		return -ENOENT;

C
Christoph Hellwig 已提交
2865 2866
	switch (inode->i_mode & S_IFMT) {
	case S_IFLNK:
L
Linus Torvalds 已提交
2867
		return -ELOOP;
C
Christoph Hellwig 已提交
2868
	case S_IFDIR:
2869
		if (acc_mode & MAY_WRITE)
C
Christoph Hellwig 已提交
2870
			return -EISDIR;
2871 2872
		if (acc_mode & MAY_EXEC)
			return -EACCES;
C
Christoph Hellwig 已提交
2873 2874 2875
		break;
	case S_IFBLK:
	case S_IFCHR:
2876
		if (!may_open_dev(path))
L
Linus Torvalds 已提交
2877
			return -EACCES;
K
Kees Cook 已提交
2878
		fallthrough;
C
Christoph Hellwig 已提交
2879 2880
	case S_IFIFO:
	case S_IFSOCK:
K
Kees Cook 已提交
2881 2882
		if (acc_mode & MAY_EXEC)
			return -EACCES;
L
Linus Torvalds 已提交
2883
		flag &= ~O_TRUNC;
C
Christoph Hellwig 已提交
2884
		break;
2885 2886 2887 2888
	case S_IFREG:
		if ((acc_mode & MAY_EXEC) && path_noexec(path))
			return -EACCES;
		break;
2889
	}
2890

A
Al Viro 已提交
2891
	error = inode_permission(inode, MAY_OPEN | acc_mode);
2892 2893
	if (error)
		return error;
M
Mimi Zohar 已提交
2894

L
Linus Torvalds 已提交
2895 2896 2897 2898
	/*
	 * An append-only file must be opened in append mode for writing.
	 */
	if (IS_APPEND(inode)) {
2899
		if  ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
2900
			return -EPERM;
L
Linus Torvalds 已提交
2901
		if (flag & O_TRUNC)
2902
			return -EPERM;
L
Linus Torvalds 已提交
2903 2904 2905
	}

	/* O_NOATIME can only be set by the owner or superuser */
2906
	if (flag & O_NOATIME && !inode_owner_or_capable(inode))
2907
		return -EPERM;
L
Linus Torvalds 已提交
2908

2909
	return 0;
2910
}
L
Linus Torvalds 已提交
2911

2912
static int handle_truncate(struct file *filp)
2913
{
A
Al Viro 已提交
2914
	const struct path *path = &filp->f_path;
2915 2916 2917 2918 2919 2920 2921
	struct inode *inode = path->dentry->d_inode;
	int error = get_write_access(inode);
	if (error)
		return error;
	/*
	 * Refuse to truncate files with mandatory locks held on them.
	 */
2922
	error = locks_verify_locked(filp);
2923
	if (!error)
2924
		error = security_path_truncate(path);
2925 2926 2927
	if (!error) {
		error = do_truncate(path->dentry, 0,
				    ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
2928
				    filp);
2929 2930
	}
	put_write_access(inode);
M
Mimi Zohar 已提交
2931
	return error;
L
Linus Torvalds 已提交
2932 2933
}

2934 2935
static inline int open_to_namei_flags(int flag)
{
2936 2937
	if ((flag & O_ACCMODE) == 3)
		flag--;
2938 2939 2940
	return flag;
}

2941
static int may_o_create(const struct path *dir, struct dentry *dentry, umode_t mode)
M
Miklos Szeredi 已提交
2942
{
2943
	struct user_namespace *s_user_ns;
M
Miklos Szeredi 已提交
2944 2945 2946 2947
	int error = security_path_mknod(dir, dentry, mode, 0);
	if (error)
		return error;

2948 2949 2950 2951 2952
	s_user_ns = dir->dentry->d_sb->s_user_ns;
	if (!kuid_has_mapping(s_user_ns, current_fsuid()) ||
	    !kgid_has_mapping(s_user_ns, current_fsgid()))
		return -EOVERFLOW;

M
Miklos Szeredi 已提交
2953 2954 2955 2956 2957 2958 2959
	error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC);
	if (error)
		return error;

	return security_inode_create(dir->dentry->d_inode, dentry, mode);
}

2960 2961 2962 2963 2964 2965 2966
/*
 * Attempt to atomically look up, create and open a file from a negative
 * dentry.
 *
 * Returns 0 if successful.  The file will have been created and attached to
 * @file by the filesystem calling finish_open().
 *
2967 2968 2969
 * If the file was looked up only or didn't need creating, FMODE_OPENED won't
 * be set.  The caller will need to perform the open themselves.  @path will
 * have been updated to point to the new dentry.  This may be negative.
2970 2971 2972
 *
 * Returns an error code otherwise.
 */
2973 2974 2975
static struct dentry *atomic_open(struct nameidata *nd, struct dentry *dentry,
				  struct file *file,
				  int open_flag, umode_t mode)
M
Miklos Szeredi 已提交
2976
{
2977
	struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
M
Miklos Szeredi 已提交
2978 2979 2980 2981 2982 2983
	struct inode *dir =  nd->path.dentry->d_inode;
	int error;

	if (nd->flags & LOOKUP_DIRECTORY)
		open_flag |= O_DIRECTORY;

A
Al Viro 已提交
2984 2985
	file->f_path.dentry = DENTRY_NOT_SET;
	file->f_path.mnt = nd->path.mnt;
2986
	error = dir->i_op->atomic_open(dir, dentry, file,
2987
				       open_to_namei_flags(open_flag), mode);
2988
	d_lookup_done(dentry);
2989
	if (!error) {
2990
		if (file->f_mode & FMODE_OPENED) {
2991 2992 2993 2994
			if (unlikely(dentry != file->f_path.dentry)) {
				dput(dentry);
				dentry = dget(file->f_path.dentry);
			}
2995
		} else if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
2996
			error = -EIO;
2997
		} else {
2998 2999 3000
			if (file->f_path.dentry) {
				dput(dentry);
				dentry = file->f_path.dentry;
3001
			}
3002
			if (unlikely(d_is_negative(dentry)))
A
Al Viro 已提交
3003
				error = -ENOENT;
3004
		}
M
Miklos Szeredi 已提交
3005
	}
3006 3007 3008 3009 3010
	if (error) {
		dput(dentry);
		dentry = ERR_PTR(error);
	}
	return dentry;
M
Miklos Szeredi 已提交
3011 3012
}

M
Miklos Szeredi 已提交
3013
/*
3014
 * Look up and maybe create and open the last component.
M
Miklos Szeredi 已提交
3015
 *
3016
 * Must be called with parent locked (exclusive in O_CREAT case).
3017
 *
3018 3019 3020 3021 3022 3023 3024
 * Returns 0 on success, that is, if
 *  the file was successfully atomically created (if necessary) and opened, or
 *  the file was not completely opened at this time, though lookups and
 *  creations were performed.
 * These case are distinguished by presence of FMODE_OPENED on file->f_mode.
 * In the latter case dentry returned in @path might be negative if O_CREAT
 * hadn't been specified.
3025
 *
3026
 * An error code is returned on failure.
M
Miklos Szeredi 已提交
3027
 */
3028 3029 3030
static struct dentry *lookup_open(struct nameidata *nd, struct file *file,
				  const struct open_flags *op,
				  bool got_write)
M
Miklos Szeredi 已提交
3031 3032
{
	struct dentry *dir = nd->path.dentry;
3033
	struct inode *dir_inode = dir->d_inode;
3034
	int open_flag = op->open_flag;
M
Miklos Szeredi 已提交
3035
	struct dentry *dentry;
3036 3037
	int error, create_error = 0;
	umode_t mode = op->mode;
3038
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
M
Miklos Szeredi 已提交
3039

3040
	if (unlikely(IS_DEADDIR(dir_inode)))
3041
		return ERR_PTR(-ENOENT);
M
Miklos Szeredi 已提交
3042

3043
	file->f_mode &= ~FMODE_CREATED;
3044 3045 3046 3047 3048
	dentry = d_lookup(dir, &nd->last);
	for (;;) {
		if (!dentry) {
			dentry = d_alloc_parallel(dir, &nd->last, &wq);
			if (IS_ERR(dentry))
3049
				return dentry;
3050 3051 3052
		}
		if (d_in_lookup(dentry))
			break;
M
Miklos Szeredi 已提交
3053

3054 3055 3056 3057 3058 3059 3060 3061 3062 3063
		error = d_revalidate(dentry, nd->flags);
		if (likely(error > 0))
			break;
		if (error)
			goto out_dput;
		d_invalidate(dentry);
		dput(dentry);
		dentry = NULL;
	}
	if (dentry->d_inode) {
3064
		/* Cached positive dentry: will open in f_op->open */
3065
		return dentry;
3066
	}
M
Miklos Szeredi 已提交
3067

3068 3069 3070 3071 3072 3073 3074 3075 3076
	/*
	 * Checking write permission is tricky, bacuse we don't know if we are
	 * going to actually need it: O_CREAT opens should work as long as the
	 * file exists.  But checking existence breaks atomicity.  The trick is
	 * to check access and if not granted clear O_CREAT from the flags.
	 *
	 * Another problem is returing the "right" error value (e.g. for an
	 * O_EXCL open we want to return EEXIST not EROFS).
	 */
3077 3078
	if (unlikely(!got_write))
		open_flag &= ~O_TRUNC;
3079
	if (open_flag & O_CREAT) {
3080 3081
		if (open_flag & O_EXCL)
			open_flag &= ~O_TRUNC;
3082 3083
		if (!IS_POSIXACL(dir->d_inode))
			mode &= ~current_umask();
3084
		if (likely(got_write))
3085
			create_error = may_o_create(&nd->path, dentry, mode);
3086 3087
		else
			create_error = -EROFS;
M
Miklos Szeredi 已提交
3088
	}
3089 3090
	if (create_error)
		open_flag &= ~O_CREAT;
3091
	if (dir_inode->i_op->atomic_open) {
3092
		dentry = atomic_open(nd, dentry, file, open_flag, mode);
3093 3094 3095
		if (unlikely(create_error) && dentry == ERR_PTR(-ENOENT))
			dentry = ERR_PTR(create_error);
		return dentry;
M
Miklos Szeredi 已提交
3096
	}
3097

3098
	if (d_in_lookup(dentry)) {
3099 3100
		struct dentry *res = dir_inode->i_op->lookup(dir_inode, dentry,
							     nd->flags);
3101
		d_lookup_done(dentry);
3102 3103 3104 3105 3106 3107 3108 3109
		if (unlikely(res)) {
			if (IS_ERR(res)) {
				error = PTR_ERR(res);
				goto out_dput;
			}
			dput(dentry);
			dentry = res;
		}
3110 3111
	}

M
Miklos Szeredi 已提交
3112
	/* Negative dentry, just create the file */
3113
	if (!dentry->d_inode && (open_flag & O_CREAT)) {
3114
		file->f_mode |= FMODE_CREATED;
3115 3116 3117
		audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
		if (!dir_inode->i_op->create) {
			error = -EACCES;
M
Miklos Szeredi 已提交
3118
			goto out_dput;
3119 3120
		}
		error = dir_inode->i_op->create(dir_inode, dentry, mode,
3121
						open_flag & O_EXCL);
M
Miklos Szeredi 已提交
3122 3123 3124
		if (error)
			goto out_dput;
	}
3125 3126 3127
	if (unlikely(create_error) && !dentry->d_inode) {
		error = create_error;
		goto out_dput;
M
Miklos Szeredi 已提交
3128
	}
3129
	return dentry;
M
Miklos Szeredi 已提交
3130 3131 3132

out_dput:
	dput(dentry);
3133
	return ERR_PTR(error);
M
Miklos Szeredi 已提交
3134 3135
}

3136
static const char *open_last_lookups(struct nameidata *nd,
3137
		   struct file *file, const struct open_flags *op)
3138
{
3139
	struct dentry *dir = nd->path.dentry;
3140
	int open_flag = op->open_flag;
3141
	bool got_write = false;
3142
	unsigned seq;
3143
	struct inode *inode;
3144
	struct dentry *dentry;
3145
	const char *res;
3146

3147 3148
	nd->flags |= op->intent;

3149
	if (nd->last_type != LAST_NORM) {
3150 3151
		if (nd->depth)
			put_link(nd);
3152
		return handle_dots(nd, nd->last_type);
3153
	}
3154

3155
	if (!(open_flag & O_CREAT)) {
3156 3157 3158
		if (nd->last.name[nd->last.len])
			nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
		/* we _can_ be in RCU mode here */
3159 3160
		dentry = lookup_fast(nd, &inode, &seq);
		if (IS_ERR(dentry))
3161
			return ERR_CAST(dentry);
3162
		if (likely(dentry))
3163 3164
			goto finish_lookup;

A
Al Viro 已提交
3165
		BUG_ON(nd->flags & LOOKUP_RCU);
3166 3167
	} else {
		/* create side of things */
3168
		if (nd->flags & LOOKUP_RCU) {
3169 3170
			if (!try_to_unlazy(nd))
				return ERR_PTR(-ECHILD);
3171
		}
3172
		audit_inode(nd->name, dir, AUDIT_INODE_PARENT);
3173
		/* trailing slashes? */
3174
		if (unlikely(nd->last.name[nd->last.len]))
3175
			return ERR_PTR(-EISDIR);
3176
	}
A
Al Viro 已提交
3177

3178
	if (open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
3179
		got_write = !mnt_want_write(nd->path.mnt);
3180 3181 3182 3183 3184 3185
		/*
		 * do _not_ fail yet - we might not need that or fail with
		 * a different error; let lookup_open() decide; we'll be
		 * dropping this one anyway.
		 */
	}
3186 3187 3188 3189
	if (open_flag & O_CREAT)
		inode_lock(dir->d_inode);
	else
		inode_lock_shared(dir->d_inode);
3190
	dentry = lookup_open(nd, file, op, got_write);
3191 3192
	if (!IS_ERR(dentry) && (file->f_mode & FMODE_CREATED))
		fsnotify_create(dir->d_inode, dentry);
3193 3194 3195 3196
	if (open_flag & O_CREAT)
		inode_unlock(dir->d_inode);
	else
		inode_unlock_shared(dir->d_inode);
3197

3198
	if (got_write)
3199
		mnt_drop_write(nd->path.mnt);
M
Miklos Szeredi 已提交
3200

3201 3202 3203
	if (IS_ERR(dentry))
		return ERR_CAST(dentry);

3204
	if (file->f_mode & (FMODE_OPENED | FMODE_CREATED)) {
3205 3206
		dput(nd->path.dentry);
		nd->path.dentry = dentry;
3207
		return NULL;
3208 3209
	}

3210
finish_lookup:
3211 3212
	if (nd->depth)
		put_link(nd);
3213
	res = step_into(nd, WALK_TRAILING, dentry, inode, seq);
3214
	if (unlikely(res))
3215
		nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3216
	return res;
3217 3218 3219 3220 3221
}

/*
 * Handle the last step of open()
 */
3222
static int do_open(struct nameidata *nd,
3223 3224 3225 3226 3227 3228 3229
		   struct file *file, const struct open_flags *op)
{
	int open_flag = op->open_flag;
	bool do_truncate;
	int acc_mode;
	int error;

3230 3231 3232 3233 3234
	if (!(file->f_mode & (FMODE_OPENED | FMODE_CREATED))) {
		error = complete_walk(nd);
		if (error)
			return error;
	}
3235 3236
	if (!(file->f_mode & FMODE_CREATED))
		audit_inode(nd->name, nd->path.dentry, 0);
3237
	if (open_flag & O_CREAT) {
3238 3239
		if ((open_flag & O_EXCL) && !(file->f_mode & FMODE_CREATED))
			return -EEXIST;
3240
		if (d_is_dir(nd->path.dentry))
3241
			return -EISDIR;
3242
		error = may_create_in_sticky(nd->dir_mode, nd->dir_uid,
3243 3244
					     d_backing_inode(nd->path.dentry));
		if (unlikely(error))
3245
			return error;
3246
	}
M
Miklos Szeredi 已提交
3247
	if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry))
3248
		return -ENOTDIR;
3249

3250 3251
	do_truncate = false;
	acc_mode = op->acc_mode;
3252 3253 3254 3255
	if (file->f_mode & FMODE_CREATED) {
		/* Don't check for write permission, don't truncate */
		open_flag &= ~O_TRUNC;
		acc_mode = 0;
3256
	} else if (d_is_reg(nd->path.dentry) && open_flag & O_TRUNC) {
3257 3258
		error = mnt_want_write(nd->path.mnt);
		if (error)
3259
			return error;
3260
		do_truncate = true;
3261
	}
3262
	error = may_open(&nd->path, acc_mode, open_flag);
3263
	if (!error && !(file->f_mode & FMODE_OPENED))
A
Al Viro 已提交
3264
		error = vfs_open(&nd->path, file);
3265 3266 3267
	if (!error)
		error = ima_file_check(file, op->acc_mode);
	if (!error && do_truncate)
3268
		error = handle_truncate(file);
3269 3270 3271 3272
	if (unlikely(error > 0)) {
		WARN_ON(1);
		error = -EINVAL;
	}
3273
	if (do_truncate)
3274
		mnt_drop_write(nd->path.mnt);
3275
	return error;
3276 3277
}

3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292
struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode, int open_flag)
{
	struct dentry *child = NULL;
	struct inode *dir = dentry->d_inode;
	struct inode *inode;
	int error;

	/* we want directory to be writable */
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
	if (error)
		goto out_err;
	error = -EOPNOTSUPP;
	if (!dir->i_op->tmpfile)
		goto out_err;
	error = -ENOMEM;
D
David Howells 已提交
3293
	child = d_alloc(dentry, &slash_name);
3294 3295
	if (unlikely(!child))
		goto out_err;
3296 3297
	if (!IS_POSIXACL(dir))
		mode &= ~current_umask();
3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309
	error = dir->i_op->tmpfile(dir, child, mode);
	if (error)
		goto out_err;
	error = -ENOENT;
	inode = child->d_inode;
	if (unlikely(!inode))
		goto out_err;
	if (!(open_flag & O_EXCL)) {
		spin_lock(&inode->i_lock);
		inode->i_state |= I_LINKABLE;
		spin_unlock(&inode->i_lock);
	}
3310
	ima_post_create_tmpfile(inode);
3311 3312 3313 3314 3315 3316 3317 3318
	return child;

out_err:
	dput(child);
	return ERR_PTR(error);
}
EXPORT_SYMBOL(vfs_tmpfile);

3319
static int do_tmpfile(struct nameidata *nd, unsigned flags,
3320
		const struct open_flags *op,
3321
		struct file *file)
3322
{
3323 3324
	struct dentry *child;
	struct path path;
3325
	int error = path_lookupat(nd, flags | LOOKUP_DIRECTORY, &path);
3326 3327
	if (unlikely(error))
		return error;
3328
	error = mnt_want_write(path.mnt);
3329 3330
	if (unlikely(error))
		goto out;
3331 3332
	child = vfs_tmpfile(path.dentry, op->mode, op->open_flag);
	error = PTR_ERR(child);
3333
	if (IS_ERR(child))
3334
		goto out2;
3335 3336
	dput(path.dentry);
	path.dentry = child;
3337
	audit_inode(nd->name, child, 0);
3338
	/* Don't check for other permissions, the inode was just created */
A
Al Viro 已提交
3339
	error = may_open(&path, 0, op->open_flag);
3340 3341
	if (error)
		goto out2;
3342
	file->f_path.mnt = path.mnt;
3343
	error = finish_open(file, child, NULL);
3344
out2:
3345
	mnt_drop_write(path.mnt);
3346
out:
3347
	path_put(&path);
3348 3349 3350
	return error;
}

3351 3352 3353 3354 3355 3356
static int do_o_path(struct nameidata *nd, unsigned flags, struct file *file)
{
	struct path path;
	int error = path_lookupat(nd, flags, &path);
	if (!error) {
		audit_inode(nd->name, path.dentry, 0);
3357
		error = vfs_open(&path, file);
3358 3359 3360 3361 3362
		path_put(&path);
	}
	return error;
}

3363 3364
static struct file *path_openat(struct nameidata *nd,
			const struct open_flags *op, unsigned flags)
L
Linus Torvalds 已提交
3365
{
A
Al Viro 已提交
3366
	struct file *file;
3367
	int error;
N
Nick Piggin 已提交
3368

3369
	file = alloc_empty_file(op->open_flag, current_cred());
3370 3371
	if (IS_ERR(file))
		return file;
N
Nick Piggin 已提交
3372

A
Al Viro 已提交
3373
	if (unlikely(file->f_flags & __O_TMPFILE)) {
3374
		error = do_tmpfile(nd, flags, op, file);
3375
	} else if (unlikely(file->f_flags & O_PATH)) {
3376
		error = do_o_path(nd, flags, file);
3377 3378 3379
	} else {
		const char *s = path_init(nd, flags);
		while (!(error = link_path_walk(s, nd)) &&
3380
		       (s = open_last_lookups(nd, file, op)) != NULL)
3381
			;
3382 3383
		if (!error)
			error = do_open(nd, file, op);
3384
		terminate_walk(nd);
3385
	}
3386
	if (likely(!error)) {
3387
		if (likely(file->f_mode & FMODE_OPENED))
3388 3389 3390
			return file;
		WARN_ON(1);
		error = -EINVAL;
3391
	}
3392 3393 3394 3395 3396 3397
	fput(file);
	if (error == -EOPENSTALE) {
		if (flags & LOOKUP_RCU)
			error = -ECHILD;
		else
			error = -ESTALE;
3398
	}
3399
	return ERR_PTR(error);
L
Linus Torvalds 已提交
3400 3401
}

3402
struct file *do_filp_open(int dfd, struct filename *pathname,
3403
		const struct open_flags *op)
3404
{
3405
	struct nameidata nd;
3406
	int flags = op->lookup_flags;
3407 3408
	struct file *filp;

3409
	set_nameidata(&nd, dfd, pathname);
3410
	filp = path_openat(&nd, op, flags | LOOKUP_RCU);
3411
	if (unlikely(filp == ERR_PTR(-ECHILD)))
3412
		filp = path_openat(&nd, op, flags);
3413
	if (unlikely(filp == ERR_PTR(-ESTALE)))
3414
		filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3415
	restore_nameidata();
3416 3417 3418
	return filp;
}

A
Al Viro 已提交
3419
struct file *do_file_open_root(const struct path *root,
3420
		const char *name, const struct open_flags *op)
A
Al Viro 已提交
3421
{
3422
	struct nameidata nd;
A
Al Viro 已提交
3423
	struct file *file;
3424
	struct filename *filename;
3425
	int flags = op->lookup_flags;
A
Al Viro 已提交
3426

A
Al Viro 已提交
3427
	if (d_is_symlink(root->dentry) && op->intent & LOOKUP_OPEN)
A
Al Viro 已提交
3428 3429
		return ERR_PTR(-ELOOP);

3430
	filename = getname_kernel(name);
3431
	if (IS_ERR(filename))
3432 3433
		return ERR_CAST(filename);

3434
	set_nameidata(&nd, -1, filename);
3435 3436
	nd.root = *root;
	nd.state = ND_ROOT_PRESET;
3437
	file = path_openat(&nd, op, flags | LOOKUP_RCU);
A
Al Viro 已提交
3438
	if (unlikely(file == ERR_PTR(-ECHILD)))
3439
		file = path_openat(&nd, op, flags);
A
Al Viro 已提交
3440
	if (unlikely(file == ERR_PTR(-ESTALE)))
3441
		file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3442
	restore_nameidata();
3443
	putname(filename);
A
Al Viro 已提交
3444 3445 3446
	return file;
}

3447
static struct dentry *filename_create(int dfd, struct filename *name,
3448
				struct path *path, unsigned int lookup_flags)
L
Linus Torvalds 已提交
3449
{
3450
	struct dentry *dentry = ERR_PTR(-EEXIST);
3451 3452
	struct qstr last;
	int type;
3453
	int err2;
3454 3455 3456 3457 3458 3459 3460 3461 3462
	int error;
	bool is_dir = (lookup_flags & LOOKUP_DIRECTORY);

	/*
	 * Note that only LOOKUP_REVAL and LOOKUP_DIRECTORY matter here. Any
	 * other flags passed in are ignored!
	 */
	lookup_flags &= LOOKUP_REVAL;

3463 3464 3465
	name = filename_parentat(dfd, name, lookup_flags, path, &last, &type);
	if (IS_ERR(name))
		return ERR_CAST(name);
L
Linus Torvalds 已提交
3466

3467 3468 3469 3470
	/*
	 * Yucky last component or no last component at all?
	 * (foo/., foo/.., /////)
	 */
3471
	if (unlikely(type != LAST_NORM))
A
Al Viro 已提交
3472
		goto out;
3473

3474
	/* don't fail immediately if it's r/o, at least try to report other errors */
3475
	err2 = mnt_want_write(path->mnt);
3476 3477 3478
	/*
	 * Do the final lookup.
	 */
3479
	lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
A
Al Viro 已提交
3480
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
3481
	dentry = __lookup_hash(&last, path->dentry, lookup_flags);
L
Linus Torvalds 已提交
3482
	if (IS_ERR(dentry))
3483
		goto unlock;
3484

3485
	error = -EEXIST;
3486
	if (d_is_positive(dentry))
3487
		goto fail;
3488

3489 3490 3491 3492 3493 3494
	/*
	 * Special case - lookup gave negative, but... we had foo/bar/
	 * From the vfs_mknod() POV we just have a negative dentry -
	 * all is fine. Let's be bastards - you had / on the end, you've
	 * been asking for (non-existent) directory. -ENOENT for you.
	 */
3495
	if (unlikely(!is_dir && last.name[last.len])) {
3496
		error = -ENOENT;
A
Al Viro 已提交
3497
		goto fail;
3498
	}
3499 3500
	if (unlikely(err2)) {
		error = err2;
3501
		goto fail;
3502
	}
3503
	putname(name);
L
Linus Torvalds 已提交
3504 3505
	return dentry;
fail:
3506 3507 3508
	dput(dentry);
	dentry = ERR_PTR(error);
unlock:
A
Al Viro 已提交
3509
	inode_unlock(path->dentry->d_inode);
3510
	if (!err2)
3511
		mnt_drop_write(path->mnt);
A
Al Viro 已提交
3512
out:
3513
	path_put(path);
3514
	putname(name);
L
Linus Torvalds 已提交
3515 3516
	return dentry;
}
3517 3518 3519 3520

struct dentry *kern_path_create(int dfd, const char *pathname,
				struct path *path, unsigned int lookup_flags)
{
3521 3522
	return filename_create(dfd, getname_kernel(pathname),
				path, lookup_flags);
3523
}
3524 3525
EXPORT_SYMBOL(kern_path_create);

A
Al Viro 已提交
3526 3527 3528
void done_path_create(struct path *path, struct dentry *dentry)
{
	dput(dentry);
A
Al Viro 已提交
3529
	inode_unlock(path->dentry->d_inode);
3530
	mnt_drop_write(path->mnt);
A
Al Viro 已提交
3531 3532 3533 3534
	path_put(path);
}
EXPORT_SYMBOL(done_path_create);

A
Al Viro 已提交
3535
inline struct dentry *user_path_create(int dfd, const char __user *pathname,
3536
				struct path *path, unsigned int lookup_flags)
3537
{
3538
	return filename_create(dfd, getname(pathname), path, lookup_flags);
3539 3540 3541
}
EXPORT_SYMBOL(user_path_create);

A
Al Viro 已提交
3542
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
L
Linus Torvalds 已提交
3543
{
3544
	bool is_whiteout = S_ISCHR(mode) && dev == WHITEOUT_DEV;
3545
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3546 3547 3548 3549

	if (error)
		return error;

3550 3551
	if ((S_ISCHR(mode) || S_ISBLK(mode)) && !is_whiteout &&
	    !capable(CAP_MKNOD))
L
Linus Torvalds 已提交
3552 3553
		return -EPERM;

A
Al Viro 已提交
3554
	if (!dir->i_op->mknod)
L
Linus Torvalds 已提交
3555 3556
		return -EPERM;

3557 3558 3559 3560
	error = devcgroup_inode_mknod(mode, dev);
	if (error)
		return error;

L
Linus Torvalds 已提交
3561 3562 3563 3564 3565
	error = security_inode_mknod(dir, dentry, mode, dev);
	if (error)
		return error;

	error = dir->i_op->mknod(dir, dentry, mode, dev);
3566
	if (!error)
3567
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3568 3569
	return error;
}
3570
EXPORT_SYMBOL(vfs_mknod);
L
Linus Torvalds 已提交
3571

A
Al Viro 已提交
3572
static int may_mknod(umode_t mode)
3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588
{
	switch (mode & S_IFMT) {
	case S_IFREG:
	case S_IFCHR:
	case S_IFBLK:
	case S_IFIFO:
	case S_IFSOCK:
	case 0: /* zero mode translates to S_IFREG */
		return 0;
	case S_IFDIR:
		return -EPERM;
	default:
		return -EINVAL;
	}
}

3589
static long do_mknodat(int dfd, const char __user *filename, umode_t mode,
3590
		unsigned int dev)
L
Linus Torvalds 已提交
3591
{
3592
	struct dentry *dentry;
3593 3594
	struct path path;
	int error;
3595
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3596

3597 3598 3599
	error = may_mknod(mode);
	if (error)
		return error;
3600 3601
retry:
	dentry = user_path_create(dfd, filename, &path, lookup_flags);
3602 3603
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);
3604

3605
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3606
		mode &= ~current_umask();
3607
	error = security_path_mknod(&path, dentry, mode, dev);
3608
	if (error)
3609
		goto out;
3610
	switch (mode & S_IFMT) {
L
Linus Torvalds 已提交
3611
		case 0: case S_IFREG:
A
Al Viro 已提交
3612
			error = vfs_create(path.dentry->d_inode,dentry,mode,true);
3613 3614
			if (!error)
				ima_post_path_mknod(dentry);
L
Linus Torvalds 已提交
3615 3616
			break;
		case S_IFCHR: case S_IFBLK:
3617
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,
L
Linus Torvalds 已提交
3618 3619 3620
					new_decode_dev(dev));
			break;
		case S_IFIFO: case S_IFSOCK:
3621
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
L
Linus Torvalds 已提交
3622 3623
			break;
	}
3624
out:
A
Al Viro 已提交
3625
	done_path_create(&path, dentry);
3626 3627 3628 3629
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3630 3631 3632
	return error;
}

3633 3634 3635 3636 3637 3638
SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
		unsigned int, dev)
{
	return do_mknodat(dfd, filename, mode, dev);
}

A
Al Viro 已提交
3639
SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3640
{
3641
	return do_mknodat(AT_FDCWD, filename, mode, dev);
3642 3643
}

3644
int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
L
Linus Torvalds 已提交
3645
{
3646
	int error = may_create(dir, dentry);
3647
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
3648 3649 3650 3651

	if (error)
		return error;

A
Al Viro 已提交
3652
	if (!dir->i_op->mkdir)
L
Linus Torvalds 已提交
3653 3654 3655 3656 3657 3658 3659
		return -EPERM;

	mode &= (S_IRWXUGO|S_ISVTX);
	error = security_inode_mkdir(dir, dentry, mode);
	if (error)
		return error;

3660 3661 3662
	if (max_links && dir->i_nlink >= max_links)
		return -EMLINK;

L
Linus Torvalds 已提交
3663
	error = dir->i_op->mkdir(dir, dentry, mode);
3664
	if (!error)
3665
		fsnotify_mkdir(dir, dentry);
L
Linus Torvalds 已提交
3666 3667
	return error;
}
3668
EXPORT_SYMBOL(vfs_mkdir);
L
Linus Torvalds 已提交
3669

3670
static long do_mkdirat(int dfd, const char __user *pathname, umode_t mode)
L
Linus Torvalds 已提交
3671
{
3672
	struct dentry *dentry;
3673 3674
	struct path path;
	int error;
3675
	unsigned int lookup_flags = LOOKUP_DIRECTORY;
L
Linus Torvalds 已提交
3676

3677 3678
retry:
	dentry = user_path_create(dfd, pathname, &path, lookup_flags);
3679
	if (IS_ERR(dentry))
3680
		return PTR_ERR(dentry);
L
Linus Torvalds 已提交
3681

3682
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3683
		mode &= ~current_umask();
3684
	error = security_path_mkdir(&path, dentry, mode);
3685 3686
	if (!error)
		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
A
Al Viro 已提交
3687
	done_path_create(&path, dentry);
3688 3689 3690 3691
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3692 3693 3694
	return error;
}

3695 3696 3697 3698 3699
SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
{
	return do_mkdirat(dfd, pathname, mode);
}

3700
SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
3701
{
3702
	return do_mkdirat(AT_FDCWD, pathname, mode);
3703 3704
}

L
Linus Torvalds 已提交
3705 3706 3707 3708 3709 3710 3711
int vfs_rmdir(struct inode *dir, struct dentry *dentry)
{
	int error = may_delete(dir, dentry, 1);

	if (error)
		return error;

A
Al Viro 已提交
3712
	if (!dir->i_op->rmdir)
L
Linus Torvalds 已提交
3713 3714
		return -EPERM;

3715
	dget(dentry);
A
Al Viro 已提交
3716
	inode_lock(dentry->d_inode);
S
Sage Weil 已提交
3717 3718

	error = -EBUSY;
3719
	if (is_local_mountpoint(dentry))
S
Sage Weil 已提交
3720 3721 3722 3723 3724 3725 3726 3727 3728 3729
		goto out;

	error = security_inode_rmdir(dir, dentry);
	if (error)
		goto out;

	error = dir->i_op->rmdir(dir, dentry);
	if (error)
		goto out;

3730
	shrink_dcache_parent(dentry);
S
Sage Weil 已提交
3731 3732
	dentry->d_inode->i_flags |= S_DEAD;
	dont_mount(dentry);
3733
	detach_mounts(dentry);
S
Sage Weil 已提交
3734 3735

out:
A
Al Viro 已提交
3736
	inode_unlock(dentry->d_inode);
3737
	dput(dentry);
S
Sage Weil 已提交
3738
	if (!error)
3739
		d_delete_notify(dir, dentry);
L
Linus Torvalds 已提交
3740 3741
	return error;
}
3742
EXPORT_SYMBOL(vfs_rmdir);
L
Linus Torvalds 已提交
3743

3744
long do_rmdir(int dfd, struct filename *name)
L
Linus Torvalds 已提交
3745 3746 3747
{
	int error = 0;
	struct dentry *dentry;
3748 3749 3750
	struct path path;
	struct qstr last;
	int type;
3751 3752
	unsigned int lookup_flags = 0;
retry:
3753
	name = filename_parentat(dfd, name, lookup_flags,
A
Al Viro 已提交
3754
				&path, &last, &type);
3755 3756
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
3757

3758
	switch (type) {
3759 3760 3761 3762 3763 3764 3765 3766 3767
	case LAST_DOTDOT:
		error = -ENOTEMPTY;
		goto exit1;
	case LAST_DOT:
		error = -EINVAL;
		goto exit1;
	case LAST_ROOT:
		error = -EBUSY;
		goto exit1;
L
Linus Torvalds 已提交
3768
	}
3769

3770
	error = mnt_want_write(path.mnt);
3771 3772
	if (error)
		goto exit1;
3773

A
Al Viro 已提交
3774
	inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
3775
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
3776
	error = PTR_ERR(dentry);
3777 3778
	if (IS_ERR(dentry))
		goto exit2;
3779 3780 3781 3782
	if (!dentry->d_inode) {
		error = -ENOENT;
		goto exit3;
	}
3783
	error = security_path_rmdir(&path, dentry);
3784
	if (error)
3785
		goto exit3;
3786
	error = vfs_rmdir(path.dentry->d_inode, dentry);
3787
exit3:
3788 3789
	dput(dentry);
exit2:
A
Al Viro 已提交
3790
	inode_unlock(path.dentry->d_inode);
3791
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3792
exit1:
3793
	path_put(&path);
3794 3795 3796 3797
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
A
Al Viro 已提交
3798
	putname(name);
L
Linus Torvalds 已提交
3799 3800 3801
	return error;
}

3802
SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
3803
{
3804
	return do_rmdir(AT_FDCWD, getname(pathname));
3805 3806
}

3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825
/**
 * vfs_unlink - unlink a filesystem object
 * @dir:	parent directory
 * @dentry:	victim
 * @delegated_inode: returns victim inode, if the inode is delegated.
 *
 * The caller must hold dir->i_mutex.
 *
 * If vfs_unlink discovers a delegation, it will return -EWOULDBLOCK and
 * return a reference to the inode in delegated_inode.  The caller
 * should then break the delegation on that inode and retry.  Because
 * breaking a delegation may take a long time, the caller should drop
 * dir->i_mutex before doing so.
 *
 * Alternatively, a caller may pass NULL for delegated_inode.  This may
 * be appropriate for callers that expect the underlying filesystem not
 * to be NFS exported.
 */
int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
L
Linus Torvalds 已提交
3826
{
J
J. Bruce Fields 已提交
3827
	struct inode *target = dentry->d_inode;
L
Linus Torvalds 已提交
3828 3829 3830 3831 3832
	int error = may_delete(dir, dentry, 0);

	if (error)
		return error;

A
Al Viro 已提交
3833
	if (!dir->i_op->unlink)
L
Linus Torvalds 已提交
3834 3835
		return -EPERM;

A
Al Viro 已提交
3836
	inode_lock(target);
3837 3838 3839
	if (IS_SWAPFILE(target))
		error = -EPERM;
	else if (is_local_mountpoint(dentry))
L
Linus Torvalds 已提交
3840 3841 3842
		error = -EBUSY;
	else {
		error = security_inode_unlink(dir, dentry);
3843
		if (!error) {
3844 3845
			error = try_break_deleg(target, delegated_inode);
			if (error)
3846
				goto out;
L
Linus Torvalds 已提交
3847
			error = dir->i_op->unlink(dir, dentry);
3848
			if (!error) {
3849
				dont_mount(dentry);
3850 3851
				detach_mounts(dentry);
			}
3852
		}
L
Linus Torvalds 已提交
3853
	}
3854
out:
A
Al Viro 已提交
3855
	inode_unlock(target);
L
Linus Torvalds 已提交
3856 3857

	/* We don't d_delete() NFS sillyrenamed files--they still exist. */
3858 3859 3860
	if (!error && dentry->d_flags & DCACHE_NFSFS_RENAMED) {
		fsnotify_unlink(dir, dentry);
	} else if (!error) {
J
J. Bruce Fields 已提交
3861
		fsnotify_link_count(target);
3862
		d_delete_notify(dir, dentry);
L
Linus Torvalds 已提交
3863
	}
R
Robert Love 已提交
3864

L
Linus Torvalds 已提交
3865 3866
	return error;
}
3867
EXPORT_SYMBOL(vfs_unlink);
L
Linus Torvalds 已提交
3868 3869 3870

/*
 * Make sure that the actual truncation of the file will occur outside its
3871
 * directory's i_mutex.  Truncate can take a long time if there is a lot of
L
Linus Torvalds 已提交
3872 3873 3874
 * writeout happening, and we don't want to prevent access to the directory
 * while waiting on the I/O.
 */
3875
long do_unlinkat(int dfd, struct filename *name)
L
Linus Torvalds 已提交
3876
{
3877
	int error;
L
Linus Torvalds 已提交
3878
	struct dentry *dentry;
3879 3880 3881
	struct path path;
	struct qstr last;
	int type;
L
Linus Torvalds 已提交
3882
	struct inode *inode = NULL;
3883
	struct inode *delegated_inode = NULL;
3884 3885
	unsigned int lookup_flags = 0;
retry:
3886
	name = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
3887 3888
	if (IS_ERR(name))
		return PTR_ERR(name);
3889

L
Linus Torvalds 已提交
3890
	error = -EISDIR;
3891
	if (type != LAST_NORM)
L
Linus Torvalds 已提交
3892
		goto exit1;
3893

3894
	error = mnt_want_write(path.mnt);
3895 3896
	if (error)
		goto exit1;
3897
retry_deleg:
A
Al Viro 已提交
3898
	inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
3899
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
3900 3901 3902
	error = PTR_ERR(dentry);
	if (!IS_ERR(dentry)) {
		/* Why not before? Because we want correct error value */
3903
		if (last.name[last.len])
3904
			goto slashes;
L
Linus Torvalds 已提交
3905
		inode = dentry->d_inode;
3906
		if (d_is_negative(dentry))
3907 3908
			goto slashes;
		ihold(inode);
3909
		error = security_path_unlink(&path, dentry);
3910
		if (error)
3911
			goto exit2;
3912
		error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode);
3913
exit2:
L
Linus Torvalds 已提交
3914 3915
		dput(dentry);
	}
A
Al Viro 已提交
3916
	inode_unlock(path.dentry->d_inode);
L
Linus Torvalds 已提交
3917 3918
	if (inode)
		iput(inode);	/* truncate the inode here */
3919 3920
	inode = NULL;
	if (delegated_inode) {
3921
		error = break_deleg_wait(&delegated_inode);
3922 3923 3924
		if (!error)
			goto retry_deleg;
	}
3925
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3926
exit1:
3927
	path_put(&path);
3928 3929 3930 3931 3932
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		inode = NULL;
		goto retry;
	}
3933
	putname(name);
L
Linus Torvalds 已提交
3934 3935 3936
	return error;

slashes:
3937 3938
	if (d_is_negative(dentry))
		error = -ENOENT;
M
Miklos Szeredi 已提交
3939
	else if (d_is_dir(dentry))
3940 3941 3942
		error = -EISDIR;
	else
		error = -ENOTDIR;
L
Linus Torvalds 已提交
3943 3944 3945
	goto exit2;
}

3946
SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
3947 3948 3949 3950 3951
{
	if ((flag & ~AT_REMOVEDIR) != 0)
		return -EINVAL;

	if (flag & AT_REMOVEDIR)
3952
		return do_rmdir(dfd, getname(pathname));
3953
	return do_unlinkat(dfd, getname(pathname));
3954 3955
}

3956
SYSCALL_DEFINE1(unlink, const char __user *, pathname)
3957
{
3958
	return do_unlinkat(AT_FDCWD, getname(pathname));
3959 3960
}

3961
int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
L
Linus Torvalds 已提交
3962
{
3963
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3964 3965 3966 3967

	if (error)
		return error;

A
Al Viro 已提交
3968
	if (!dir->i_op->symlink)
L
Linus Torvalds 已提交
3969 3970 3971 3972 3973 3974 3975
		return -EPERM;

	error = security_inode_symlink(dir, dentry, oldname);
	if (error)
		return error;

	error = dir->i_op->symlink(dir, dentry, oldname);
3976
	if (!error)
3977
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3978 3979
	return error;
}
3980
EXPORT_SYMBOL(vfs_symlink);
L
Linus Torvalds 已提交
3981

3982
static long do_symlinkat(const char __user *oldname, int newdfd,
3983
		  const char __user *newname)
L
Linus Torvalds 已提交
3984
{
3985
	int error;
3986
	struct filename *from;
3987
	struct dentry *dentry;
3988
	struct path path;
3989
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3990 3991

	from = getname(oldname);
3992
	if (IS_ERR(from))
L
Linus Torvalds 已提交
3993
		return PTR_ERR(from);
3994 3995
retry:
	dentry = user_path_create(newdfd, newname, &path, lookup_flags);
3996 3997
	error = PTR_ERR(dentry);
	if (IS_ERR(dentry))
3998
		goto out_putname;
3999

4000
	error = security_path_symlink(&path, dentry, from->name);
4001
	if (!error)
4002
		error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
A
Al Viro 已提交
4003
	done_path_create(&path, dentry);
4004 4005 4006 4007
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4008
out_putname:
L
Linus Torvalds 已提交
4009 4010 4011 4012
	putname(from);
	return error;
}

4013 4014 4015 4016 4017 4018
SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
	return do_symlinkat(oldname, newdfd, newname);
}

4019
SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
4020
{
4021
	return do_symlinkat(oldname, AT_FDCWD, newname);
4022 4023
}

J
J. Bruce Fields 已提交
4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043
/**
 * vfs_link - create a new link
 * @old_dentry:	object to be linked
 * @dir:	new parent
 * @new_dentry:	where to create the new link
 * @delegated_inode: returns inode needing a delegation break
 *
 * The caller must hold dir->i_mutex
 *
 * If vfs_link discovers a delegation on the to-be-linked file in need
 * of breaking, it will return -EWOULDBLOCK and return a reference to the
 * inode in delegated_inode.  The caller should then break the delegation
 * and retry.  Because breaking a delegation may take a long time, the
 * caller should drop the i_mutex before doing so.
 *
 * Alternatively, a caller may pass NULL for delegated_inode.  This may
 * be appropriate for callers that expect the underlying filesystem not
 * to be NFS exported.
 */
int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
L
Linus Torvalds 已提交
4044 4045
{
	struct inode *inode = old_dentry->d_inode;
4046
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
4047 4048 4049 4050 4051
	int error;

	if (!inode)
		return -ENOENT;

4052
	error = may_create(dir, new_dentry);
L
Linus Torvalds 已提交
4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063
	if (error)
		return error;

	if (dir->i_sb != inode->i_sb)
		return -EXDEV;

	/*
	 * A link to an append-only or immutable file cannot be created.
	 */
	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
		return -EPERM;
4064 4065 4066 4067 4068 4069 4070
	/*
	 * Updating the link count will likely cause i_uid and i_gid to
	 * be writen back improperly if their true value is unknown to
	 * the vfs.
	 */
	if (HAS_UNMAPPED_ID(inode))
		return -EPERM;
A
Al Viro 已提交
4071
	if (!dir->i_op->link)
L
Linus Torvalds 已提交
4072
		return -EPERM;
4073
	if (S_ISDIR(inode->i_mode))
L
Linus Torvalds 已提交
4074 4075 4076 4077 4078 4079
		return -EPERM;

	error = security_inode_link(old_dentry, dir, new_dentry);
	if (error)
		return error;

A
Al Viro 已提交
4080
	inode_lock(inode);
4081
	/* Make sure we don't allow creating hardlink to an unlinked file */
4082
	if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
4083
		error =  -ENOENT;
4084 4085
	else if (max_links && inode->i_nlink >= max_links)
		error = -EMLINK;
J
J. Bruce Fields 已提交
4086 4087 4088 4089 4090
	else {
		error = try_break_deleg(inode, delegated_inode);
		if (!error)
			error = dir->i_op->link(old_dentry, dir, new_dentry);
	}
4091 4092 4093 4094 4095 4096

	if (!error && (inode->i_state & I_LINKABLE)) {
		spin_lock(&inode->i_lock);
		inode->i_state &= ~I_LINKABLE;
		spin_unlock(&inode->i_lock);
	}
A
Al Viro 已提交
4097
	inode_unlock(inode);
4098
	if (!error)
4099
		fsnotify_link(dir, inode, new_dentry);
L
Linus Torvalds 已提交
4100 4101
	return error;
}
4102
EXPORT_SYMBOL(vfs_link);
L
Linus Torvalds 已提交
4103 4104 4105 4106 4107 4108 4109 4110 4111 4112

/*
 * Hardlinks are often used in delicate situations.  We avoid
 * security-related surprises by not following symlinks on the
 * newname.  --KAB
 *
 * We don't follow them on the oldname either to be compatible
 * with linux 2.0, and to avoid hard-linking to directories
 * and other special files.  --ADM
 */
4113
static int do_linkat(int olddfd, const char __user *oldname, int newdfd,
4114
	      const char __user *newname, int flags)
L
Linus Torvalds 已提交
4115 4116
{
	struct dentry *new_dentry;
4117
	struct path old_path, new_path;
J
J. Bruce Fields 已提交
4118
	struct inode *delegated_inode = NULL;
4119
	int how = 0;
L
Linus Torvalds 已提交
4120 4121
	int error;

4122
	if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0)
4123
		return -EINVAL;
4124
	/*
4125 4126 4127
	 * To use null names we require CAP_DAC_READ_SEARCH
	 * This ensures that not everyone will be able to create
	 * handlink using the passed filedescriptor.
4128
	 */
4129 4130 4131
	if (flags & AT_EMPTY_PATH) {
		if (!capable(CAP_DAC_READ_SEARCH))
			return -ENOENT;
4132
		how = LOOKUP_EMPTY;
4133
	}
4134 4135 4136

	if (flags & AT_SYMLINK_FOLLOW)
		how |= LOOKUP_FOLLOW;
4137
retry:
4138
	error = user_path_at(olddfd, oldname, how, &old_path);
L
Linus Torvalds 已提交
4139
	if (error)
4140 4141
		return error;

4142 4143
	new_dentry = user_path_create(newdfd, newname, &new_path,
					(how & LOOKUP_REVAL));
L
Linus Torvalds 已提交
4144
	error = PTR_ERR(new_dentry);
4145
	if (IS_ERR(new_dentry))
4146 4147 4148 4149 4150
		goto out;

	error = -EXDEV;
	if (old_path.mnt != new_path.mnt)
		goto out_dput;
K
Kees Cook 已提交
4151 4152 4153
	error = may_linkat(&old_path);
	if (unlikely(error))
		goto out_dput;
4154
	error = security_path_link(old_path.dentry, &new_path, new_dentry);
4155
	if (error)
4156
		goto out_dput;
J
J. Bruce Fields 已提交
4157
	error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
4158
out_dput:
A
Al Viro 已提交
4159
	done_path_create(&new_path, new_dentry);
J
J. Bruce Fields 已提交
4160 4161
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
4162 4163
		if (!error) {
			path_put(&old_path);
J
J. Bruce Fields 已提交
4164
			goto retry;
4165
		}
J
J. Bruce Fields 已提交
4166
	}
4167
	if (retry_estale(error, how)) {
4168
		path_put(&old_path);
4169 4170 4171
		how |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
4172
out:
4173
	path_put(&old_path);
L
Linus Torvalds 已提交
4174 4175 4176 4177

	return error;
}

4178 4179 4180 4181 4182 4183
SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, int, flags)
{
	return do_linkat(olddfd, oldname, newdfd, newname, flags);
}

4184
SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
4185
{
4186
	return do_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4187 4188
}

4189 4190 4191 4192 4193 4194 4195
/**
 * vfs_rename - rename a filesystem object
 * @old_dir:	parent of source
 * @old_dentry:	source
 * @new_dir:	parent of destination
 * @new_dentry:	destination
 * @delegated_inode: returns an inode needing a delegation break
M
Miklos Szeredi 已提交
4196
 * @flags:	rename flags
4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210
 *
 * The caller must hold multiple mutexes--see lock_rename()).
 *
 * If vfs_rename discovers a delegation in need of breaking at either
 * the source or destination, it will return -EWOULDBLOCK and return a
 * reference to the inode in delegated_inode.  The caller should then
 * break the delegation and retry.  Because breaking a delegation may
 * take a long time, the caller should drop all locks before doing
 * so.
 *
 * Alternatively, a caller may pass NULL for delegated_inode.  This may
 * be appropriate for callers that expect the underlying filesystem not
 * to be NFS exported.
 *
L
Linus Torvalds 已提交
4211 4212 4213
 * The worst of all namespace operations - renaming directory. "Perverted"
 * doesn't even start to describe it. Somebody in UCB had a heck of a trip...
 * Problems:
4214
 *
4215
 *	a) we can get into loop creation.
L
Linus Torvalds 已提交
4216 4217
 *	b) race potential - two innocent renames can create a loop together.
 *	   That's where 4.4 screws up. Current fix: serialization on
4218
 *	   sb->s_vfs_rename_mutex. We might be more accurate, but that's another
L
Linus Torvalds 已提交
4219
 *	   story.
4220 4221
 *	c) we have to lock _four_ objects - parents and victim (if it exists),
 *	   and source (if it is not a directory).
4222
 *	   And that - after we got ->i_mutex on parents (until then we don't know
L
Linus Torvalds 已提交
4223 4224
 *	   whether the target exists).  Solution: try to be smart with locking
 *	   order for inodes.  We rely on the fact that tree topology may change
4225
 *	   only under ->s_vfs_rename_mutex _and_ that parent of the object we
L
Linus Torvalds 已提交
4226 4227 4228
 *	   move will be locked.  Thus we can rank directories by the tree
 *	   (ancestors first) and rank all non-directories after them.
 *	   That works since everybody except rename does "lock parent, lookup,
4229
 *	   lock child" and rename is under ->s_vfs_rename_mutex.
L
Linus Torvalds 已提交
4230 4231 4232
 *	   HOWEVER, it relies on the assumption that any object with ->lookup()
 *	   has no more than 1 dentry.  If "hybrid" objects will ever appear,
 *	   we'd better make sure that there's no link(2) for them.
4233
 *	d) conversion from fhandle to dentry may come in the wrong moment - when
4234
 *	   we are removing the target. Solution: we will have to grab ->i_mutex
L
Linus Torvalds 已提交
4235
 *	   in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
4236
 *	   ->i_mutex on parents, which works but leads to some truly excessive
L
Linus Torvalds 已提交
4237 4238
 *	   locking].
 */
4239 4240
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	       struct inode *new_dir, struct dentry *new_dentry,
M
Miklos Szeredi 已提交
4241
	       struct inode **delegated_inode, unsigned int flags)
L
Linus Torvalds 已提交
4242
{
4243 4244 4245
	int error;
	bool is_dir = d_is_dir(old_dentry);
	struct inode *source = old_dentry->d_inode;
S
Sage Weil 已提交
4246
	struct inode *target = new_dentry->d_inode;
M
Miklos Szeredi 已提交
4247 4248
	bool new_is_dir = false;
	unsigned max_links = new_dir->i_sb->s_max_links;
A
Al Viro 已提交
4249
	struct name_snapshot old_name;
4250

4251
	if (source == target)
4252 4253 4254 4255 4256 4257
		return 0;

	error = may_delete(old_dir, old_dentry, is_dir);
	if (error)
		return error;

M
Miklos Szeredi 已提交
4258
	if (!target) {
4259
		error = may_create(new_dir, new_dentry);
M
Miklos Szeredi 已提交
4260 4261 4262 4263 4264 4265 4266 4267
	} else {
		new_is_dir = d_is_dir(new_dentry);

		if (!(flags & RENAME_EXCHANGE))
			error = may_delete(new_dir, new_dentry, is_dir);
		else
			error = may_delete(new_dir, new_dentry, new_is_dir);
	}
4268 4269 4270
	if (error)
		return error;

4271
	if (!old_dir->i_op->rename)
4272
		return -EPERM;
L
Linus Torvalds 已提交
4273 4274 4275 4276 4277

	/*
	 * If we are going to change the parent - check write permissions,
	 * we'll need to flip '..'.
	 */
M
Miklos Szeredi 已提交
4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288
	if (new_dir != old_dir) {
		if (is_dir) {
			error = inode_permission(source, MAY_WRITE);
			if (error)
				return error;
		}
		if ((flags & RENAME_EXCHANGE) && new_is_dir) {
			error = inode_permission(target, MAY_WRITE);
			if (error)
				return error;
		}
L
Linus Torvalds 已提交
4289 4290
	}

4291 4292
	error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
				      flags);
L
Linus Torvalds 已提交
4293 4294 4295
	if (error)
		return error;

A
Al Viro 已提交
4296
	take_dentry_name_snapshot(&old_name, old_dentry);
4297
	dget(new_dentry);
M
Miklos Szeredi 已提交
4298
	if (!is_dir || (flags & RENAME_EXCHANGE))
4299 4300
		lock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4301
		inode_lock(target);
S
Sage Weil 已提交
4302

4303 4304 4305 4306
	error = -EPERM;
	if (IS_SWAPFILE(source) || (target && IS_SWAPFILE(target)))
		goto out;

S
Sage Weil 已提交
4307
	error = -EBUSY;
4308
	if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry))
S
Sage Weil 已提交
4309 4310
		goto out;

M
Miklos Szeredi 已提交
4311
	if (max_links && new_dir != old_dir) {
4312
		error = -EMLINK;
M
Miklos Szeredi 已提交
4313
		if (is_dir && !new_is_dir && new_dir->i_nlink >= max_links)
4314
			goto out;
M
Miklos Szeredi 已提交
4315 4316 4317 4318 4319
		if ((flags & RENAME_EXCHANGE) && !is_dir && new_is_dir &&
		    old_dir->i_nlink >= max_links)
			goto out;
	}
	if (!is_dir) {
4320
		error = try_break_deleg(source, delegated_inode);
4321 4322
		if (error)
			goto out;
M
Miklos Szeredi 已提交
4323 4324 4325 4326 4327
	}
	if (target && !new_is_dir) {
		error = try_break_deleg(target, delegated_inode);
		if (error)
			goto out;
4328
	}
4329
	error = old_dir->i_op->rename(old_dir, old_dentry,
M
Miklos Szeredi 已提交
4330
				       new_dir, new_dentry, flags);
S
Sage Weil 已提交
4331 4332 4333
	if (error)
		goto out;

M
Miklos Szeredi 已提交
4334
	if (!(flags & RENAME_EXCHANGE) && target) {
4335 4336
		if (is_dir) {
			shrink_dcache_parent(new_dentry);
4337
			target->i_flags |= S_DEAD;
4338
		}
S
Sage Weil 已提交
4339
		dont_mount(new_dentry);
4340
		detach_mounts(new_dentry);
4341
	}
M
Miklos Szeredi 已提交
4342 4343 4344 4345 4346 4347
	if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) {
		if (!(flags & RENAME_EXCHANGE))
			d_move(old_dentry, new_dentry);
		else
			d_exchange(old_dentry, new_dentry);
	}
S
Sage Weil 已提交
4348
out:
M
Miklos Szeredi 已提交
4349
	if (!is_dir || (flags & RENAME_EXCHANGE))
4350 4351
		unlock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4352
		inode_unlock(target);
L
Linus Torvalds 已提交
4353
	dput(new_dentry);
M
Miklos Szeredi 已提交
4354
	if (!error) {
4355
		fsnotify_move(old_dir, new_dir, &old_name.name, is_dir,
M
Miklos Szeredi 已提交
4356 4357
			      !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
		if (flags & RENAME_EXCHANGE) {
4358
			fsnotify_move(new_dir, old_dir, &old_dentry->d_name,
M
Miklos Szeredi 已提交
4359 4360 4361
				      new_is_dir, NULL, new_dentry);
		}
	}
A
Al Viro 已提交
4362
	release_dentry_name_snapshot(&old_name);
R
Robert Love 已提交
4363

L
Linus Torvalds 已提交
4364 4365
	return error;
}
4366
EXPORT_SYMBOL(vfs_rename);
L
Linus Torvalds 已提交
4367

4368 4369
static int do_renameat2(int olddfd, const char __user *oldname, int newdfd,
			const char __user *newname, unsigned int flags)
L
Linus Torvalds 已提交
4370
{
4371 4372
	struct dentry *old_dentry, *new_dentry;
	struct dentry *trap;
4373 4374 4375
	struct path old_path, new_path;
	struct qstr old_last, new_last;
	int old_type, new_type;
4376
	struct inode *delegated_inode = NULL;
4377 4378
	struct filename *from;
	struct filename *to;
4379
	unsigned int lookup_flags = 0, target_flags = LOOKUP_RENAME_TARGET;
4380
	bool should_retry = false;
4381
	int error;
M
Miklos Szeredi 已提交
4382

M
Miklos Szeredi 已提交
4383
	if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
M
Miklos Szeredi 已提交
4384 4385
		return -EINVAL;

M
Miklos Szeredi 已提交
4386 4387
	if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) &&
	    (flags & RENAME_EXCHANGE))
M
Miklos Szeredi 已提交
4388 4389
		return -EINVAL;

4390 4391 4392
	if (flags & RENAME_EXCHANGE)
		target_flags = 0;

4393
retry:
A
Al Viro 已提交
4394 4395
	from = filename_parentat(olddfd, getname(oldname), lookup_flags,
				&old_path, &old_last, &old_type);
4396 4397
	if (IS_ERR(from)) {
		error = PTR_ERR(from);
L
Linus Torvalds 已提交
4398
		goto exit;
4399
	}
L
Linus Torvalds 已提交
4400

A
Al Viro 已提交
4401 4402
	to = filename_parentat(newdfd, getname(newname), lookup_flags,
				&new_path, &new_last, &new_type);
4403 4404
	if (IS_ERR(to)) {
		error = PTR_ERR(to);
L
Linus Torvalds 已提交
4405
		goto exit1;
4406
	}
L
Linus Torvalds 已提交
4407 4408

	error = -EXDEV;
4409
	if (old_path.mnt != new_path.mnt)
L
Linus Torvalds 已提交
4410 4411 4412
		goto exit2;

	error = -EBUSY;
4413
	if (old_type != LAST_NORM)
L
Linus Torvalds 已提交
4414 4415
		goto exit2;

M
Miklos Szeredi 已提交
4416 4417
	if (flags & RENAME_NOREPLACE)
		error = -EEXIST;
4418
	if (new_type != LAST_NORM)
L
Linus Torvalds 已提交
4419 4420
		goto exit2;

4421
	error = mnt_want_write(old_path.mnt);
4422 4423 4424
	if (error)
		goto exit2;

4425
retry_deleg:
4426
	trap = lock_rename(new_path.dentry, old_path.dentry);
L
Linus Torvalds 已提交
4427

4428
	old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags);
L
Linus Torvalds 已提交
4429 4430 4431 4432 4433
	error = PTR_ERR(old_dentry);
	if (IS_ERR(old_dentry))
		goto exit3;
	/* source must exist */
	error = -ENOENT;
4434
	if (d_is_negative(old_dentry))
L
Linus Torvalds 已提交
4435
		goto exit4;
4436
	new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags);
M
Miklos Szeredi 已提交
4437 4438 4439 4440 4441 4442
	error = PTR_ERR(new_dentry);
	if (IS_ERR(new_dentry))
		goto exit4;
	error = -EEXIST;
	if ((flags & RENAME_NOREPLACE) && d_is_positive(new_dentry))
		goto exit5;
M
Miklos Szeredi 已提交
4443 4444 4445 4446 4447 4448 4449
	if (flags & RENAME_EXCHANGE) {
		error = -ENOENT;
		if (d_is_negative(new_dentry))
			goto exit5;

		if (!d_is_dir(new_dentry)) {
			error = -ENOTDIR;
4450
			if (new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4451 4452 4453
				goto exit5;
		}
	}
L
Linus Torvalds 已提交
4454
	/* unless the source is a directory trailing slashes give -ENOTDIR */
M
Miklos Szeredi 已提交
4455
	if (!d_is_dir(old_dentry)) {
L
Linus Torvalds 已提交
4456
		error = -ENOTDIR;
4457
		if (old_last.name[old_last.len])
M
Miklos Szeredi 已提交
4458
			goto exit5;
4459
		if (!(flags & RENAME_EXCHANGE) && new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4460
			goto exit5;
L
Linus Torvalds 已提交
4461 4462 4463 4464
	}
	/* source should not be ancestor of target */
	error = -EINVAL;
	if (old_dentry == trap)
M
Miklos Szeredi 已提交
4465
		goto exit5;
L
Linus Torvalds 已提交
4466
	/* target should not be an ancestor of source */
M
Miklos Szeredi 已提交
4467 4468
	if (!(flags & RENAME_EXCHANGE))
		error = -ENOTEMPTY;
L
Linus Torvalds 已提交
4469 4470 4471
	if (new_dentry == trap)
		goto exit5;

4472 4473
	error = security_path_rename(&old_path, old_dentry,
				     &new_path, new_dentry, flags);
4474
	if (error)
4475
		goto exit5;
4476 4477
	error = vfs_rename(old_path.dentry->d_inode, old_dentry,
			   new_path.dentry->d_inode, new_dentry,
M
Miklos Szeredi 已提交
4478
			   &delegated_inode, flags);
L
Linus Torvalds 已提交
4479 4480 4481 4482 4483
exit5:
	dput(new_dentry);
exit4:
	dput(old_dentry);
exit3:
4484
	unlock_rename(new_path.dentry, old_path.dentry);
4485 4486 4487 4488 4489
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
		if (!error)
			goto retry_deleg;
	}
4490
	mnt_drop_write(old_path.mnt);
L
Linus Torvalds 已提交
4491
exit2:
4492 4493
	if (retry_estale(error, lookup_flags))
		should_retry = true;
4494
	path_put(&new_path);
4495
	putname(to);
L
Linus Torvalds 已提交
4496
exit1:
4497
	path_put(&old_path);
L
Linus Torvalds 已提交
4498
	putname(from);
4499 4500 4501 4502 4503
	if (should_retry) {
		should_retry = false;
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4504
exit:
L
Linus Torvalds 已提交
4505 4506 4507
	return error;
}

4508 4509 4510 4511 4512 4513
SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, unsigned int, flags)
{
	return do_renameat2(olddfd, oldname, newdfd, newname, flags);
}

M
Miklos Szeredi 已提交
4514 4515 4516
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
4517
	return do_renameat2(olddfd, oldname, newdfd, newname, 0);
M
Miklos Szeredi 已提交
4518 4519
}

4520
SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4521
{
4522
	return do_renameat2(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4523 4524
}

A
Al Viro 已提交
4525
int readlink_copy(char __user *buffer, int buflen, const char *link)
L
Linus Torvalds 已提交
4526
{
A
Al Viro 已提交
4527
	int len = PTR_ERR(link);
L
Linus Torvalds 已提交
4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539
	if (IS_ERR(link))
		goto out;

	len = strlen(link);
	if (len > (unsigned) buflen)
		len = buflen;
	if (copy_to_user(buffer, link, len))
		len = -EFAULT;
out:
	return len;
}

4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552
/**
 * vfs_readlink - copy symlink body into userspace buffer
 * @dentry: dentry on which to get symbolic link
 * @buffer: user memory pointer
 * @buflen: size of buffer
 *
 * Does not touch atime.  That's up to the caller if necessary
 *
 * Does not call security hook.
 */
int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
	struct inode *inode = d_inode(dentry);
4553 4554 4555
	DEFINE_DELAYED_CALL(done);
	const char *link;
	int res;
4556

4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567
	if (unlikely(!(inode->i_opflags & IOP_DEFAULT_READLINK))) {
		if (unlikely(inode->i_op->readlink))
			return inode->i_op->readlink(dentry, buffer, buflen);

		if (!d_is_symlink(dentry))
			return -EINVAL;

		spin_lock(&inode->i_lock);
		inode->i_opflags |= IOP_DEFAULT_READLINK;
		spin_unlock(&inode->i_lock);
	}
4568

4569
	link = READ_ONCE(inode->i_link);
4570 4571 4572 4573 4574 4575 4576 4577
	if (!link) {
		link = inode->i_op->get_link(dentry, inode, &done);
		if (IS_ERR(link))
			return PTR_ERR(link);
	}
	res = readlink_copy(buffer, buflen, link);
	do_delayed_call(&done);
	return res;
4578 4579
}
EXPORT_SYMBOL(vfs_readlink);
L
Linus Torvalds 已提交
4580

M
Miklos Szeredi 已提交
4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605
/**
 * vfs_get_link - get symlink body
 * @dentry: dentry on which to get symbolic link
 * @done: caller needs to free returned data with this
 *
 * Calls security hook and i_op->get_link() on the supplied inode.
 *
 * It does not touch atime.  That's up to the caller if necessary.
 *
 * Does not work on "special" symlinks like /proc/$$/fd/N
 */
const char *vfs_get_link(struct dentry *dentry, struct delayed_call *done)
{
	const char *res = ERR_PTR(-EINVAL);
	struct inode *inode = d_inode(dentry);

	if (d_is_symlink(dentry)) {
		res = ERR_PTR(security_inode_readlink(dentry));
		if (!res)
			res = inode->i_op->get_link(dentry, inode, done);
	}
	return res;
}
EXPORT_SYMBOL(vfs_get_link);

L
Linus Torvalds 已提交
4606
/* get the link contents into pagecache */
4607
const char *page_get_link(struct dentry *dentry, struct inode *inode,
4608
			  struct delayed_call *callback)
L
Linus Torvalds 已提交
4609
{
4610 4611
	char *kaddr;
	struct page *page;
4612 4613
	struct address_space *mapping = inode->i_mapping;

4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626
	if (!dentry) {
		page = find_get_page(mapping, 0);
		if (!page)
			return ERR_PTR(-ECHILD);
		if (!PageUptodate(page)) {
			put_page(page);
			return ERR_PTR(-ECHILD);
		}
	} else {
		page = read_mapping_page(mapping, 0, NULL);
		if (IS_ERR(page))
			return (char*)page;
	}
4627
	set_delayed_call(callback, page_put_link, page);
4628 4629
	BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
	kaddr = page_address(page);
4630
	nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
4631
	return kaddr;
L
Linus Torvalds 已提交
4632 4633
}

4634
EXPORT_SYMBOL(page_get_link);
L
Linus Torvalds 已提交
4635

4636
void page_put_link(void *arg)
L
Linus Torvalds 已提交
4637
{
4638
	put_page(arg);
L
Linus Torvalds 已提交
4639
}
4640
EXPORT_SYMBOL(page_put_link);
L
Linus Torvalds 已提交
4641

4642 4643
int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
4644
	DEFINE_DELAYED_CALL(done);
4645 4646
	int res = readlink_copy(buffer, buflen,
				page_get_link(dentry, d_inode(dentry),
4647 4648
					      &done));
	do_delayed_call(&done);
4649 4650 4651 4652
	return res;
}
EXPORT_SYMBOL(page_readlink);

4653 4654 4655 4656
/*
 * The nofs argument instructs pagecache_write_begin to pass AOP_FLAG_NOFS
 */
int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
L
Linus Torvalds 已提交
4657 4658
{
	struct address_space *mapping = inode->i_mapping;
4659
	struct page *page;
4660
	void *fsdata;
4661
	int err;
4662
	unsigned int flags = 0;
4663 4664
	if (nofs)
		flags |= AOP_FLAG_NOFS;
L
Linus Torvalds 已提交
4665

4666
retry:
4667
	err = pagecache_write_begin(NULL, mapping, 0, len-1,
4668
				flags, &page, &fsdata);
L
Linus Torvalds 已提交
4669
	if (err)
4670 4671
		goto fail;

4672
	memcpy(page_address(page), symname, len-1);
4673 4674 4675

	err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
							page, fsdata);
L
Linus Torvalds 已提交
4676 4677
	if (err < 0)
		goto fail;
4678 4679 4680
	if (err < len-1)
		goto retry;

L
Linus Torvalds 已提交
4681 4682 4683 4684 4685
	mark_inode_dirty(inode);
	return 0;
fail:
	return err;
}
4686
EXPORT_SYMBOL(__page_symlink);
L
Linus Torvalds 已提交
4687

4688 4689 4690
int page_symlink(struct inode *inode, const char *symname, int len)
{
	return __page_symlink(inode, symname, len,
4691
			!mapping_gfp_constraint(inode->i_mapping, __GFP_FS));
4692
}
4693
EXPORT_SYMBOL(page_symlink);
4694

4695
const struct inode_operations page_symlink_inode_operations = {
4696
	.get_link	= page_get_link,
L
Linus Torvalds 已提交
4697 4698
};
EXPORT_SYMBOL(page_symlink_inode_operations);