namei.c 120.0 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 507
	struct path	root;
	struct inode	*inode; /* path.dentry.d_inode */
	unsigned int	flags;
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
static void set_nameidata(struct nameidata *p, int dfd, struct filename *name)
527
{
528 529
	struct nameidata *old = current->nameidata;
	p->stack = p->internal;
530 531
	p->dfd = dfd;
	p->name = name;
532
	p->total_link_count = old ? old->total_link_count : 0;
533
	p->saved = old;
534
	current->nameidata = p;
535 536
}

537
static void restore_nameidata(void)
538
{
539
	struct nameidata *now = current->nameidata, *old = now->saved;
540 541 542 543

	current->nameidata = old;
	if (old)
		old->total_link_count = now->total_link_count;
544
	if (now->stack != now->internal)
545
		kfree(now->stack);
546 547
}

548
static bool nd_alloc_stack(struct nameidata *nd)
549
{
A
Al Viro 已提交
550 551
	struct saved *p;

552 553 554 555
	p= kmalloc_array(MAXSYMLINKS, sizeof(struct saved),
			 nd->flags & LOOKUP_RCU ? GFP_ATOMIC : GFP_KERNEL);
	if (unlikely(!p))
		return false;
556 557
	memcpy(p, nd->internal, sizeof(nd->internal));
	nd->stack = p;
558
	return true;
559 560
}

561
/**
562
 * path_connected - Verify that a dentry is below mnt.mnt_root
563 564 565 566
 *
 * Rename can sometimes move a file or directory outside of a bind
 * mount, path_connected allows those cases to be detected.
 */
567
static bool path_connected(struct vfsmount *mnt, struct dentry *dentry)
568
{
569
	struct super_block *sb = mnt->mnt_sb;
570

571 572
	/* Bind mounts can have disconnected paths */
	if (mnt->mnt_root == sb->s_root)
573 574
		return true;

575
	return is_subdir(dentry, mnt->mnt_root);
576 577
}

578 579 580 581 582
static void drop_links(struct nameidata *nd)
{
	int i = nd->depth;
	while (i--) {
		struct saved *last = nd->stack + i;
583 584
		do_delayed_call(&last->done);
		clear_delayed_call(&last->done);
585 586 587 588 589 590 591 592 593 594 595
	}
}

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);
596
		if (nd->flags & LOOKUP_ROOT_GRABBED) {
597
			path_put(&nd->root);
598
			nd->flags &= ~LOOKUP_ROOT_GRABBED;
599
		}
600 601 602 603 604 605 606 607
	} else {
		nd->flags &= ~LOOKUP_RCU;
		rcu_read_unlock();
	}
	nd->depth = 0;
}

/* path_put is needed afterwards regardless of success or failure */
608
static bool __legitimize_path(struct path *path, unsigned seq, unsigned mseq)
609
{
610
	int res = __legitimize_mnt(path->mnt, mseq);
611 612 613 614 615 616 617 618 619 620 621 622 623
	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);
}

624 625 626
static inline bool legitimize_path(struct nameidata *nd,
			    struct path *path, unsigned seq)
{
A
Al Viro 已提交
627
	return __legitimize_path(path, seq, nd->m_seq);
628 629
}

630 631 632 633 634 635 636 637 638 639 640 641 642 643
static bool legitimize_links(struct nameidata *nd)
{
	int i;
	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;
}

644 645
static bool legitimize_root(struct nameidata *nd)
{
646 647 648 649 650 651 652 653
	/*
	 * 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. */
654 655
	if (!nd->root.mnt || (nd->flags & LOOKUP_ROOT))
		return true;
656
	nd->flags |= LOOKUP_ROOT_GRABBED;
657 658 659
	return legitimize_path(nd, &nd->root, nd->root_seq);
}

A
Al Viro 已提交
660
/*
N
Nick Piggin 已提交
661
 * Path walking has 2 modes, rcu-walk and ref-walk (see
A
Al Viro 已提交
662 663
 * 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 已提交
664
 * normal reference counts on dentries and vfsmounts to transition to ref-walk
A
Al Viro 已提交
665 666 667 668
 * 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 已提交
669 670 671
 */

/**
A
Al Viro 已提交
672 673
 * unlazy_walk - try to switch to ref-walk mode.
 * @nd: nameidata pathwalk data
674
 * Returns: 0 on success, -ECHILD on failure
N
Nick Piggin 已提交
675
 *
A
Al Viro 已提交
676 677 678
 * unlazy_walk attempts to legitimize the current nd->path and nd->root
 * for ref-walk mode.
 * Must be called from rcu-walk context.
679 680
 * Nothing should touch nameidata between unlazy_walk() failure and
 * terminate_walk().
N
Nick Piggin 已提交
681
 */
A
Al Viro 已提交
682
static int unlazy_walk(struct nameidata *nd)
N
Nick Piggin 已提交
683 684 685 686
{
	struct dentry *parent = nd->path.dentry;

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

A
Al Viro 已提交
688 689 690
	nd->flags &= ~LOOKUP_RCU;
	if (unlikely(!legitimize_links(nd)))
		goto out1;
691 692
	if (unlikely(!legitimize_path(nd, &nd->path, nd->seq)))
		goto out;
693 694
	if (unlikely(!legitimize_root(nd)))
		goto out;
A
Al Viro 已提交
695 696 697 698
	rcu_read_unlock();
	BUG_ON(nd->inode != parent->d_inode);
	return 0;

699
out1:
A
Al Viro 已提交
700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723
	nd->path.mnt = NULL;
	nd->path.dentry = NULL;
out:
	rcu_read_unlock();
	return -ECHILD;
}

/**
 * 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));

724
	nd->flags &= ~LOOKUP_RCU;
725 726 727 728
	if (unlikely(!legitimize_links(nd)))
		goto out2;
	if (unlikely(!legitimize_mnt(nd->path.mnt, nd->m_seq)))
		goto out2;
A
Al Viro 已提交
729
	if (unlikely(!lockref_get_not_dead(&nd->path.dentry->d_lockref)))
730
		goto out1;
A
Al Viro 已提交
731

732
	/*
A
Al Viro 已提交
733 734 735 736 737
	 * 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
738
	 */
A
Al Viro 已提交
739 740
	if (unlikely(!lockref_get_not_dead(&dentry->d_lockref)))
		goto out;
741 742
	if (unlikely(read_seqcount_retry(&dentry->d_seq, seq)))
		goto out_dput;
743 744 745 746
	/*
	 * Sequence counts matched. Now make sure that the root is
	 * still valid and get it if required.
	 */
747 748
	if (unlikely(!legitimize_root(nd)))
		goto out_dput;
A
Al Viro 已提交
749
	rcu_read_unlock();
N
Nick Piggin 已提交
750
	return 0;
A
Al Viro 已提交
751

752 753 754 755
out2:
	nd->path.mnt = NULL;
out1:
	nd->path.dentry = NULL;
756
out:
A
Al Viro 已提交
757
	rcu_read_unlock();
758 759 760 761
	return -ECHILD;
out_dput:
	rcu_read_unlock();
	dput(dentry);
N
Nick Piggin 已提交
762 763 764
	return -ECHILD;
}

765
static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
766
{
767 768 769 770
	if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
		return dentry->d_op->d_revalidate(dentry, flags);
	else
		return 1;
771 772
}

773 774 775
/**
 * complete_walk - successful completion of path walk
 * @nd:  pointer nameidata
776
 *
777 778 779 780 781
 * 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.
782
 */
783
static int complete_walk(struct nameidata *nd)
784
{
A
Al Viro 已提交
785
	struct dentry *dentry = nd->path.dentry;
786 787
	int status;

788
	if (nd->flags & LOOKUP_RCU) {
789 790 791 792 793
		/*
		 * We don't want to zero nd->root for scoped-lookups or
		 * externally-managed nd->root.
		 */
		if (!(nd->flags & (LOOKUP_ROOT | LOOKUP_IS_SCOPED)))
794
			nd->root.mnt = NULL;
A
Al Viro 已提交
795
		if (unlikely(unlazy_walk(nd)))
796 797 798
			return -ECHILD;
	}

799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819
	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;
	}

A
Al Viro 已提交
820 821 822
	if (likely(!(nd->flags & LOOKUP_JUMPED)))
		return 0;

823
	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
824 825
		return 0;

826
	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
827 828 829
	if (status > 0)
		return 0;

A
Al Viro 已提交
830
	if (!status)
831
		status = -ESTALE;
A
Al Viro 已提交
832

833 834 835
	return status;
}

836
static int set_root(struct nameidata *nd)
N
Nick Piggin 已提交
837
{
838
	struct fs_struct *fs = current->fs;
N
Nick Piggin 已提交
839

840 841 842 843 844 845 846 847
	/*
	 * 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;

848 849 850 851 852 853 854 855 856 857
	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);
858
		nd->flags |= LOOKUP_ROOT_GRABBED;
859
	}
860
	return 0;
N
Nick Piggin 已提交
861 862
}

863 864
static int nd_jump_root(struct nameidata *nd)
{
865 866
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return -EXDEV;
867 868 869 870 871
	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;
	}
872 873 874 875 876
	if (!nd->root.mnt) {
		int error = set_root(nd);
		if (error)
			return error;
	}
877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894
	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;
	}
	nd->flags |= LOOKUP_JUMPED;
	return 0;
}

C
Christoph Hellwig 已提交
895
/*
896
 * Helper to directly jump to a known parsed path from ->get_link,
C
Christoph Hellwig 已提交
897 898
 * caller must have taken a reference to path beforehand.
 */
899
int nd_jump_link(struct path *path)
C
Christoph Hellwig 已提交
900
{
901
	int error = -ELOOP;
902
	struct nameidata *nd = current->nameidata;
C
Christoph Hellwig 已提交
903

904 905 906
	if (unlikely(nd->flags & LOOKUP_NO_MAGICLINKS))
		goto err;

907 908 909 910 911
	error = -EXDEV;
	if (unlikely(nd->flags & LOOKUP_NO_XDEV)) {
		if (nd->path.mnt != path->mnt)
			goto err;
	}
912 913 914
	/* Not currently safe for scoped-lookups. */
	if (unlikely(nd->flags & LOOKUP_IS_SCOPED))
		goto err;
915

916
	path_put(&nd->path);
C
Christoph Hellwig 已提交
917 918 919
	nd->path = *path;
	nd->inode = nd->path.dentry->d_inode;
	nd->flags |= LOOKUP_JUMPED;
920
	return 0;
921 922 923 924

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

927
static inline void put_link(struct nameidata *nd)
928
{
A
Al Viro 已提交
929
	struct saved *last = nd->stack + --nd->depth;
930
	do_delayed_call(&last->done);
A
Al Viro 已提交
931 932
	if (!(nd->flags & LOOKUP_RCU))
		path_put(&last->link);
933 934
}

935 936
int sysctl_protected_symlinks __read_mostly = 0;
int sysctl_protected_hardlinks __read_mostly = 0;
937 938
int sysctl_protected_fifos __read_mostly;
int sysctl_protected_regular __read_mostly;
K
Kees Cook 已提交
939 940 941

/**
 * may_follow_link - Check symlink following for unsafe situations
942
 * @nd: nameidata pathwalk data
K
Kees Cook 已提交
943 944 945 946 947 948 949 950 951 952 953 954
 *
 * 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.
 */
955
static inline int may_follow_link(struct nameidata *nd, const struct inode *inode)
K
Kees Cook 已提交
956 957 958 959 960
{
	if (!sysctl_protected_symlinks)
		return 0;

	/* Allowed if owner and follower match. */
961
	if (uid_eq(current_cred()->fsuid, inode->i_uid))
K
Kees Cook 已提交
962 963 964
		return 0;

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

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

972 973 974
	if (nd->flags & LOOKUP_RCU)
		return -ECHILD;

975
	audit_inode(nd->name, nd->stack[0].link.dentry, 0);
K
Kees Cook 已提交
976
	audit_log_path_denied(AUDIT_ANOM_LINK, "follow_link");
K
Kees Cook 已提交
977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 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
	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)
1023
 *  - not CAP_FOWNER in a namespace with the inode owner uid mapped
K
Kees Cook 已提交
1024 1025 1026
 *
 * Returns 0 if successful, -ve on error.
 */
1027
int may_linkat(struct path *link)
K
Kees Cook 已提交
1028
{
1029 1030 1031 1032 1033
	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 已提交
1034 1035 1036 1037 1038 1039 1040

	if (!sysctl_protected_hardlinks)
		return 0;

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

K
Kees Cook 已提交
1044
	audit_log_path_denied(AUDIT_ANOM_LINK, "linkat");
K
Kees Cook 已提交
1045 1046 1047
	return -EPERM;
}

1048 1049 1050 1051
/**
 * may_create_in_sticky - Check whether an O_CREAT open in a sticky directory
 *			  should be allowed, or not, on files that already
 *			  exist.
1052 1053
 * @dir_mode: mode bits of directory
 * @dir_uid: owner of directory
1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068
 * @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.
 */
1069
static int may_create_in_sticky(umode_t dir_mode, kuid_t dir_uid,
1070 1071 1072 1073
				struct inode * const inode)
{
	if ((!sysctl_protected_fifos && S_ISFIFO(inode->i_mode)) ||
	    (!sysctl_protected_regular && S_ISREG(inode->i_mode)) ||
1074 1075
	    likely(!(dir_mode & S_ISVTX)) ||
	    uid_eq(inode->i_uid, dir_uid) ||
1076 1077 1078
	    uid_eq(current_fsuid(), inode->i_uid))
		return 0;

1079 1080
	if (likely(dir_mode & 0002) ||
	    (dir_mode & 0020 &&
1081 1082
	     ((sysctl_protected_fifos >= 2 && S_ISFIFO(inode->i_mode)) ||
	      (sysctl_protected_regular >= 2 && S_ISREG(inode->i_mode))))) {
K
Kees Cook 已提交
1083 1084 1085 1086
		const char *operation = S_ISFIFO(inode->i_mode) ?
					"sticky_create_fifo" :
					"sticky_create_regular";
		audit_log_path_denied(AUDIT_ANOM_CREAT, operation);
1087 1088 1089 1090 1091
		return -EACCES;
	}
	return 0;
}

1092 1093 1094 1095 1096 1097 1098 1099 1100 1101
/*
 * 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 已提交
1102
int follow_up(struct path *path)
L
Linus Torvalds 已提交
1103
{
1104 1105
	struct mount *mnt = real_mount(path->mnt);
	struct mount *parent;
L
Linus Torvalds 已提交
1106
	struct dentry *mountpoint;
N
Nick Piggin 已提交
1107

A
Al Viro 已提交
1108
	read_seqlock_excl(&mount_lock);
1109
	parent = mnt->mnt_parent;
A
Al Viro 已提交
1110
	if (parent == mnt) {
A
Al Viro 已提交
1111
		read_sequnlock_excl(&mount_lock);
L
Linus Torvalds 已提交
1112 1113
		return 0;
	}
1114
	mntget(&parent->mnt);
1115
	mountpoint = dget(mnt->mnt_mountpoint);
A
Al Viro 已提交
1116
	read_sequnlock_excl(&mount_lock);
A
Al Viro 已提交
1117 1118 1119
	dput(path->dentry);
	path->dentry = mountpoint;
	mntput(path->mnt);
1120
	path->mnt = &parent->mnt;
L
Linus Torvalds 已提交
1121 1122
	return 1;
}
1123
EXPORT_SYMBOL(follow_up);
L
Linus Torvalds 已提交
1124

A
Al Viro 已提交
1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144
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;
}

1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169
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 已提交
1170
/*
1171 1172 1173
 * Perform an automount
 * - return -EISDIR to tell follow_managed() to stop and return the path we
 *   were called with.
L
Linus Torvalds 已提交
1174
 */
1175
static int follow_automount(struct path *path, int *count, unsigned lookup_flags)
N
Nick Piggin 已提交
1176
{
1177
	struct dentry *dentry = path->dentry;
1178

1179 1180 1181 1182 1183 1184 1185 1186 1187 1188
	/* 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.
1189
	 */
1190
	if (!(lookup_flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
1191
			   LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
1192
	    dentry->d_inode)
1193
		return -EISDIR;
1194

1195
	if (count && (*count)++ >= MAXSYMLINKS)
1196 1197
		return -ELOOP;

1198
	return finish_automount(dentry->d_op->d_automount(path), path);
A
Al Viro 已提交
1199 1200
}

1201
/*
A
Al Viro 已提交
1202 1203 1204 1205
 * 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.
1206
 */
A
Al Viro 已提交
1207 1208
static int __traverse_mounts(struct path *path, unsigned flags, bool *jumped,
			     int *count, unsigned lookup_flags)
L
Linus Torvalds 已提交
1209
{
A
Al Viro 已提交
1210
	struct vfsmount *mnt = path->mnt;
1211
	bool need_mntput = false;
1212
	int ret = 0;
1213

A
Al Viro 已提交
1214
	while (flags & DCACHE_MANAGED_DENTRY) {
1215 1216
		/* Allow the filesystem to manage the transit without i_mutex
		 * being held. */
1217
		if (flags & DCACHE_MANAGE_TRANSIT) {
1218
			ret = path->dentry->d_op->d_manage(path, false);
1219
			flags = smp_load_acquire(&path->dentry->d_flags);
1220
			if (ret < 0)
1221
				break;
1222 1223
		}

A
Al Viro 已提交
1224
		if (flags & DCACHE_MOUNTED) {	// something's mounted on it..
1225
			struct vfsmount *mounted = lookup_mnt(path);
A
Al Viro 已提交
1226
			if (mounted) {		// ... in our namespace
1227 1228 1229 1230 1231
				dput(path->dentry);
				if (need_mntput)
					mntput(path->mnt);
				path->mnt = mounted;
				path->dentry = dget(mounted->mnt_root);
A
Al Viro 已提交
1232 1233
				// here we know it's positive
				flags = path->dentry->d_flags;
1234 1235 1236 1237 1238
				need_mntput = true;
				continue;
			}
		}

A
Al Viro 已提交
1239 1240
		if (!(flags & DCACHE_NEED_AUTOMOUNT))
			break;
1241

A
Al Viro 已提交
1242 1243 1244 1245 1246
		// 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 已提交
1247
	}
1248

A
Al Viro 已提交
1249 1250 1251 1252 1253 1254
	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)))
1255
		ret = -ENOENT;
A
Al Viro 已提交
1256
	*jumped = need_mntput;
1257
	return ret;
L
Linus Torvalds 已提交
1258 1259
}

A
Al Viro 已提交
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274
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);
}

1275
int follow_down_one(struct path *path)
L
Linus Torvalds 已提交
1276 1277 1278
{
	struct vfsmount *mounted;

A
Al Viro 已提交
1279
	mounted = lookup_mnt(path);
L
Linus Torvalds 已提交
1280
	if (mounted) {
A
Al Viro 已提交
1281 1282 1283 1284
		dput(path->dentry);
		mntput(path->mnt);
		path->mnt = mounted;
		path->dentry = dget(mounted->mnt_root);
L
Linus Torvalds 已提交
1285 1286 1287 1288
		return 1;
	}
	return 0;
}
1289
EXPORT_SYMBOL(follow_down_one);
L
Linus Torvalds 已提交
1290

A
Al Viro 已提交
1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307
/*
 * 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);

1308
/*
1309 1310
 * Try to skip to top of mountpoint pile in rcuwalk mode.  Fail if
 * we meet a managed dentry that would need blocking.
1311 1312
 */
static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
1313
			       struct inode **inode, unsigned *seqp)
1314
{
A
Al Viro 已提交
1315 1316 1317 1318 1319 1320 1321 1322 1323
	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;

1324 1325 1326 1327 1328
	for (;;) {
		/*
		 * Don't forget we might have a non-mountpoint managed dentry
		 * that wants to block transit.
		 */
A
Al Viro 已提交
1329 1330 1331 1332 1333
		if (unlikely(flags & DCACHE_MANAGE_TRANSIT)) {
			int res = dentry->d_op->d_manage(path, true);
			if (res)
				return res == -EISDIR;
			flags = dentry->d_flags;
1334
		}
1335

A
Al Viro 已提交
1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 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;
				nd->flags |= LOOKUP_JUMPED;
				*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;
				continue;
			}
			if (read_seqretry(&mount_lock, nd->m_seq))
				return false;
		}
		return !(flags & DCACHE_NEED_AUTOMOUNT);
1357
	}
1358 1359
}

1360 1361 1362
static inline int handle_mounts(struct nameidata *nd, struct dentry *dentry,
			  struct path *path, struct inode **inode,
			  unsigned int *seqp)
1363
{
A
Al Viro 已提交
1364
	bool jumped;
1365
	int ret;
1366

1367 1368
	path->mnt = nd->path.mnt;
	path->dentry = dentry;
1369 1370 1371 1372 1373
	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 已提交
1374
			return 0;
1375 1376 1377 1378 1379 1380
		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 已提交
1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392
	ret = traverse_mounts(path, &jumped, &nd->total_link_count, nd->flags);
	if (jumped) {
		if (unlikely(nd->flags & LOOKUP_NO_XDEV))
			ret = -EXDEV;
		else
			nd->flags |= LOOKUP_JUMPED;
	}
	if (unlikely(ret)) {
		dput(path->dentry);
		if (path->mnt != nd->path.mnt)
			mntput(path->mnt);
	} else {
1393 1394 1395 1396 1397 1398
		*inode = d_backing_inode(path->dentry);
		*seqp = 0; /* out of RCU mode, so the value doesn't matter */
	}
	return ret;
}

1399
/*
1400 1401
 * 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.
1402
 */
1403 1404
static struct dentry *lookup_dcache(const struct qstr *name,
				    struct dentry *dir,
1405
				    unsigned int flags)
1406
{
1407
	struct dentry *dentry = d_lookup(dir, name);
M
Miklos Szeredi 已提交
1408
	if (dentry) {
1409 1410 1411 1412 1413 1414
		int error = d_revalidate(dentry, flags);
		if (unlikely(error <= 0)) {
			if (!error)
				d_invalidate(dentry);
			dput(dentry);
			return ERR_PTR(error);
M
Miklos Szeredi 已提交
1415 1416
		}
	}
1417 1418 1419
	return dentry;
}

1420
/*
1421 1422 1423 1424 1425
 * 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.
1426
 */
1427
static struct dentry *__lookup_hash(const struct qstr *name,
1428
		struct dentry *base, unsigned int flags)
1429
{
1430
	struct dentry *dentry = lookup_dcache(name, base, flags);
1431 1432
	struct dentry *old;
	struct inode *dir = base->d_inode;
1433

1434
	if (dentry)
M
Miklos Szeredi 已提交
1435
		return dentry;
1436

1437 1438 1439 1440
	/* Don't create child dentry for a dead directory. */
	if (unlikely(IS_DEADDIR(dir)))
		return ERR_PTR(-ENOENT);

1441 1442 1443 1444
	dentry = d_alloc(base, name);
	if (unlikely(!dentry))
		return ERR_PTR(-ENOMEM);

1445 1446 1447 1448 1449 1450
	old = dir->i_op->lookup(dir, dentry, flags);
	if (unlikely(old)) {
		dput(dentry);
		dentry = old;
	}
	return dentry;
1451 1452
}

1453 1454 1455
static struct dentry *lookup_fast(struct nameidata *nd,
				  struct inode **inode,
			          unsigned *seqp)
L
Linus Torvalds 已提交
1456
{
N
Nick Piggin 已提交
1457
	struct dentry *dentry, *parent = nd->path.dentry;
A
Al Viro 已提交
1458
	int status = 1;
1459

1460 1461
	/*
	 * Rename seqlock is not required here because in the off chance
A
Al Viro 已提交
1462 1463
	 * of a false negative due to a concurrent rename, the caller is
	 * going to fall back to non-racy lookup.
1464
	 */
N
Nick Piggin 已提交
1465 1466
	if (nd->flags & LOOKUP_RCU) {
		unsigned seq;
1467
		dentry = __d_lookup_rcu(parent, &nd->last, &seq);
A
Al Viro 已提交
1468
		if (unlikely(!dentry)) {
A
Al Viro 已提交
1469
			if (unlazy_walk(nd))
1470 1471
				return ERR_PTR(-ECHILD);
			return NULL;
A
Al Viro 已提交
1472
		}
A
Al Viro 已提交
1473

1474 1475 1476 1477
		/*
		 * This sequence count validates that the inode matches
		 * the dentry name information from lookup.
		 */
1478
		*inode = d_backing_inode(dentry);
A
Al Viro 已提交
1479
		if (unlikely(read_seqcount_retry(&dentry->d_seq, seq)))
1480
			return ERR_PTR(-ECHILD);
1481 1482 1483 1484 1485 1486 1487 1488

		/*
		 * 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 已提交
1489
		if (unlikely(__read_seqcount_retry(&parent->d_seq, nd->seq)))
1490
			return ERR_PTR(-ECHILD);
A
Al Viro 已提交
1491

1492
		*seqp = seq;
1493
		status = d_revalidate(dentry, nd->flags);
1494
		if (likely(status > 0))
1495
			return dentry;
A
Al Viro 已提交
1496
		if (unlazy_child(nd, dentry, seq))
1497
			return ERR_PTR(-ECHILD);
1498 1499 1500
		if (unlikely(status == -ECHILD))
			/* we'd been told to redo it in non-rcu mode */
			status = d_revalidate(dentry, nd->flags);
A
Al Viro 已提交
1501
	} else {
A
Al Viro 已提交
1502
		dentry = __d_lookup(parent, &nd->last);
A
Al Viro 已提交
1503
		if (unlikely(!dentry))
1504
			return NULL;
1505
		status = d_revalidate(dentry, nd->flags);
1506
	}
A
Al Viro 已提交
1507
	if (unlikely(status <= 0)) {
1508
		if (!status)
A
Al Viro 已提交
1509
			d_invalidate(dentry);
1510
		dput(dentry);
1511
		return ERR_PTR(status);
1512
	}
1513
	return dentry;
M
Miklos Szeredi 已提交
1514 1515 1516
}

/* Fast lookup failed, do it the slow way */
A
Al Viro 已提交
1517 1518 1519
static struct dentry *__lookup_slow(const struct qstr *name,
				    struct dentry *dir,
				    unsigned int flags)
M
Miklos Szeredi 已提交
1520
{
A
Al Viro 已提交
1521
	struct dentry *dentry, *old;
1522
	struct inode *inode = dir->d_inode;
1523
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1524 1525

	/* Don't go there if it's already dead */
A
Al Viro 已提交
1526
	if (unlikely(IS_DEADDIR(inode)))
A
Al Viro 已提交
1527
		return ERR_PTR(-ENOENT);
A
Al Viro 已提交
1528
again:
1529
	dentry = d_alloc_parallel(dir, name, &wq);
A
Al Viro 已提交
1530
	if (IS_ERR(dentry))
A
Al Viro 已提交
1531
		return dentry;
A
Al Viro 已提交
1532
	if (unlikely(!d_in_lookup(dentry))) {
1533 1534 1535 1536
		int error = d_revalidate(dentry, flags);
		if (unlikely(error <= 0)) {
			if (!error) {
				d_invalidate(dentry);
1537
				dput(dentry);
1538
				goto again;
1539
			}
1540 1541
			dput(dentry);
			dentry = ERR_PTR(error);
1542
		}
A
Al Viro 已提交
1543 1544 1545 1546 1547 1548
	} else {
		old = inode->i_op->lookup(inode, dentry, flags);
		d_lookup_done(dentry);
		if (unlikely(old)) {
			dput(dentry);
			dentry = old;
1549 1550
		}
	}
1551
	return dentry;
L
Linus Torvalds 已提交
1552 1553
}

A
Al Viro 已提交
1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565
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;
}

1566 1567 1568
static inline int may_lookup(struct nameidata *nd)
{
	if (nd->flags & LOOKUP_RCU) {
1569
		int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1570 1571
		if (err != -ECHILD)
			return err;
A
Al Viro 已提交
1572
		if (unlazy_walk(nd))
1573 1574
			return -ECHILD;
	}
1575
	return inode_permission(nd->inode, MAY_EXEC);
1576 1577
}

1578 1579 1580 1581
static int reserve_stack(struct nameidata *nd, struct path *link, unsigned seq)
{
	if (unlikely(nd->total_link_count++ >= MAXSYMLINKS))
		return -ELOOP;
1582 1583 1584 1585 1586

	if (likely(nd->depth != EMBEDDED_LEVELS))
		return 0;
	if (likely(nd->stack != nd->internal))
		return 0;
1587
	if (likely(nd_alloc_stack(nd)))
1588
		return 0;
1589 1590 1591 1592

	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
1593
		bool grabbed_link = legitimize_path(nd, link, seq);
1594 1595 1596 1597 1598 1599

		if (unlazy_walk(nd) != 0 || !grabbed_link)
			return -ECHILD;

		if (nd_alloc_stack(nd))
			return 0;
1600
	}
1601
	return -ENOMEM;
1602 1603
}

1604 1605
enum {WALK_TRAILING = 1, WALK_MORE = 2, WALK_NOFOLLOW = 4};

1606
static const char *pick_link(struct nameidata *nd, struct path *link,
1607
		     struct inode *inode, unsigned seq, int flags)
1608
{
A
Al Viro 已提交
1609
	struct saved *last;
1610
	const char *res;
1611
	int error = reserve_stack(nd, link, seq);
1612

1613
	if (unlikely(error)) {
1614
		if (!(nd->flags & LOOKUP_RCU))
A
Al Viro 已提交
1615
			path_put(link);
1616
		return ERR_PTR(error);
1617
	}
1618
	last = nd->stack + nd->depth++;
A
Al Viro 已提交
1619
	last->link = *link;
1620
	clear_delayed_call(&last->done);
1621
	last->seq = seq;
1622

1623
	if (flags & WALK_TRAILING) {
1624 1625 1626 1627 1628
		error = may_follow_link(nd, inode);
		if (unlikely(error))
			return ERR_PTR(error);
	}

1629 1630
	if (unlikely(nd->flags & LOOKUP_NO_SYMLINKS) ||
			unlikely(link->mnt->mnt_flags & MNT_NOSYMFOLLOW))
1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678
		return ERR_PTR(-ELOOP);

	if (!(nd->flags & LOOKUP_RCU)) {
		touch_atime(&last->link);
		cond_resched();
	} else if (atime_needs_update(&last->link, inode)) {
		if (unlikely(unlazy_walk(nd)))
			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);
			if (res == ERR_PTR(-ECHILD)) {
				if (unlikely(unlazy_walk(nd)))
					return ERR_PTR(-ECHILD);
				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;
1679 1680
}

1681 1682 1683 1684 1685 1686
/*
 * 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.
 */
1687
static const char *step_into(struct nameidata *nd, int flags,
A
Al Viro 已提交
1688
		     struct dentry *dentry, struct inode *inode, unsigned seq)
1689
{
A
Al Viro 已提交
1690 1691 1692 1693
	struct path path;
	int err = handle_mounts(nd, dentry, &path, &inode, &seq);

	if (err < 0)
1694
		return ERR_PTR(err);
A
Al Viro 已提交
1695
	if (likely(!d_is_symlink(path.dentry)) ||
1696
	   ((flags & WALK_TRAILING) && !(nd->flags & LOOKUP_FOLLOW)) ||
A
Al Viro 已提交
1697
	   (flags & WALK_NOFOLLOW)) {
1698
		/* not a symlink or should not follow */
1699 1700 1701 1702 1703 1704
		if (!(nd->flags & LOOKUP_RCU)) {
			dput(nd->path.dentry);
			if (nd->path.mnt != path.mnt)
				mntput(nd->path.mnt);
		}
		nd->path = path;
1705 1706
		nd->inode = inode;
		nd->seq = seq;
1707
		return NULL;
1708
	}
1709
	if (nd->flags & LOOKUP_RCU) {
1710
		/* make sure that d_is_symlink above matches inode */
A
Al Viro 已提交
1711
		if (read_seqcount_retry(&path.dentry->d_seq, seq))
1712
			return ERR_PTR(-ECHILD);
1713 1714 1715
	} else {
		if (path.mnt == nd->path.mnt)
			mntget(path.mnt);
1716
	}
1717
	return pick_link(nd, &path, inode, seq, flags);
1718 1719
}

1720 1721 1722
static struct dentry *follow_dotdot_rcu(struct nameidata *nd,
					struct inode **inodep,
					unsigned *seqp)
1723
{
A
Al Viro 已提交
1724
	struct dentry *parent, *old;
1725

A
Al Viro 已提交
1726 1727 1728
	if (path_equal(&nd->path, &nd->root))
		goto in_root;
	if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
A
Al Viro 已提交
1729
		struct path path;
1730
		unsigned seq;
A
Al Viro 已提交
1731 1732 1733
		if (!choose_mountpoint_rcu(real_mount(nd->path.mnt),
					   &nd->root, &path, &seq))
			goto in_root;
1734 1735 1736 1737 1738 1739 1740 1741
		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 */
1742
	}
A
Al Viro 已提交
1743 1744 1745 1746 1747 1748 1749 1750 1751 1752
	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:
1753 1754
	if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
		return ERR_PTR(-ECHILD);
1755 1756 1757
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-ECHILD);
	return NULL;
1758 1759
}

1760 1761 1762
static struct dentry *follow_dotdot(struct nameidata *nd,
				 struct inode **inodep,
				 unsigned *seqp)
1763
{
A
Al Viro 已提交
1764 1765 1766 1767 1768
	struct dentry *parent;

	if (path_equal(&nd->path, &nd->root))
		goto in_root;
	if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
1769 1770 1771 1772 1773
		struct path path;

		if (!choose_mountpoint(real_mount(nd->path.mnt),
				       &nd->root, &path))
			goto in_root;
1774 1775
		path_put(&nd->path);
		nd->path = path;
1776
		nd->inode = path.dentry->d_inode;
1777 1778
		if (unlikely(nd->flags & LOOKUP_NO_XDEV))
			return ERR_PTR(-EXDEV);
1779
	}
A
Al Viro 已提交
1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790
	/* 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:
1791 1792 1793 1794
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-EXDEV);
	dget(nd->path.dentry);
	return NULL;
1795 1796
}

1797
static const char *handle_dots(struct nameidata *nd, int type)
1798 1799
{
	if (type == LAST_DOTDOT) {
1800
		const char *error = NULL;
1801 1802 1803
		struct dentry *parent;
		struct inode *inode;
		unsigned seq;
1804 1805

		if (!nd->root.mnt) {
1806
			error = ERR_PTR(set_root(nd));
1807 1808 1809 1810
			if (error)
				return error;
		}
		if (nd->flags & LOOKUP_RCU)
1811
			parent = follow_dotdot_rcu(nd, &inode, &seq);
1812
		else
1813 1814 1815 1816 1817 1818 1819 1820 1821 1822
			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))
1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833
			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)))
1834
				return ERR_PTR(-EAGAIN);
1835
			if (unlikely(__read_seqcount_retry(&rename_lock.seqcount, nd->r_seq)))
1836
				return ERR_PTR(-EAGAIN);
1837 1838
		}
	}
1839
	return NULL;
1840 1841
}

1842
static const char *walk_component(struct nameidata *nd, int flags)
1843
{
1844
	struct dentry *dentry;
1845
	struct inode *inode;
1846
	unsigned seq;
1847 1848 1849 1850 1851
	/*
	 * "." and ".." are special - ".." especially so because it has
	 * to be able to know about the current root directory and
	 * parent relationships.
	 */
1852
	if (unlikely(nd->last_type != LAST_NORM)) {
A
Al Viro 已提交
1853
		if (!(flags & WALK_MORE) && nd->depth)
1854
			put_link(nd);
1855
		return handle_dots(nd, nd->last_type);
1856
	}
1857 1858
	dentry = lookup_fast(nd, &inode, &seq);
	if (IS_ERR(dentry))
1859
		return ERR_CAST(dentry);
1860
	if (unlikely(!dentry)) {
1861 1862
		dentry = lookup_slow(&nd->last, nd->path.dentry, nd->flags);
		if (IS_ERR(dentry))
1863
			return ERR_CAST(dentry);
1864
	}
1865 1866
	if (!(flags & WALK_MORE) && nd->depth)
		put_link(nd);
1867
	return step_into(nd, flags, dentry, inode, seq);
1868 1869
}

1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888
/*
 * 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

1889
#include <asm/word-at-a-time.h>
1890

1891
#ifdef HASH_MIX
1892

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

1895
#elif defined(CONFIG_64BIT)
1896
/*
1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923
 * 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)
1924
 */
1925 1926 1927 1928 1929
#define HASH_MIX(x, y, a)	\
	(	x ^= (a),	\
	y ^= x,	x = rol64(x,12),\
	x += y,	y = rol64(y,45),\
	y *= 9			)
1930

1931
/*
1932 1933 1934
 * 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.
1935
 */
1936
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1937
{
1938 1939 1940
	y ^= x * GOLDEN_RATIO_64;
	y *= GOLDEN_RATIO_64;
	return y >> 32;
1941 1942
}

1943 1944
#else	/* 32-bit case */

1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959
/*
 * 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			)
1960

1961
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1962
{
1963 1964
	/* Use arch-optimized multiply if one exists */
	return __hash_32(y ^ __hash_32(x));
1965 1966
}

1967 1968
#endif

1969 1970 1971 1972 1973 1974 1975
/*
 * 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.
 */
1976
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
1977
{
1978
	unsigned long a, x = 0, y = (unsigned long)salt;
1979 1980

	for (;;) {
1981 1982
		if (!len)
			goto done;
1983
		a = load_unaligned_zeropad(name);
1984 1985
		if (len < sizeof(unsigned long))
			break;
1986
		HASH_MIX(x, y, a);
1987 1988 1989
		name += sizeof(unsigned long);
		len -= sizeof(unsigned long);
	}
1990
	x ^= a & bytemask_from_count(len);
1991
done:
1992
	return fold_hash(x, y);
1993 1994 1995
}
EXPORT_SYMBOL(full_name_hash);

1996
/* Return the "hash_len" (hash and length) of a null-terminated string */
1997
u64 hashlen_string(const void *salt, const char *name)
1998
{
1999 2000
	unsigned long a = 0, x = 0, y = (unsigned long)salt;
	unsigned long adata, mask, len;
2001 2002
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;

2003 2004 2005
	len = 0;
	goto inside;

2006
	do {
2007
		HASH_MIX(x, y, a);
2008
		len += sizeof(unsigned long);
2009
inside:
2010 2011 2012 2013 2014
		a = load_unaligned_zeropad(name+len);
	} while (!has_zero(a, &adata, &constants));

	adata = prep_zero_mask(a, adata, &constants);
	mask = create_zero_mask(adata);
2015
	x ^= a & zero_bytemask(mask);
2016

2017
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2018 2019 2020
}
EXPORT_SYMBOL(hashlen_string);

2021 2022
/*
 * Calculate the length and hash of the path component, and
2023
 * return the "hash_len" as the result.
2024
 */
2025
static inline u64 hash_name(const void *salt, const char *name)
2026
{
2027 2028
	unsigned long a = 0, b, x = 0, y = (unsigned long)salt;
	unsigned long adata, bdata, mask, len;
2029
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
2030

2031 2032 2033
	len = 0;
	goto inside;

2034
	do {
2035
		HASH_MIX(x, y, a);
2036
		len += sizeof(unsigned long);
2037
inside:
2038
		a = load_unaligned_zeropad(name+len);
2039 2040 2041 2042 2043 2044
		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);
2045
	x ^= a & zero_bytemask(mask);
2046

2047
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2048 2049
}

2050
#else	/* !CONFIG_DCACHE_WORD_ACCESS: Slow, byte-at-a-time version */
2051

2052
/* Return the hash of a string of known length */
2053
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
L
Linus Torvalds 已提交
2054
{
2055
	unsigned long hash = init_name_hash(salt);
L
Linus Torvalds 已提交
2056
	while (len--)
2057
		hash = partial_name_hash((unsigned char)*name++, hash);
L
Linus Torvalds 已提交
2058 2059
	return end_name_hash(hash);
}
2060
EXPORT_SYMBOL(full_name_hash);
L
Linus Torvalds 已提交
2061

2062
/* Return the "hash_len" (hash and length) of a null-terminated string */
2063
u64 hashlen_string(const void *salt, const char *name)
2064
{
2065
	unsigned long hash = init_name_hash(salt);
2066 2067 2068
	unsigned long len = 0, c;

	c = (unsigned char)*name;
2069
	while (c) {
2070 2071 2072
		len++;
		hash = partial_name_hash(c, hash);
		c = (unsigned char)name[len];
2073
	}
2074 2075
	return hashlen_create(end_name_hash(hash), len);
}
2076
EXPORT_SYMBOL(hashlen_string);
2077

2078 2079 2080 2081
/*
 * We know there's a real path component here of at least
 * one character.
 */
2082
static inline u64 hash_name(const void *salt, const char *name)
2083
{
2084
	unsigned long hash = init_name_hash(salt);
2085 2086 2087 2088 2089 2090 2091 2092
	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 != '/');
2093
	return hashlen_create(end_name_hash(hash), len);
2094 2095
}

2096 2097
#endif

L
Linus Torvalds 已提交
2098 2099
/*
 * Name resolution.
2100 2101
 * 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 已提交
2102
 *
2103 2104
 * 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 已提交
2105
 */
2106
static int link_path_walk(const char *name, struct nameidata *nd)
L
Linus Torvalds 已提交
2107
{
2108
	int depth = 0; // depth <= nd->depth
L
Linus Torvalds 已提交
2109
	int err;
A
Al Viro 已提交
2110

2111
	nd->last_type = LAST_ROOT;
2112
	nd->flags |= LOOKUP_PARENT;
2113 2114
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
2115 2116
	while (*name=='/')
		name++;
2117 2118
	if (!*name) {
		nd->dir_mode = 0; // short-circuit the 'hardening' idiocy
2119
		return 0;
2120
	}
L
Linus Torvalds 已提交
2121 2122 2123

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

2128
		err = may_lookup(nd);
2129
		if (err)
2130
			return err;
L
Linus Torvalds 已提交
2131

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

A
Al Viro 已提交
2134
		type = LAST_NORM;
2135
		if (name[0] == '.') switch (hashlen_len(hash_len)) {
A
Al Viro 已提交
2136
			case 2:
2137
				if (name[1] == '.') {
A
Al Viro 已提交
2138
					type = LAST_DOTDOT;
A
Al Viro 已提交
2139 2140
					nd->flags |= LOOKUP_JUMPED;
				}
A
Al Viro 已提交
2141 2142 2143 2144
				break;
			case 1:
				type = LAST_DOT;
		}
2145 2146
		if (likely(type == LAST_NORM)) {
			struct dentry *parent = nd->path.dentry;
A
Al Viro 已提交
2147
			nd->flags &= ~LOOKUP_JUMPED;
2148
			if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
2149
				struct qstr this = { { .hash_len = hash_len }, .name = name };
2150
				err = parent->d_op->d_hash(parent, &this);
2151
				if (err < 0)
2152
					return err;
2153 2154
				hash_len = this.hash_len;
				name = this.name;
2155 2156
			}
		}
A
Al Viro 已提交
2157

2158 2159
		nd->last.hash_len = hash_len;
		nd->last.name = name;
2160 2161
		nd->last_type = type;

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

2206
/* must be paired with terminate_walk() */
2207
static const char *path_init(struct nameidata *nd, unsigned flags)
N
Nick Piggin 已提交
2208
{
2209
	int error;
2210
	const char *s = nd->name->name;
N
Nick Piggin 已提交
2211

2212 2213
	if (!*s)
		flags &= ~LOOKUP_RCU;
2214 2215
	if (flags & LOOKUP_RCU)
		rcu_read_lock();
2216

2217
	nd->flags = flags | LOOKUP_JUMPED;
N
Nick Piggin 已提交
2218
	nd->depth = 0;
2219 2220 2221 2222 2223

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

2224
	if (flags & LOOKUP_ROOT) {
2225 2226
		struct dentry *root = nd->root.dentry;
		struct inode *inode = root->d_inode;
2227 2228
		if (*s && unlikely(!d_can_lookup(root)))
			return ERR_PTR(-ENOTDIR);
2229 2230 2231
		nd->path = nd->root;
		nd->inode = inode;
		if (flags & LOOKUP_RCU) {
2232
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
2233
			nd->root_seq = nd->seq;
2234 2235 2236
		} else {
			path_get(&nd->path);
		}
2237
		return s;
2238 2239
	}

N
Nick Piggin 已提交
2240
	nd->root.mnt = NULL;
2241 2242
	nd->path.mnt = NULL;
	nd->path.dentry = NULL;
N
Nick Piggin 已提交
2243

2244 2245
	/* Absolute pathname -- fetch the root (LOOKUP_IN_ROOT uses nd->dfd). */
	if (*s == '/' && !(flags & LOOKUP_IN_ROOT)) {
2246 2247 2248 2249
		error = nd_jump_root(nd);
		if (unlikely(error))
			return ERR_PTR(error);
		return s;
2250 2251 2252 2253
	}

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

A
Al Viro 已提交
2258 2259 2260
			do {
				seq = read_seqcount_begin(&fs->seq);
				nd->path = fs->pwd;
2261
				nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2262 2263 2264 2265
				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);
2266
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2267
		}
N
Nick Piggin 已提交
2268
	} else {
2269
		/* Caller must check execute permissions on the starting path component */
2270
		struct fd f = fdget_raw(nd->dfd);
N
Nick Piggin 已提交
2271 2272
		struct dentry *dentry;

2273
		if (!f.file)
2274
			return ERR_PTR(-EBADF);
N
Nick Piggin 已提交
2275

2276
		dentry = f.file->f_path.dentry;
N
Nick Piggin 已提交
2277

2278 2279 2280
		if (*s && unlikely(!d_can_lookup(dentry))) {
			fdput(f);
			return ERR_PTR(-ENOTDIR);
A
Al Viro 已提交
2281
		}
N
Nick Piggin 已提交
2282

2283
		nd->path = f.file->f_path;
A
Al Viro 已提交
2284
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
2285 2286
			nd->inode = nd->path.dentry->d_inode;
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
A
Al Viro 已提交
2287
		} else {
2288
			path_get(&nd->path);
A
Al Viro 已提交
2289
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2290
		}
A
Al Viro 已提交
2291
		fdput(f);
N
Nick Piggin 已提交
2292
	}
2293

2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304
	/* 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);
			nd->flags |= LOOKUP_ROOT_GRABBED;
		}
	}
	return s;
2305 2306
}

2307
static inline const char *lookup_last(struct nameidata *nd)
2308 2309 2310 2311
{
	if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
		nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;

2312
	return walk_component(nd, WALK_TRAILING);
2313 2314
}

2315 2316
static int handle_lookup_down(struct nameidata *nd)
{
2317
	if (!(nd->flags & LOOKUP_RCU))
2318
		dget(nd->path.dentry);
2319 2320
	return PTR_ERR(step_into(nd, WALK_NOFOLLOW,
			nd->path.dentry, nd->inode, nd->seq));
2321 2322
}

2323
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2324
static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path)
2325
{
2326
	const char *s = path_init(nd, flags);
2327
	int err;
N
Nick Piggin 已提交
2328

2329
	if (unlikely(flags & LOOKUP_DOWN) && !IS_ERR(s)) {
2330
		err = handle_lookup_down(nd);
2331 2332
		if (unlikely(err < 0))
			s = ERR_PTR(err);
2333 2334
	}

2335 2336 2337
	while (!(err = link_path_walk(s, nd)) &&
	       (s = lookup_last(nd)) != NULL)
		;
2338 2339
	if (!err)
		err = complete_walk(nd);
2340

2341 2342
	if (!err && nd->flags & LOOKUP_DIRECTORY)
		if (!d_can_lookup(nd->path.dentry))
A
Al Viro 已提交
2343
			err = -ENOTDIR;
2344 2345 2346 2347
	if (!err && unlikely(nd->flags & LOOKUP_MOUNTPOINT)) {
		err = handle_lookup_down(nd);
		nd->flags &= ~LOOKUP_JUMPED; // no d_weak_revalidate(), please...
	}
2348 2349 2350 2351 2352 2353
	if (!err) {
		*path = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2354
	return err;
A
Al Viro 已提交
2355
}
N
Nick Piggin 已提交
2356

2357 2358
int filename_lookup(int dfd, struct filename *name, unsigned flags,
		    struct path *path, struct path *root)
A
Al Viro 已提交
2359
{
2360
	int retval;
2361
	struct nameidata nd;
2362 2363
	if (IS_ERR(name))
		return PTR_ERR(name);
2364 2365 2366 2367
	if (unlikely(root)) {
		nd.root = *root;
		flags |= LOOKUP_ROOT;
	}
2368
	set_nameidata(&nd, dfd, name);
2369
	retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2370
	if (unlikely(retval == -ECHILD))
2371
		retval = path_lookupat(&nd, flags, path);
A
Al Viro 已提交
2372
	if (unlikely(retval == -ESTALE))
2373
		retval = path_lookupat(&nd, flags | LOOKUP_REVAL, path);
N
Nick Piggin 已提交
2374

2375
	if (likely(!retval))
2376 2377
		audit_inode(name, path->dentry,
			    flags & LOOKUP_MOUNTPOINT ? AUDIT_INODE_NOEVAL : 0);
2378
	restore_nameidata();
2379
	putname(name);
2380
	return retval;
L
Linus Torvalds 已提交
2381 2382
}

2383
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2384
static int path_parentat(struct nameidata *nd, unsigned flags,
2385
				struct path *parent)
2386
{
2387
	const char *s = path_init(nd, flags);
2388
	int err = link_path_walk(s, nd);
2389 2390
	if (!err)
		err = complete_walk(nd);
2391 2392 2393 2394 2395 2396
	if (!err) {
		*parent = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2397 2398 2399
	return err;
}

2400
static struct filename *filename_parentat(int dfd, struct filename *name,
2401 2402
				unsigned int flags, struct path *parent,
				struct qstr *last, int *type)
2403 2404
{
	int retval;
2405
	struct nameidata nd;
2406

2407 2408
	if (IS_ERR(name))
		return name;
2409
	set_nameidata(&nd, dfd, name);
2410
	retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
2411
	if (unlikely(retval == -ECHILD))
2412
		retval = path_parentat(&nd, flags, parent);
2413
	if (unlikely(retval == -ESTALE))
2414
		retval = path_parentat(&nd, flags | LOOKUP_REVAL, parent);
2415 2416 2417
	if (likely(!retval)) {
		*last = nd.last;
		*type = nd.last_type;
2418
		audit_inode(name, parent->dentry, AUDIT_INODE_PARENT);
2419 2420 2421
	} else {
		putname(name);
		name = ERR_PTR(retval);
2422
	}
2423
	restore_nameidata();
2424
	return name;
2425 2426
}

A
Al Viro 已提交
2427 2428
/* does lookup, returns the object with parent locked */
struct dentry *kern_path_locked(const char *name, struct path *path)
2429
{
2430 2431
	struct filename *filename;
	struct dentry *d;
2432 2433
	struct qstr last;
	int type;
2434

2435 2436
	filename = filename_parentat(AT_FDCWD, getname_kernel(name), 0, path,
				    &last, &type);
2437 2438
	if (IS_ERR(filename))
		return ERR_CAST(filename);
2439
	if (unlikely(type != LAST_NORM)) {
2440
		path_put(path);
2441 2442
		putname(filename);
		return ERR_PTR(-EINVAL);
A
Al Viro 已提交
2443
	}
A
Al Viro 已提交
2444
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
2445
	d = __lookup_hash(&last, path->dentry, 0);
A
Al Viro 已提交
2446
	if (IS_ERR(d)) {
A
Al Viro 已提交
2447
		inode_unlock(path->dentry->d_inode);
2448
		path_put(path);
A
Al Viro 已提交
2449
	}
2450
	putname(filename);
A
Al Viro 已提交
2451
	return d;
2452 2453
}

A
Al Viro 已提交
2454 2455
int kern_path(const char *name, unsigned int flags, struct path *path)
{
2456 2457
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags, path, NULL);
A
Al Viro 已提交
2458
}
2459
EXPORT_SYMBOL(kern_path);
A
Al Viro 已提交
2460

2461 2462 2463 2464 2465 2466
/**
 * 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
2467
 * @path: pointer to struct path to fill
2468 2469 2470
 */
int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
		    const char *name, unsigned int flags,
2471
		    struct path *path)
2472
{
2473 2474
	struct path root = {.mnt = mnt, .dentry = dentry};
	/* the first argument of filename_lookup() is ignored with root */
2475 2476
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags , path, &root);
2477
}
2478
EXPORT_SYMBOL(vfs_path_lookup);
2479

2480 2481
static int lookup_one_len_common(const char *name, struct dentry *base,
				 int len, struct qstr *this)
2482
{
2483 2484 2485
	this->name = name;
	this->len = len;
	this->hash = full_name_hash(base, name, len);
A
Al Viro 已提交
2486
	if (!len)
2487
		return -EACCES;
A
Al Viro 已提交
2488

A
Al Viro 已提交
2489 2490
	if (unlikely(name[0] == '.')) {
		if (len < 2 || (len == 2 && name[1] == '.'))
2491
			return -EACCES;
A
Al Viro 已提交
2492 2493
	}

A
Al Viro 已提交
2494
	while (len--) {
2495
		unsigned int c = *(const unsigned char *)name++;
A
Al Viro 已提交
2496
		if (c == '/' || c == '\0')
2497
			return -EACCES;
A
Al Viro 已提交
2498
	}
2499 2500 2501 2502 2503
	/*
	 * See if the low-level filesystem might want
	 * to use its own hash..
	 */
	if (base->d_flags & DCACHE_OP_HASH) {
2504
		int err = base->d_op->d_hash(base, this);
2505
		if (err < 0)
2506
			return err;
2507
	}
2508

2509 2510 2511
	return inode_permission(base->d_inode, MAY_EXEC);
}

2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540
/**
 * 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);

2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553
/**
 * 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)
{
2554
	struct dentry *dentry;
2555 2556 2557 2558 2559 2560
	struct qstr this;
	int err;

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

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

2564 2565
	dentry = lookup_dcache(&this, base, 0);
	return dentry ? dentry : __lookup_slow(&this, base, 0);
2566
}
2567
EXPORT_SYMBOL(lookup_one_len);
2568

2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585
/**
 * 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;
2586
	struct dentry *ret;
2587

2588
	err = lookup_one_len_common(name, base, len, &this);
2589 2590 2591
	if (err)
		return ERR_PTR(err);

2592 2593 2594 2595
	ret = lookup_dcache(&this, base, 0);
	if (!ret)
		ret = lookup_slow(&this, base, 0);
	return ret;
2596 2597 2598
}
EXPORT_SYMBOL(lookup_one_len_unlocked);

A
Al Viro 已提交
2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610
/*
 * 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);
2611
	if (!IS_ERR(ret) && d_flags_negative(smp_load_acquire(&ret->d_flags))) {
A
Al Viro 已提交
2612 2613 2614 2615 2616 2617 2618
		dput(ret);
		ret = ERR_PTR(-ENOENT);
	}
	return ret;
}
EXPORT_SYMBOL(lookup_positive_unlocked);

2619 2620 2621 2622 2623 2624
#ifdef CONFIG_UNIX98_PTYS
int path_pts(struct path *path)
{
	/* Find something mounted on "pts" in the same directory as
	 * the input path.
	 */
2625 2626
	struct dentry *parent = dget_parent(path->dentry);
	struct dentry *child;
A
Al Viro 已提交
2627
	struct qstr this = QSTR_INIT("pts", 3);
2628

2629 2630
	if (unlikely(!path_connected(path->mnt, parent))) {
		dput(parent);
2631
		return -ENOENT;
2632
	}
2633 2634
	dput(path->dentry);
	path->dentry = parent;
2635 2636 2637 2638 2639 2640
	child = d_hash_and_lookup(parent, &this);
	if (!child)
		return -ENOENT;

	path->dentry = child;
	dput(parent);
A
Al Viro 已提交
2641
	follow_down(path);
2642 2643 2644 2645
	return 0;
}
#endif

2646 2647
int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
		 struct path *path, int *empty)
L
Linus Torvalds 已提交
2648
{
2649 2650
	return filename_lookup(dfd, getname_flags(name, flags, empty),
			       flags, path, NULL);
L
Linus Torvalds 已提交
2651
}
2652
EXPORT_SYMBOL(user_path_at_empty);
2653

M
Miklos Szeredi 已提交
2654
int __check_sticky(struct inode *dir, struct inode *inode)
L
Linus Torvalds 已提交
2655
{
2656
	kuid_t fsuid = current_fsuid();
2657

2658
	if (uid_eq(inode->i_uid, fsuid))
L
Linus Torvalds 已提交
2659
		return 0;
2660
	if (uid_eq(dir->i_uid, fsuid))
L
Linus Torvalds 已提交
2661
		return 0;
2662
	return !capable_wrt_inode_uidgid(inode, CAP_FOWNER);
L
Linus Torvalds 已提交
2663
}
M
Miklos Szeredi 已提交
2664
EXPORT_SYMBOL(__check_sticky);
L
Linus Torvalds 已提交
2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678

/*
 *	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.
2679 2680 2681 2682 2683
 *  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 已提交
2684 2685
 *     nfs_async_unlink().
 */
2686
static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
L
Linus Torvalds 已提交
2687
{
2688
	struct inode *inode = d_backing_inode(victim);
L
Linus Torvalds 已提交
2689 2690
	int error;

2691
	if (d_is_negative(victim))
L
Linus Torvalds 已提交
2692
		return -ENOENT;
2693
	BUG_ON(!inode);
L
Linus Torvalds 已提交
2694 2695

	BUG_ON(victim->d_parent->d_inode != dir);
2696 2697 2698 2699 2700

	/* 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;

2701
	audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
L
Linus Torvalds 已提交
2702

2703
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2704 2705 2706 2707
	if (error)
		return error;
	if (IS_APPEND(dir))
		return -EPERM;
2708 2709

	if (check_sticky(dir, inode) || IS_APPEND(inode) ||
2710
	    IS_IMMUTABLE(inode) || IS_SWAPFILE(inode) || HAS_UNMAPPED_ID(inode))
L
Linus Torvalds 已提交
2711 2712
		return -EPERM;
	if (isdir) {
M
Miklos Szeredi 已提交
2713
		if (!d_is_dir(victim))
L
Linus Torvalds 已提交
2714 2715 2716
			return -ENOTDIR;
		if (IS_ROOT(victim))
			return -EBUSY;
M
Miklos Szeredi 已提交
2717
	} else if (d_is_dir(victim))
L
Linus Torvalds 已提交
2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730
		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())
2731 2732 2733
 *  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 已提交
2734
 */
2735
static inline int may_create(struct inode *dir, struct dentry *child)
L
Linus Torvalds 已提交
2736
{
2737
	struct user_namespace *s_user_ns;
2738
	audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
L
Linus Torvalds 已提交
2739 2740 2741 2742
	if (child->d_inode)
		return -EEXIST;
	if (IS_DEADDIR(dir))
		return -ENOENT;
2743 2744 2745 2746
	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;
2747
	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2748 2749 2750 2751 2752 2753 2754 2755 2756 2757
}

/*
 * 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 已提交
2758
		inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
L
Linus Torvalds 已提交
2759 2760 2761
		return NULL;
	}

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

2764 2765
	p = d_ancestor(p2, p1);
	if (p) {
A
Al Viro 已提交
2766 2767
		inode_lock_nested(p2->d_inode, I_MUTEX_PARENT);
		inode_lock_nested(p1->d_inode, I_MUTEX_CHILD);
2768
		return p;
L
Linus Torvalds 已提交
2769 2770
	}

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

A
Al Viro 已提交
2778 2779
	inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
	inode_lock_nested(p2->d_inode, I_MUTEX_PARENT2);
L
Linus Torvalds 已提交
2780 2781
	return NULL;
}
2782
EXPORT_SYMBOL(lock_rename);
L
Linus Torvalds 已提交
2783 2784 2785

void unlock_rename(struct dentry *p1, struct dentry *p2)
{
A
Al Viro 已提交
2786
	inode_unlock(p1->d_inode);
L
Linus Torvalds 已提交
2787
	if (p1 != p2) {
A
Al Viro 已提交
2788
		inode_unlock(p2->d_inode);
2789
		mutex_unlock(&p1->d_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2790 2791
	}
}
2792
EXPORT_SYMBOL(unlock_rename);
L
Linus Torvalds 已提交
2793

A
Al Viro 已提交
2794
int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
A
Al Viro 已提交
2795
		bool want_excl)
L
Linus Torvalds 已提交
2796
{
2797
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
2798 2799 2800
	if (error)
		return error;

A
Al Viro 已提交
2801
	if (!dir->i_op->create)
L
Linus Torvalds 已提交
2802 2803 2804 2805 2806 2807
		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 已提交
2808
	error = dir->i_op->create(dir, dentry, mode, want_excl);
2809
	if (!error)
2810
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
2811 2812
	return error;
}
2813
EXPORT_SYMBOL(vfs_create);
L
Linus Torvalds 已提交
2814

A
Al Viro 已提交
2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835
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);

2836 2837 2838 2839 2840 2841
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 已提交
2842
static int may_open(const struct path *path, int acc_mode, int flag)
L
Linus Torvalds 已提交
2843
{
2844
	struct dentry *dentry = path->dentry;
L
Linus Torvalds 已提交
2845 2846 2847 2848 2849 2850
	struct inode *inode = dentry->d_inode;
	int error;

	if (!inode)
		return -ENOENT;

C
Christoph Hellwig 已提交
2851 2852
	switch (inode->i_mode & S_IFMT) {
	case S_IFLNK:
L
Linus Torvalds 已提交
2853
		return -ELOOP;
C
Christoph Hellwig 已提交
2854
	case S_IFDIR:
2855
		if (acc_mode & MAY_WRITE)
C
Christoph Hellwig 已提交
2856
			return -EISDIR;
2857 2858
		if (acc_mode & MAY_EXEC)
			return -EACCES;
C
Christoph Hellwig 已提交
2859 2860 2861
		break;
	case S_IFBLK:
	case S_IFCHR:
2862
		if (!may_open_dev(path))
L
Linus Torvalds 已提交
2863
			return -EACCES;
K
Kees Cook 已提交
2864
		fallthrough;
C
Christoph Hellwig 已提交
2865 2866
	case S_IFIFO:
	case S_IFSOCK:
K
Kees Cook 已提交
2867 2868
		if (acc_mode & MAY_EXEC)
			return -EACCES;
L
Linus Torvalds 已提交
2869
		flag &= ~O_TRUNC;
C
Christoph Hellwig 已提交
2870
		break;
2871 2872 2873 2874
	case S_IFREG:
		if ((acc_mode & MAY_EXEC) && path_noexec(path))
			return -EACCES;
		break;
2875
	}
2876

A
Al Viro 已提交
2877
	error = inode_permission(inode, MAY_OPEN | acc_mode);
2878 2879
	if (error)
		return error;
M
Mimi Zohar 已提交
2880

L
Linus Torvalds 已提交
2881 2882 2883 2884
	/*
	 * An append-only file must be opened in append mode for writing.
	 */
	if (IS_APPEND(inode)) {
2885
		if  ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
2886
			return -EPERM;
L
Linus Torvalds 已提交
2887
		if (flag & O_TRUNC)
2888
			return -EPERM;
L
Linus Torvalds 已提交
2889 2890 2891
	}

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

2895
	return 0;
2896
}
L
Linus Torvalds 已提交
2897

2898
static int handle_truncate(struct file *filp)
2899
{
A
Al Viro 已提交
2900
	const struct path *path = &filp->f_path;
2901 2902 2903 2904 2905 2906 2907
	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.
	 */
2908
	error = locks_verify_locked(filp);
2909
	if (!error)
2910
		error = security_path_truncate(path);
2911 2912 2913
	if (!error) {
		error = do_truncate(path->dentry, 0,
				    ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
2914
				    filp);
2915 2916
	}
	put_write_access(inode);
M
Mimi Zohar 已提交
2917
	return error;
L
Linus Torvalds 已提交
2918 2919
}

2920 2921
static inline int open_to_namei_flags(int flag)
{
2922 2923
	if ((flag & O_ACCMODE) == 3)
		flag--;
2924 2925 2926
	return flag;
}

2927
static int may_o_create(const struct path *dir, struct dentry *dentry, umode_t mode)
M
Miklos Szeredi 已提交
2928
{
2929
	struct user_namespace *s_user_ns;
M
Miklos Szeredi 已提交
2930 2931 2932 2933
	int error = security_path_mknod(dir, dentry, mode, 0);
	if (error)
		return error;

2934 2935 2936 2937 2938
	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 已提交
2939 2940 2941 2942 2943 2944 2945
	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);
}

2946 2947 2948 2949 2950 2951 2952
/*
 * 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().
 *
2953 2954 2955
 * 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.
2956 2957 2958
 *
 * Returns an error code otherwise.
 */
2959 2960 2961
static struct dentry *atomic_open(struct nameidata *nd, struct dentry *dentry,
				  struct file *file,
				  int open_flag, umode_t mode)
M
Miklos Szeredi 已提交
2962
{
2963
	struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
M
Miklos Szeredi 已提交
2964 2965 2966 2967 2968 2969
	struct inode *dir =  nd->path.dentry->d_inode;
	int error;

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

A
Al Viro 已提交
2970 2971
	file->f_path.dentry = DENTRY_NOT_SET;
	file->f_path.mnt = nd->path.mnt;
2972
	error = dir->i_op->atomic_open(dir, dentry, file,
2973
				       open_to_namei_flags(open_flag), mode);
2974
	d_lookup_done(dentry);
2975
	if (!error) {
2976
		if (file->f_mode & FMODE_OPENED) {
2977 2978 2979 2980
			if (unlikely(dentry != file->f_path.dentry)) {
				dput(dentry);
				dentry = dget(file->f_path.dentry);
			}
2981
		} else if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
2982
			error = -EIO;
2983
		} else {
2984 2985 2986
			if (file->f_path.dentry) {
				dput(dentry);
				dentry = file->f_path.dentry;
2987
			}
2988
			if (unlikely(d_is_negative(dentry)))
A
Al Viro 已提交
2989
				error = -ENOENT;
2990
		}
M
Miklos Szeredi 已提交
2991
	}
2992 2993 2994 2995 2996
	if (error) {
		dput(dentry);
		dentry = ERR_PTR(error);
	}
	return dentry;
M
Miklos Szeredi 已提交
2997 2998
}

M
Miklos Szeredi 已提交
2999
/*
3000
 * Look up and maybe create and open the last component.
M
Miklos Szeredi 已提交
3001
 *
3002
 * Must be called with parent locked (exclusive in O_CREAT case).
3003
 *
3004 3005 3006 3007 3008 3009 3010
 * 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.
3011
 *
3012
 * An error code is returned on failure.
M
Miklos Szeredi 已提交
3013
 */
3014 3015 3016
static struct dentry *lookup_open(struct nameidata *nd, struct file *file,
				  const struct open_flags *op,
				  bool got_write)
M
Miklos Szeredi 已提交
3017 3018
{
	struct dentry *dir = nd->path.dentry;
3019
	struct inode *dir_inode = dir->d_inode;
3020
	int open_flag = op->open_flag;
M
Miklos Szeredi 已提交
3021
	struct dentry *dentry;
3022 3023
	int error, create_error = 0;
	umode_t mode = op->mode;
3024
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
M
Miklos Szeredi 已提交
3025

3026
	if (unlikely(IS_DEADDIR(dir_inode)))
3027
		return ERR_PTR(-ENOENT);
M
Miklos Szeredi 已提交
3028

3029
	file->f_mode &= ~FMODE_CREATED;
3030 3031 3032 3033 3034
	dentry = d_lookup(dir, &nd->last);
	for (;;) {
		if (!dentry) {
			dentry = d_alloc_parallel(dir, &nd->last, &wq);
			if (IS_ERR(dentry))
3035
				return dentry;
3036 3037 3038
		}
		if (d_in_lookup(dentry))
			break;
M
Miklos Szeredi 已提交
3039

3040 3041 3042 3043 3044 3045 3046 3047 3048 3049
		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) {
3050
		/* Cached positive dentry: will open in f_op->open */
3051
		return dentry;
3052
	}
M
Miklos Szeredi 已提交
3053

3054 3055 3056 3057 3058 3059 3060 3061 3062
	/*
	 * 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).
	 */
3063 3064
	if (unlikely(!got_write))
		open_flag &= ~O_TRUNC;
3065
	if (open_flag & O_CREAT) {
3066 3067
		if (open_flag & O_EXCL)
			open_flag &= ~O_TRUNC;
3068 3069
		if (!IS_POSIXACL(dir->d_inode))
			mode &= ~current_umask();
3070
		if (likely(got_write))
3071
			create_error = may_o_create(&nd->path, dentry, mode);
3072 3073
		else
			create_error = -EROFS;
M
Miklos Szeredi 已提交
3074
	}
3075 3076
	if (create_error)
		open_flag &= ~O_CREAT;
3077
	if (dir_inode->i_op->atomic_open) {
3078
		dentry = atomic_open(nd, dentry, file, open_flag, mode);
3079 3080 3081
		if (unlikely(create_error) && dentry == ERR_PTR(-ENOENT))
			dentry = ERR_PTR(create_error);
		return dentry;
M
Miklos Szeredi 已提交
3082
	}
3083

3084
	if (d_in_lookup(dentry)) {
3085 3086
		struct dentry *res = dir_inode->i_op->lookup(dir_inode, dentry,
							     nd->flags);
3087
		d_lookup_done(dentry);
3088 3089 3090 3091 3092 3093 3094 3095
		if (unlikely(res)) {
			if (IS_ERR(res)) {
				error = PTR_ERR(res);
				goto out_dput;
			}
			dput(dentry);
			dentry = res;
		}
3096 3097
	}

M
Miklos Szeredi 已提交
3098
	/* Negative dentry, just create the file */
3099
	if (!dentry->d_inode && (open_flag & O_CREAT)) {
3100
		file->f_mode |= FMODE_CREATED;
3101 3102 3103
		audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
		if (!dir_inode->i_op->create) {
			error = -EACCES;
M
Miklos Szeredi 已提交
3104
			goto out_dput;
3105 3106
		}
		error = dir_inode->i_op->create(dir_inode, dentry, mode,
3107
						open_flag & O_EXCL);
M
Miklos Szeredi 已提交
3108 3109 3110
		if (error)
			goto out_dput;
	}
3111 3112 3113
	if (unlikely(create_error) && !dentry->d_inode) {
		error = create_error;
		goto out_dput;
M
Miklos Szeredi 已提交
3114
	}
3115
	return dentry;
M
Miklos Szeredi 已提交
3116 3117 3118

out_dput:
	dput(dentry);
3119
	return ERR_PTR(error);
M
Miklos Szeredi 已提交
3120 3121
}

3122
static const char *open_last_lookups(struct nameidata *nd,
3123
		   struct file *file, const struct open_flags *op)
3124
{
3125
	struct dentry *dir = nd->path.dentry;
3126
	int open_flag = op->open_flag;
3127
	bool got_write = false;
3128
	unsigned seq;
3129
	struct inode *inode;
3130
	struct dentry *dentry;
3131
	const char *res;
A
Al Viro 已提交
3132
	int error;
3133

3134 3135
	nd->flags |= op->intent;

3136
	if (nd->last_type != LAST_NORM) {
3137 3138
		if (nd->depth)
			put_link(nd);
3139
		return handle_dots(nd, nd->last_type);
3140
	}
3141

3142
	if (!(open_flag & O_CREAT)) {
3143 3144 3145
		if (nd->last.name[nd->last.len])
			nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
		/* we _can_ be in RCU mode here */
3146 3147
		dentry = lookup_fast(nd, &inode, &seq);
		if (IS_ERR(dentry))
3148
			return ERR_CAST(dentry);
3149
		if (likely(dentry))
3150 3151
			goto finish_lookup;

A
Al Viro 已提交
3152
		BUG_ON(nd->flags & LOOKUP_RCU);
3153 3154
	} else {
		/* create side of things */
3155 3156 3157 3158 3159
		if (nd->flags & LOOKUP_RCU) {
			error = unlazy_walk(nd);
			if (unlikely(error))
				return ERR_PTR(error);
		}
3160
		audit_inode(nd->name, dir, AUDIT_INODE_PARENT);
3161
		/* trailing slashes? */
3162
		if (unlikely(nd->last.name[nd->last.len]))
3163
			return ERR_PTR(-EISDIR);
3164
	}
A
Al Viro 已提交
3165

3166
	if (open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
3167 3168 3169 3170 3171 3172 3173 3174 3175
		error = mnt_want_write(nd->path.mnt);
		if (!error)
			got_write = true;
		/*
		 * 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.
		 */
	}
3176 3177 3178 3179
	if (open_flag & O_CREAT)
		inode_lock(dir->d_inode);
	else
		inode_lock_shared(dir->d_inode);
3180
	dentry = lookup_open(nd, file, op, got_write);
3181 3182
	if (!IS_ERR(dentry) && (file->f_mode & FMODE_CREATED))
		fsnotify_create(dir->d_inode, dentry);
3183 3184 3185 3186
	if (open_flag & O_CREAT)
		inode_unlock(dir->d_inode);
	else
		inode_unlock_shared(dir->d_inode);
3187

3188
	if (got_write)
3189
		mnt_drop_write(nd->path.mnt);
M
Miklos Szeredi 已提交
3190

3191 3192 3193
	if (IS_ERR(dentry))
		return ERR_CAST(dentry);

3194
	if (file->f_mode & (FMODE_OPENED | FMODE_CREATED)) {
3195 3196
		dput(nd->path.dentry);
		nd->path.dentry = dentry;
3197
		return NULL;
3198 3199
	}

3200
finish_lookup:
3201 3202
	if (nd->depth)
		put_link(nd);
3203
	res = step_into(nd, WALK_TRAILING, dentry, inode, seq);
3204
	if (unlikely(res))
3205
		nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3206
	return res;
3207 3208 3209 3210 3211
}

/*
 * Handle the last step of open()
 */
3212
static int do_open(struct nameidata *nd,
3213 3214 3215 3216 3217 3218 3219
		   struct file *file, const struct open_flags *op)
{
	int open_flag = op->open_flag;
	bool do_truncate;
	int acc_mode;
	int error;

3220 3221 3222 3223 3224
	if (!(file->f_mode & (FMODE_OPENED | FMODE_CREATED))) {
		error = complete_walk(nd);
		if (error)
			return error;
	}
3225 3226
	if (!(file->f_mode & FMODE_CREATED))
		audit_inode(nd->name, nd->path.dentry, 0);
3227
	if (open_flag & O_CREAT) {
3228 3229
		if ((open_flag & O_EXCL) && !(file->f_mode & FMODE_CREATED))
			return -EEXIST;
3230
		if (d_is_dir(nd->path.dentry))
3231
			return -EISDIR;
3232
		error = may_create_in_sticky(nd->dir_mode, nd->dir_uid,
3233 3234
					     d_backing_inode(nd->path.dentry));
		if (unlikely(error))
3235
			return error;
3236
	}
M
Miklos Szeredi 已提交
3237
	if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry))
3238
		return -ENOTDIR;
3239

3240 3241
	do_truncate = false;
	acc_mode = op->acc_mode;
3242 3243 3244 3245
	if (file->f_mode & FMODE_CREATED) {
		/* Don't check for write permission, don't truncate */
		open_flag &= ~O_TRUNC;
		acc_mode = 0;
3246
	} else if (d_is_reg(nd->path.dentry) && open_flag & O_TRUNC) {
3247 3248
		error = mnt_want_write(nd->path.mnt);
		if (error)
3249
			return error;
3250
		do_truncate = true;
3251
	}
3252
	error = may_open(&nd->path, acc_mode, open_flag);
3253
	if (!error && !(file->f_mode & FMODE_OPENED))
A
Al Viro 已提交
3254
		error = vfs_open(&nd->path, file);
3255 3256 3257
	if (!error)
		error = ima_file_check(file, op->acc_mode);
	if (!error && do_truncate)
3258
		error = handle_truncate(file);
3259 3260 3261 3262
	if (unlikely(error > 0)) {
		WARN_ON(1);
		error = -EINVAL;
	}
3263
	if (do_truncate)
3264
		mnt_drop_write(nd->path.mnt);
3265
	return error;
3266 3267
}

3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282
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 已提交
3283
	child = d_alloc(dentry, &slash_name);
3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297
	if (unlikely(!child))
		goto out_err;
	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);
	}
3298
	ima_post_create_tmpfile(inode);
3299 3300 3301 3302 3303 3304 3305 3306
	return child;

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

3307
static int do_tmpfile(struct nameidata *nd, unsigned flags,
3308
		const struct open_flags *op,
3309
		struct file *file)
3310
{
3311 3312
	struct dentry *child;
	struct path path;
3313
	int error = path_lookupat(nd, flags | LOOKUP_DIRECTORY, &path);
3314 3315
	if (unlikely(error))
		return error;
3316
	error = mnt_want_write(path.mnt);
3317 3318
	if (unlikely(error))
		goto out;
3319 3320
	child = vfs_tmpfile(path.dentry, op->mode, op->open_flag);
	error = PTR_ERR(child);
3321
	if (IS_ERR(child))
3322
		goto out2;
3323 3324
	dput(path.dentry);
	path.dentry = child;
3325
	audit_inode(nd->name, child, 0);
3326
	/* Don't check for other permissions, the inode was just created */
A
Al Viro 已提交
3327
	error = may_open(&path, 0, op->open_flag);
3328 3329
	if (error)
		goto out2;
3330
	file->f_path.mnt = path.mnt;
3331
	error = finish_open(file, child, NULL);
3332
out2:
3333
	mnt_drop_write(path.mnt);
3334
out:
3335
	path_put(&path);
3336 3337 3338
	return error;
}

3339 3340 3341 3342 3343 3344
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);
3345
		error = vfs_open(&path, file);
3346 3347 3348 3349 3350
		path_put(&path);
	}
	return error;
}

3351 3352
static struct file *path_openat(struct nameidata *nd,
			const struct open_flags *op, unsigned flags)
L
Linus Torvalds 已提交
3353
{
A
Al Viro 已提交
3354
	struct file *file;
3355
	int error;
N
Nick Piggin 已提交
3356

3357
	file = alloc_empty_file(op->open_flag, current_cred());
3358 3359
	if (IS_ERR(file))
		return file;
N
Nick Piggin 已提交
3360

A
Al Viro 已提交
3361
	if (unlikely(file->f_flags & __O_TMPFILE)) {
3362
		error = do_tmpfile(nd, flags, op, file);
3363
	} else if (unlikely(file->f_flags & O_PATH)) {
3364
		error = do_o_path(nd, flags, file);
3365 3366 3367
	} else {
		const char *s = path_init(nd, flags);
		while (!(error = link_path_walk(s, nd)) &&
3368
		       (s = open_last_lookups(nd, file, op)) != NULL)
3369
			;
3370 3371
		if (!error)
			error = do_open(nd, file, op);
3372
		terminate_walk(nd);
3373
	}
3374
	if (likely(!error)) {
3375
		if (likely(file->f_mode & FMODE_OPENED))
3376 3377 3378
			return file;
		WARN_ON(1);
		error = -EINVAL;
3379
	}
3380 3381 3382 3383 3384 3385
	fput(file);
	if (error == -EOPENSTALE) {
		if (flags & LOOKUP_RCU)
			error = -ECHILD;
		else
			error = -ESTALE;
3386
	}
3387
	return ERR_PTR(error);
L
Linus Torvalds 已提交
3388 3389
}

3390
struct file *do_filp_open(int dfd, struct filename *pathname,
3391
		const struct open_flags *op)
3392
{
3393
	struct nameidata nd;
3394
	int flags = op->lookup_flags;
3395 3396
	struct file *filp;

3397
	set_nameidata(&nd, dfd, pathname);
3398
	filp = path_openat(&nd, op, flags | LOOKUP_RCU);
3399
	if (unlikely(filp == ERR_PTR(-ECHILD)))
3400
		filp = path_openat(&nd, op, flags);
3401
	if (unlikely(filp == ERR_PTR(-ESTALE)))
3402
		filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3403
	restore_nameidata();
3404 3405 3406
	return filp;
}

A
Al Viro 已提交
3407
struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
3408
		const char *name, const struct open_flags *op)
A
Al Viro 已提交
3409
{
3410
	struct nameidata nd;
A
Al Viro 已提交
3411
	struct file *file;
3412
	struct filename *filename;
3413
	int flags = op->lookup_flags | LOOKUP_ROOT;
A
Al Viro 已提交
3414 3415 3416 3417

	nd.root.mnt = mnt;
	nd.root.dentry = dentry;

3418
	if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN)
A
Al Viro 已提交
3419 3420
		return ERR_PTR(-ELOOP);

3421
	filename = getname_kernel(name);
3422
	if (IS_ERR(filename))
3423 3424
		return ERR_CAST(filename);

3425
	set_nameidata(&nd, -1, filename);
3426
	file = path_openat(&nd, op, flags | LOOKUP_RCU);
A
Al Viro 已提交
3427
	if (unlikely(file == ERR_PTR(-ECHILD)))
3428
		file = path_openat(&nd, op, flags);
A
Al Viro 已提交
3429
	if (unlikely(file == ERR_PTR(-ESTALE)))
3430
		file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3431
	restore_nameidata();
3432
	putname(filename);
A
Al Viro 已提交
3433 3434 3435
	return file;
}

3436
static struct dentry *filename_create(int dfd, struct filename *name,
3437
				struct path *path, unsigned int lookup_flags)
L
Linus Torvalds 已提交
3438
{
3439
	struct dentry *dentry = ERR_PTR(-EEXIST);
3440 3441
	struct qstr last;
	int type;
3442
	int err2;
3443 3444 3445 3446 3447 3448 3449 3450 3451
	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;

3452 3453 3454
	name = filename_parentat(dfd, name, lookup_flags, path, &last, &type);
	if (IS_ERR(name))
		return ERR_CAST(name);
L
Linus Torvalds 已提交
3455

3456 3457 3458 3459
	/*
	 * Yucky last component or no last component at all?
	 * (foo/., foo/.., /////)
	 */
3460
	if (unlikely(type != LAST_NORM))
A
Al Viro 已提交
3461
		goto out;
3462

3463
	/* don't fail immediately if it's r/o, at least try to report other errors */
3464
	err2 = mnt_want_write(path->mnt);
3465 3466 3467
	/*
	 * Do the final lookup.
	 */
3468
	lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
A
Al Viro 已提交
3469
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
3470
	dentry = __lookup_hash(&last, path->dentry, lookup_flags);
L
Linus Torvalds 已提交
3471
	if (IS_ERR(dentry))
3472
		goto unlock;
3473

3474
	error = -EEXIST;
3475
	if (d_is_positive(dentry))
3476
		goto fail;
3477

3478 3479 3480 3481 3482 3483
	/*
	 * 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.
	 */
3484
	if (unlikely(!is_dir && last.name[last.len])) {
3485
		error = -ENOENT;
A
Al Viro 已提交
3486
		goto fail;
3487
	}
3488 3489
	if (unlikely(err2)) {
		error = err2;
3490
		goto fail;
3491
	}
3492
	putname(name);
L
Linus Torvalds 已提交
3493 3494
	return dentry;
fail:
3495 3496 3497
	dput(dentry);
	dentry = ERR_PTR(error);
unlock:
A
Al Viro 已提交
3498
	inode_unlock(path->dentry->d_inode);
3499
	if (!err2)
3500
		mnt_drop_write(path->mnt);
A
Al Viro 已提交
3501
out:
3502
	path_put(path);
3503
	putname(name);
L
Linus Torvalds 已提交
3504 3505
	return dentry;
}
3506 3507 3508 3509

struct dentry *kern_path_create(int dfd, const char *pathname,
				struct path *path, unsigned int lookup_flags)
{
3510 3511
	return filename_create(dfd, getname_kernel(pathname),
				path, lookup_flags);
3512
}
3513 3514
EXPORT_SYMBOL(kern_path_create);

A
Al Viro 已提交
3515 3516 3517
void done_path_create(struct path *path, struct dentry *dentry)
{
	dput(dentry);
A
Al Viro 已提交
3518
	inode_unlock(path->dentry->d_inode);
3519
	mnt_drop_write(path->mnt);
A
Al Viro 已提交
3520 3521 3522 3523
	path_put(path);
}
EXPORT_SYMBOL(done_path_create);

A
Al Viro 已提交
3524
inline struct dentry *user_path_create(int dfd, const char __user *pathname,
3525
				struct path *path, unsigned int lookup_flags)
3526
{
3527
	return filename_create(dfd, getname(pathname), path, lookup_flags);
3528 3529 3530
}
EXPORT_SYMBOL(user_path_create);

A
Al Viro 已提交
3531
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
L
Linus Torvalds 已提交
3532
{
3533
	bool is_whiteout = S_ISCHR(mode) && dev == WHITEOUT_DEV;
3534
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3535 3536 3537 3538

	if (error)
		return error;

3539 3540
	if ((S_ISCHR(mode) || S_ISBLK(mode)) && !is_whiteout &&
	    !capable(CAP_MKNOD))
L
Linus Torvalds 已提交
3541 3542
		return -EPERM;

A
Al Viro 已提交
3543
	if (!dir->i_op->mknod)
L
Linus Torvalds 已提交
3544 3545
		return -EPERM;

3546 3547 3548 3549
	error = devcgroup_inode_mknod(mode, dev);
	if (error)
		return error;

L
Linus Torvalds 已提交
3550 3551 3552 3553 3554
	error = security_inode_mknod(dir, dentry, mode, dev);
	if (error)
		return error;

	error = dir->i_op->mknod(dir, dentry, mode, dev);
3555
	if (!error)
3556
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3557 3558
	return error;
}
3559
EXPORT_SYMBOL(vfs_mknod);
L
Linus Torvalds 已提交
3560

A
Al Viro 已提交
3561
static int may_mknod(umode_t mode)
3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577
{
	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;
	}
}

3578
static long do_mknodat(int dfd, const char __user *filename, umode_t mode,
3579
		unsigned int dev)
L
Linus Torvalds 已提交
3580
{
3581
	struct dentry *dentry;
3582 3583
	struct path path;
	int error;
3584
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3585

3586 3587 3588
	error = may_mknod(mode);
	if (error)
		return error;
3589 3590
retry:
	dentry = user_path_create(dfd, filename, &path, lookup_flags);
3591 3592
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);
3593

3594
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3595
		mode &= ~current_umask();
3596
	error = security_path_mknod(&path, dentry, mode, dev);
3597
	if (error)
3598
		goto out;
3599
	switch (mode & S_IFMT) {
L
Linus Torvalds 已提交
3600
		case 0: case S_IFREG:
A
Al Viro 已提交
3601
			error = vfs_create(path.dentry->d_inode,dentry,mode,true);
3602 3603
			if (!error)
				ima_post_path_mknod(dentry);
L
Linus Torvalds 已提交
3604 3605
			break;
		case S_IFCHR: case S_IFBLK:
3606
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,
L
Linus Torvalds 已提交
3607 3608 3609
					new_decode_dev(dev));
			break;
		case S_IFIFO: case S_IFSOCK:
3610
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
L
Linus Torvalds 已提交
3611 3612
			break;
	}
3613
out:
A
Al Viro 已提交
3614
	done_path_create(&path, dentry);
3615 3616 3617 3618
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3619 3620 3621
	return error;
}

3622 3623 3624 3625 3626 3627
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 已提交
3628
SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3629
{
3630
	return do_mknodat(AT_FDCWD, filename, mode, dev);
3631 3632
}

3633
int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
L
Linus Torvalds 已提交
3634
{
3635
	int error = may_create(dir, dentry);
3636
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
3637 3638 3639 3640

	if (error)
		return error;

A
Al Viro 已提交
3641
	if (!dir->i_op->mkdir)
L
Linus Torvalds 已提交
3642 3643 3644 3645 3646 3647 3648
		return -EPERM;

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

3649 3650 3651
	if (max_links && dir->i_nlink >= max_links)
		return -EMLINK;

L
Linus Torvalds 已提交
3652
	error = dir->i_op->mkdir(dir, dentry, mode);
3653
	if (!error)
3654
		fsnotify_mkdir(dir, dentry);
L
Linus Torvalds 已提交
3655 3656
	return error;
}
3657
EXPORT_SYMBOL(vfs_mkdir);
L
Linus Torvalds 已提交
3658

3659
static long do_mkdirat(int dfd, const char __user *pathname, umode_t mode)
L
Linus Torvalds 已提交
3660
{
3661
	struct dentry *dentry;
3662 3663
	struct path path;
	int error;
3664
	unsigned int lookup_flags = LOOKUP_DIRECTORY;
L
Linus Torvalds 已提交
3665

3666 3667
retry:
	dentry = user_path_create(dfd, pathname, &path, lookup_flags);
3668
	if (IS_ERR(dentry))
3669
		return PTR_ERR(dentry);
L
Linus Torvalds 已提交
3670

3671
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3672
		mode &= ~current_umask();
3673
	error = security_path_mkdir(&path, dentry, mode);
3674 3675
	if (!error)
		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
A
Al Viro 已提交
3676
	done_path_create(&path, dentry);
3677 3678 3679 3680
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3681 3682 3683
	return error;
}

3684 3685 3686 3687 3688
SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
{
	return do_mkdirat(dfd, pathname, mode);
}

3689
SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
3690
{
3691
	return do_mkdirat(AT_FDCWD, pathname, mode);
3692 3693
}

L
Linus Torvalds 已提交
3694 3695 3696 3697 3698 3699 3700
int vfs_rmdir(struct inode *dir, struct dentry *dentry)
{
	int error = may_delete(dir, dentry, 1);

	if (error)
		return error;

A
Al Viro 已提交
3701
	if (!dir->i_op->rmdir)
L
Linus Torvalds 已提交
3702 3703
		return -EPERM;

3704
	dget(dentry);
A
Al Viro 已提交
3705
	inode_lock(dentry->d_inode);
S
Sage Weil 已提交
3706 3707

	error = -EBUSY;
3708
	if (is_local_mountpoint(dentry))
S
Sage Weil 已提交
3709 3710 3711 3712 3713 3714 3715 3716 3717 3718
		goto out;

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

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

3719
	shrink_dcache_parent(dentry);
S
Sage Weil 已提交
3720 3721
	dentry->d_inode->i_flags |= S_DEAD;
	dont_mount(dentry);
3722
	detach_mounts(dentry);
3723
	fsnotify_rmdir(dir, dentry);
S
Sage Weil 已提交
3724 3725

out:
A
Al Viro 已提交
3726
	inode_unlock(dentry->d_inode);
3727
	dput(dentry);
S
Sage Weil 已提交
3728
	if (!error)
L
Linus Torvalds 已提交
3729 3730 3731
		d_delete(dentry);
	return error;
}
3732
EXPORT_SYMBOL(vfs_rmdir);
L
Linus Torvalds 已提交
3733

3734
long do_rmdir(int dfd, struct filename *name)
L
Linus Torvalds 已提交
3735 3736 3737
{
	int error = 0;
	struct dentry *dentry;
3738 3739 3740
	struct path path;
	struct qstr last;
	int type;
3741 3742
	unsigned int lookup_flags = 0;
retry:
3743
	name = filename_parentat(dfd, name, lookup_flags,
A
Al Viro 已提交
3744
				&path, &last, &type);
3745 3746
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
3747

3748
	switch (type) {
3749 3750 3751 3752 3753 3754 3755 3756 3757
	case LAST_DOTDOT:
		error = -ENOTEMPTY;
		goto exit1;
	case LAST_DOT:
		error = -EINVAL;
		goto exit1;
	case LAST_ROOT:
		error = -EBUSY;
		goto exit1;
L
Linus Torvalds 已提交
3758
	}
3759

3760
	error = mnt_want_write(path.mnt);
3761 3762
	if (error)
		goto exit1;
3763

A
Al Viro 已提交
3764
	inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
3765
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
3766
	error = PTR_ERR(dentry);
3767 3768
	if (IS_ERR(dentry))
		goto exit2;
3769 3770 3771 3772
	if (!dentry->d_inode) {
		error = -ENOENT;
		goto exit3;
	}
3773
	error = security_path_rmdir(&path, dentry);
3774
	if (error)
3775
		goto exit3;
3776
	error = vfs_rmdir(path.dentry->d_inode, dentry);
3777
exit3:
3778 3779
	dput(dentry);
exit2:
A
Al Viro 已提交
3780
	inode_unlock(path.dentry->d_inode);
3781
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3782
exit1:
3783
	path_put(&path);
3784 3785 3786 3787
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
A
Al Viro 已提交
3788
	putname(name);
L
Linus Torvalds 已提交
3789 3790 3791
	return error;
}

3792
SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
3793
{
3794
	return do_rmdir(AT_FDCWD, getname(pathname));
3795 3796
}

3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815
/**
 * 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 已提交
3816
{
J
J. Bruce Fields 已提交
3817
	struct inode *target = dentry->d_inode;
L
Linus Torvalds 已提交
3818 3819 3820 3821 3822
	int error = may_delete(dir, dentry, 0);

	if (error)
		return error;

A
Al Viro 已提交
3823
	if (!dir->i_op->unlink)
L
Linus Torvalds 已提交
3824 3825
		return -EPERM;

A
Al Viro 已提交
3826
	inode_lock(target);
3827
	if (is_local_mountpoint(dentry))
L
Linus Torvalds 已提交
3828 3829 3830
		error = -EBUSY;
	else {
		error = security_inode_unlink(dir, dentry);
3831
		if (!error) {
3832 3833
			error = try_break_deleg(target, delegated_inode);
			if (error)
3834
				goto out;
L
Linus Torvalds 已提交
3835
			error = dir->i_op->unlink(dir, dentry);
3836
			if (!error) {
3837
				dont_mount(dentry);
3838
				detach_mounts(dentry);
3839
				fsnotify_unlink(dir, dentry);
3840
			}
3841
		}
L
Linus Torvalds 已提交
3842
	}
3843
out:
A
Al Viro 已提交
3844
	inode_unlock(target);
L
Linus Torvalds 已提交
3845 3846 3847

	/* We don't d_delete() NFS sillyrenamed files--they still exist. */
	if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
J
J. Bruce Fields 已提交
3848
		fsnotify_link_count(target);
J
John McCutchan 已提交
3849
		d_delete(dentry);
L
Linus Torvalds 已提交
3850
	}
R
Robert Love 已提交
3851

L
Linus Torvalds 已提交
3852 3853
	return error;
}
3854
EXPORT_SYMBOL(vfs_unlink);
L
Linus Torvalds 已提交
3855 3856 3857

/*
 * Make sure that the actual truncation of the file will occur outside its
3858
 * directory's i_mutex.  Truncate can take a long time if there is a lot of
L
Linus Torvalds 已提交
3859 3860 3861
 * writeout happening, and we don't want to prevent access to the directory
 * while waiting on the I/O.
 */
3862
long do_unlinkat(int dfd, struct filename *name)
L
Linus Torvalds 已提交
3863
{
3864
	int error;
L
Linus Torvalds 已提交
3865
	struct dentry *dentry;
3866 3867 3868
	struct path path;
	struct qstr last;
	int type;
L
Linus Torvalds 已提交
3869
	struct inode *inode = NULL;
3870
	struct inode *delegated_inode = NULL;
3871 3872
	unsigned int lookup_flags = 0;
retry:
3873
	name = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
3874 3875
	if (IS_ERR(name))
		return PTR_ERR(name);
3876

L
Linus Torvalds 已提交
3877
	error = -EISDIR;
3878
	if (type != LAST_NORM)
L
Linus Torvalds 已提交
3879
		goto exit1;
3880

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

slashes:
3924 3925
	if (d_is_negative(dentry))
		error = -ENOENT;
M
Miklos Szeredi 已提交
3926
	else if (d_is_dir(dentry))
3927 3928 3929
		error = -EISDIR;
	else
		error = -ENOTDIR;
L
Linus Torvalds 已提交
3930 3931 3932
	goto exit2;
}

3933
SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
3934 3935 3936 3937 3938
{
	if ((flag & ~AT_REMOVEDIR) != 0)
		return -EINVAL;

	if (flag & AT_REMOVEDIR)
3939
		return do_rmdir(dfd, getname(pathname));
3940
	return do_unlinkat(dfd, getname(pathname));
3941 3942
}

3943
SYSCALL_DEFINE1(unlink, const char __user *, pathname)
3944
{
3945
	return do_unlinkat(AT_FDCWD, getname(pathname));
3946 3947
}

3948
int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
L
Linus Torvalds 已提交
3949
{
3950
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3951 3952 3953 3954

	if (error)
		return error;

A
Al Viro 已提交
3955
	if (!dir->i_op->symlink)
L
Linus Torvalds 已提交
3956 3957 3958 3959 3960 3961 3962
		return -EPERM;

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

	error = dir->i_op->symlink(dir, dentry, oldname);
3963
	if (!error)
3964
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3965 3966
	return error;
}
3967
EXPORT_SYMBOL(vfs_symlink);
L
Linus Torvalds 已提交
3968

3969
static long do_symlinkat(const char __user *oldname, int newdfd,
3970
		  const char __user *newname)
L
Linus Torvalds 已提交
3971
{
3972
	int error;
3973
	struct filename *from;
3974
	struct dentry *dentry;
3975
	struct path path;
3976
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3977 3978

	from = getname(oldname);
3979
	if (IS_ERR(from))
L
Linus Torvalds 已提交
3980
		return PTR_ERR(from);
3981 3982
retry:
	dentry = user_path_create(newdfd, newname, &path, lookup_flags);
3983 3984
	error = PTR_ERR(dentry);
	if (IS_ERR(dentry))
3985
		goto out_putname;
3986

3987
	error = security_path_symlink(&path, dentry, from->name);
3988
	if (!error)
3989
		error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
A
Al Viro 已提交
3990
	done_path_create(&path, dentry);
3991 3992 3993 3994
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
3995
out_putname:
L
Linus Torvalds 已提交
3996 3997 3998 3999
	putname(from);
	return error;
}

4000 4001 4002 4003 4004 4005
SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
	return do_symlinkat(oldname, newdfd, newname);
}

4006
SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
4007
{
4008
	return do_symlinkat(oldname, AT_FDCWD, newname);
4009 4010
}

J
J. Bruce Fields 已提交
4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030
/**
 * 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 已提交
4031 4032
{
	struct inode *inode = old_dentry->d_inode;
4033
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
4034 4035 4036 4037 4038
	int error;

	if (!inode)
		return -ENOENT;

4039
	error = may_create(dir, new_dentry);
L
Linus Torvalds 已提交
4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050
	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;
4051 4052 4053 4054 4055 4056 4057
	/*
	 * 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 已提交
4058
	if (!dir->i_op->link)
L
Linus Torvalds 已提交
4059
		return -EPERM;
4060
	if (S_ISDIR(inode->i_mode))
L
Linus Torvalds 已提交
4061 4062 4063 4064 4065 4066
		return -EPERM;

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

A
Al Viro 已提交
4067
	inode_lock(inode);
4068
	/* Make sure we don't allow creating hardlink to an unlinked file */
4069
	if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
4070
		error =  -ENOENT;
4071 4072
	else if (max_links && inode->i_nlink >= max_links)
		error = -EMLINK;
J
J. Bruce Fields 已提交
4073 4074 4075 4076 4077
	else {
		error = try_break_deleg(inode, delegated_inode);
		if (!error)
			error = dir->i_op->link(old_dentry, dir, new_dentry);
	}
4078 4079 4080 4081 4082 4083

	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 已提交
4084
	inode_unlock(inode);
4085
	if (!error)
4086
		fsnotify_link(dir, inode, new_dentry);
L
Linus Torvalds 已提交
4087 4088
	return error;
}
4089
EXPORT_SYMBOL(vfs_link);
L
Linus Torvalds 已提交
4090 4091 4092 4093 4094 4095 4096 4097 4098 4099

/*
 * 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
 */
4100
static int do_linkat(int olddfd, const char __user *oldname, int newdfd,
4101
	      const char __user *newname, int flags)
L
Linus Torvalds 已提交
4102 4103
{
	struct dentry *new_dentry;
4104
	struct path old_path, new_path;
J
J. Bruce Fields 已提交
4105
	struct inode *delegated_inode = NULL;
4106
	int how = 0;
L
Linus Torvalds 已提交
4107 4108
	int error;

4109
	if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0)
4110
		return -EINVAL;
4111
	/*
4112 4113 4114
	 * 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.
4115
	 */
4116 4117 4118
	if (flags & AT_EMPTY_PATH) {
		if (!capable(CAP_DAC_READ_SEARCH))
			return -ENOENT;
4119
		how = LOOKUP_EMPTY;
4120
	}
4121 4122 4123

	if (flags & AT_SYMLINK_FOLLOW)
		how |= LOOKUP_FOLLOW;
4124
retry:
4125
	error = user_path_at(olddfd, oldname, how, &old_path);
L
Linus Torvalds 已提交
4126
	if (error)
4127 4128
		return error;

4129 4130
	new_dentry = user_path_create(newdfd, newname, &new_path,
					(how & LOOKUP_REVAL));
L
Linus Torvalds 已提交
4131
	error = PTR_ERR(new_dentry);
4132
	if (IS_ERR(new_dentry))
4133 4134 4135 4136 4137
		goto out;

	error = -EXDEV;
	if (old_path.mnt != new_path.mnt)
		goto out_dput;
K
Kees Cook 已提交
4138 4139 4140
	error = may_linkat(&old_path);
	if (unlikely(error))
		goto out_dput;
4141
	error = security_path_link(old_path.dentry, &new_path, new_dentry);
4142
	if (error)
4143
		goto out_dput;
J
J. Bruce Fields 已提交
4144
	error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
4145
out_dput:
A
Al Viro 已提交
4146
	done_path_create(&new_path, new_dentry);
J
J. Bruce Fields 已提交
4147 4148
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
4149 4150
		if (!error) {
			path_put(&old_path);
J
J. Bruce Fields 已提交
4151
			goto retry;
4152
		}
J
J. Bruce Fields 已提交
4153
	}
4154
	if (retry_estale(error, how)) {
4155
		path_put(&old_path);
4156 4157 4158
		how |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
4159
out:
4160
	path_put(&old_path);
L
Linus Torvalds 已提交
4161 4162 4163 4164

	return error;
}

4165 4166 4167 4168 4169 4170
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);
}

4171
SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
4172
{
4173
	return do_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4174 4175
}

4176 4177 4178 4179 4180 4181 4182
/**
 * 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 已提交
4183
 * @flags:	rename flags
4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197
 *
 * 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 已提交
4198 4199 4200
 * 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:
4201
 *
4202
 *	a) we can get into loop creation.
L
Linus Torvalds 已提交
4203 4204
 *	b) race potential - two innocent renames can create a loop together.
 *	   That's where 4.4 screws up. Current fix: serialization on
4205
 *	   sb->s_vfs_rename_mutex. We might be more accurate, but that's another
L
Linus Torvalds 已提交
4206
 *	   story.
4207 4208
 *	c) we have to lock _four_ objects - parents and victim (if it exists),
 *	   and source (if it is not a directory).
4209
 *	   And that - after we got ->i_mutex on parents (until then we don't know
L
Linus Torvalds 已提交
4210 4211
 *	   whether the target exists).  Solution: try to be smart with locking
 *	   order for inodes.  We rely on the fact that tree topology may change
4212
 *	   only under ->s_vfs_rename_mutex _and_ that parent of the object we
L
Linus Torvalds 已提交
4213 4214 4215
 *	   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,
4216
 *	   lock child" and rename is under ->s_vfs_rename_mutex.
L
Linus Torvalds 已提交
4217 4218 4219
 *	   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.
4220
 *	d) conversion from fhandle to dentry may come in the wrong moment - when
4221
 *	   we are removing the target. Solution: we will have to grab ->i_mutex
L
Linus Torvalds 已提交
4222
 *	   in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
4223
 *	   ->i_mutex on parents, which works but leads to some truly excessive
L
Linus Torvalds 已提交
4224 4225
 *	   locking].
 */
4226 4227
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	       struct inode *new_dir, struct dentry *new_dentry,
M
Miklos Szeredi 已提交
4228
	       struct inode **delegated_inode, unsigned int flags)
L
Linus Torvalds 已提交
4229
{
4230 4231 4232
	int error;
	bool is_dir = d_is_dir(old_dentry);
	struct inode *source = old_dentry->d_inode;
S
Sage Weil 已提交
4233
	struct inode *target = new_dentry->d_inode;
M
Miklos Szeredi 已提交
4234 4235
	bool new_is_dir = false;
	unsigned max_links = new_dir->i_sb->s_max_links;
A
Al Viro 已提交
4236
	struct name_snapshot old_name;
4237

4238
	if (source == target)
4239 4240 4241 4242 4243 4244
		return 0;

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

M
Miklos Szeredi 已提交
4245
	if (!target) {
4246
		error = may_create(new_dir, new_dentry);
M
Miklos Szeredi 已提交
4247 4248 4249 4250 4251 4252 4253 4254
	} 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);
	}
4255 4256 4257
	if (error)
		return error;

4258
	if (!old_dir->i_op->rename)
4259
		return -EPERM;
L
Linus Torvalds 已提交
4260 4261 4262 4263 4264

	/*
	 * If we are going to change the parent - check write permissions,
	 * we'll need to flip '..'.
	 */
M
Miklos Szeredi 已提交
4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275
	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 已提交
4276 4277
	}

4278 4279
	error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
				      flags);
L
Linus Torvalds 已提交
4280 4281 4282
	if (error)
		return error;

A
Al Viro 已提交
4283
	take_dentry_name_snapshot(&old_name, old_dentry);
4284
	dget(new_dentry);
M
Miklos Szeredi 已提交
4285
	if (!is_dir || (flags & RENAME_EXCHANGE))
4286 4287
		lock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4288
		inode_lock(target);
S
Sage Weil 已提交
4289 4290

	error = -EBUSY;
4291
	if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry))
S
Sage Weil 已提交
4292 4293
		goto out;

M
Miklos Szeredi 已提交
4294
	if (max_links && new_dir != old_dir) {
4295
		error = -EMLINK;
M
Miklos Szeredi 已提交
4296
		if (is_dir && !new_is_dir && new_dir->i_nlink >= max_links)
4297
			goto out;
M
Miklos Szeredi 已提交
4298 4299 4300 4301 4302
		if ((flags & RENAME_EXCHANGE) && !is_dir && new_is_dir &&
		    old_dir->i_nlink >= max_links)
			goto out;
	}
	if (!is_dir) {
4303
		error = try_break_deleg(source, delegated_inode);
4304 4305
		if (error)
			goto out;
M
Miklos Szeredi 已提交
4306 4307 4308 4309 4310
	}
	if (target && !new_is_dir) {
		error = try_break_deleg(target, delegated_inode);
		if (error)
			goto out;
4311
	}
4312
	error = old_dir->i_op->rename(old_dir, old_dentry,
M
Miklos Szeredi 已提交
4313
				       new_dir, new_dentry, flags);
S
Sage Weil 已提交
4314 4315 4316
	if (error)
		goto out;

M
Miklos Szeredi 已提交
4317
	if (!(flags & RENAME_EXCHANGE) && target) {
4318 4319
		if (is_dir) {
			shrink_dcache_parent(new_dentry);
4320
			target->i_flags |= S_DEAD;
4321
		}
S
Sage Weil 已提交
4322
		dont_mount(new_dentry);
4323
		detach_mounts(new_dentry);
4324
	}
M
Miklos Szeredi 已提交
4325 4326 4327 4328 4329 4330
	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 已提交
4331
out:
M
Miklos Szeredi 已提交
4332
	if (!is_dir || (flags & RENAME_EXCHANGE))
4333 4334
		unlock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4335
		inode_unlock(target);
L
Linus Torvalds 已提交
4336
	dput(new_dentry);
M
Miklos Szeredi 已提交
4337
	if (!error) {
4338
		fsnotify_move(old_dir, new_dir, &old_name.name, is_dir,
M
Miklos Szeredi 已提交
4339 4340
			      !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
		if (flags & RENAME_EXCHANGE) {
4341
			fsnotify_move(new_dir, old_dir, &old_dentry->d_name,
M
Miklos Szeredi 已提交
4342 4343 4344
				      new_is_dir, NULL, new_dentry);
		}
	}
A
Al Viro 已提交
4345
	release_dentry_name_snapshot(&old_name);
R
Robert Love 已提交
4346

L
Linus Torvalds 已提交
4347 4348
	return error;
}
4349
EXPORT_SYMBOL(vfs_rename);
L
Linus Torvalds 已提交
4350

4351 4352
int do_renameat2(int olddfd, struct filename *from, int newdfd,
		 struct filename *to, unsigned int flags)
L
Linus Torvalds 已提交
4353
{
4354 4355
	struct dentry *old_dentry, *new_dentry;
	struct dentry *trap;
4356 4357 4358
	struct path old_path, new_path;
	struct qstr old_last, new_last;
	int old_type, new_type;
4359
	struct inode *delegated_inode = NULL;
4360
	unsigned int lookup_flags = 0, target_flags = LOOKUP_RENAME_TARGET;
4361
	bool should_retry = false;
4362
	int error = -EINVAL;
M
Miklos Szeredi 已提交
4363

M
Miklos Szeredi 已提交
4364
	if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
4365
		goto put_both;
M
Miklos Szeredi 已提交
4366

M
Miklos Szeredi 已提交
4367 4368
	if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) &&
	    (flags & RENAME_EXCHANGE))
4369
		goto put_both;
M
Miklos Szeredi 已提交
4370

4371 4372 4373
	if (flags & RENAME_EXCHANGE)
		target_flags = 0;

4374
retry:
4375 4376
	from = filename_parentat(olddfd, from, lookup_flags, &old_path,
					&old_last, &old_type);
4377 4378
	if (IS_ERR(from)) {
		error = PTR_ERR(from);
4379
		goto put_new;
4380
	}
L
Linus Torvalds 已提交
4381

4382 4383
	to = filename_parentat(newdfd, to, lookup_flags, &new_path, &new_last,
				&new_type);
4384 4385
	if (IS_ERR(to)) {
		error = PTR_ERR(to);
L
Linus Torvalds 已提交
4386
		goto exit1;
4387
	}
L
Linus Torvalds 已提交
4388 4389

	error = -EXDEV;
4390
	if (old_path.mnt != new_path.mnt)
L
Linus Torvalds 已提交
4391 4392 4393
		goto exit2;

	error = -EBUSY;
4394
	if (old_type != LAST_NORM)
L
Linus Torvalds 已提交
4395 4396
		goto exit2;

M
Miklos Szeredi 已提交
4397 4398
	if (flags & RENAME_NOREPLACE)
		error = -EEXIST;
4399
	if (new_type != LAST_NORM)
L
Linus Torvalds 已提交
4400 4401
		goto exit2;

4402
	error = mnt_want_write(old_path.mnt);
4403 4404 4405
	if (error)
		goto exit2;

4406
retry_deleg:
4407
	trap = lock_rename(new_path.dentry, old_path.dentry);
L
Linus Torvalds 已提交
4408

4409
	old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags);
L
Linus Torvalds 已提交
4410 4411 4412 4413 4414
	error = PTR_ERR(old_dentry);
	if (IS_ERR(old_dentry))
		goto exit3;
	/* source must exist */
	error = -ENOENT;
4415
	if (d_is_negative(old_dentry))
L
Linus Torvalds 已提交
4416
		goto exit4;
4417
	new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags);
M
Miklos Szeredi 已提交
4418 4419 4420 4421 4422 4423
	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 已提交
4424 4425 4426 4427 4428 4429 4430
	if (flags & RENAME_EXCHANGE) {
		error = -ENOENT;
		if (d_is_negative(new_dentry))
			goto exit5;

		if (!d_is_dir(new_dentry)) {
			error = -ENOTDIR;
4431
			if (new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4432 4433 4434
				goto exit5;
		}
	}
L
Linus Torvalds 已提交
4435
	/* unless the source is a directory trailing slashes give -ENOTDIR */
M
Miklos Szeredi 已提交
4436
	if (!d_is_dir(old_dentry)) {
L
Linus Torvalds 已提交
4437
		error = -ENOTDIR;
4438
		if (old_last.name[old_last.len])
M
Miklos Szeredi 已提交
4439
			goto exit5;
4440
		if (!(flags & RENAME_EXCHANGE) && new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4441
			goto exit5;
L
Linus Torvalds 已提交
4442 4443 4444 4445
	}
	/* source should not be ancestor of target */
	error = -EINVAL;
	if (old_dentry == trap)
M
Miklos Szeredi 已提交
4446
		goto exit5;
L
Linus Torvalds 已提交
4447
	/* target should not be an ancestor of source */
M
Miklos Szeredi 已提交
4448 4449
	if (!(flags & RENAME_EXCHANGE))
		error = -ENOTEMPTY;
L
Linus Torvalds 已提交
4450 4451 4452
	if (new_dentry == trap)
		goto exit5;

4453 4454
	error = security_path_rename(&old_path, old_dentry,
				     &new_path, new_dentry, flags);
4455
	if (error)
4456
		goto exit5;
4457 4458
	error = vfs_rename(old_path.dentry->d_inode, old_dentry,
			   new_path.dentry->d_inode, new_dentry,
M
Miklos Szeredi 已提交
4459
			   &delegated_inode, flags);
L
Linus Torvalds 已提交
4460 4461 4462 4463 4464
exit5:
	dput(new_dentry);
exit4:
	dput(old_dentry);
exit3:
4465
	unlock_rename(new_path.dentry, old_path.dentry);
4466 4467 4468 4469 4470
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
		if (!error)
			goto retry_deleg;
	}
4471
	mnt_drop_write(old_path.mnt);
L
Linus Torvalds 已提交
4472
exit2:
4473 4474
	if (retry_estale(error, lookup_flags))
		should_retry = true;
4475
	path_put(&new_path);
L
Linus Torvalds 已提交
4476
exit1:
4477
	path_put(&old_path);
4478 4479 4480 4481 4482
	if (should_retry) {
		should_retry = false;
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4483 4484 4485 4486 4487 4488
put_both:
	if (!IS_ERR(from))
		putname(from);
put_new:
	if (!IS_ERR(to))
		putname(to);
L
Linus Torvalds 已提交
4489 4490 4491
	return error;
}

4492 4493 4494
SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, unsigned int, flags)
{
4495 4496
	return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname),
				flags);
4497 4498
}

M
Miklos Szeredi 已提交
4499 4500 4501
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
4502 4503
	return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname),
				0);
M
Miklos Szeredi 已提交
4504 4505
}

4506
SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4507
{
4508 4509
	return do_renameat2(AT_FDCWD, getname(oldname), AT_FDCWD,
				getname(newname), 0);
4510 4511
}

A
Al Viro 已提交
4512
int readlink_copy(char __user *buffer, int buflen, const char *link)
L
Linus Torvalds 已提交
4513
{
A
Al Viro 已提交
4514
	int len = PTR_ERR(link);
L
Linus Torvalds 已提交
4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526
	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;
}

4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539
/**
 * 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);
4540 4541 4542
	DEFINE_DELAYED_CALL(done);
	const char *link;
	int res;
4543

4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554
	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);
	}
4555

4556
	link = READ_ONCE(inode->i_link);
4557 4558 4559 4560 4561 4562 4563 4564
	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;
4565 4566
}
EXPORT_SYMBOL(vfs_readlink);
L
Linus Torvalds 已提交
4567

M
Miklos Szeredi 已提交
4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592
/**
 * 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 已提交
4593
/* get the link contents into pagecache */
4594
const char *page_get_link(struct dentry *dentry, struct inode *inode,
4595
			  struct delayed_call *callback)
L
Linus Torvalds 已提交
4596
{
4597 4598
	char *kaddr;
	struct page *page;
4599 4600
	struct address_space *mapping = inode->i_mapping;

4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613
	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;
	}
4614
	set_delayed_call(callback, page_put_link, page);
4615 4616
	BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
	kaddr = page_address(page);
4617
	nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
4618
	return kaddr;
L
Linus Torvalds 已提交
4619 4620
}

4621
EXPORT_SYMBOL(page_get_link);
L
Linus Torvalds 已提交
4622

4623
void page_put_link(void *arg)
L
Linus Torvalds 已提交
4624
{
4625
	put_page(arg);
L
Linus Torvalds 已提交
4626
}
4627
EXPORT_SYMBOL(page_put_link);
L
Linus Torvalds 已提交
4628

4629 4630
int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
4631
	DEFINE_DELAYED_CALL(done);
4632 4633
	int res = readlink_copy(buffer, buflen,
				page_get_link(dentry, d_inode(dentry),
4634 4635
					      &done));
	do_delayed_call(&done);
4636 4637 4638 4639
	return res;
}
EXPORT_SYMBOL(page_readlink);

4640 4641 4642 4643
/*
 * 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 已提交
4644 4645
{
	struct address_space *mapping = inode->i_mapping;
4646
	struct page *page;
4647
	void *fsdata;
4648
	int err;
4649
	unsigned int flags = 0;
4650 4651
	if (nofs)
		flags |= AOP_FLAG_NOFS;
L
Linus Torvalds 已提交
4652

4653
retry:
4654
	err = pagecache_write_begin(NULL, mapping, 0, len-1,
4655
				flags, &page, &fsdata);
L
Linus Torvalds 已提交
4656
	if (err)
4657 4658
		goto fail;

4659
	memcpy(page_address(page), symname, len-1);
4660 4661 4662

	err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
							page, fsdata);
L
Linus Torvalds 已提交
4663 4664
	if (err < 0)
		goto fail;
4665 4666 4667
	if (err < len-1)
		goto retry;

L
Linus Torvalds 已提交
4668 4669 4670 4671 4672
	mark_inode_dirty(inode);
	return 0;
fail:
	return err;
}
4673
EXPORT_SYMBOL(__page_symlink);
L
Linus Torvalds 已提交
4674

4675 4676 4677
int page_symlink(struct inode *inode, const char *symname, int len)
{
	return __page_symlink(inode, symname, len,
4678
			!mapping_gfp_constraint(inode->i_mapping, __GFP_FS));
4679
}
4680
EXPORT_SYMBOL(page_symlink);
4681

4682
const struct inode_operations page_symlink_inode_operations = {
4683
	.get_link	= page_get_link,
L
Linus Torvalds 已提交
4684 4685
};
EXPORT_SYMBOL(page_symlink_inode_operations);