namei.c 120.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 *  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>
18
#include <linux/export.h>
19
#include <linux/kernel.h>
L
Linus Torvalds 已提交
20 21 22 23
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/namei.h>
#include <linux/pagemap.h>
R
Robert Love 已提交
24
#include <linux/fsnotify.h>
L
Linus Torvalds 已提交
25 26
#include <linux/personality.h>
#include <linux/security.h>
M
Mimi Zohar 已提交
27
#include <linux/ima.h>
L
Linus Torvalds 已提交
28 29 30
#include <linux/syscalls.h>
#include <linux/mount.h>
#include <linux/audit.h>
31
#include <linux/capability.h>
32
#include <linux/file.h>
33
#include <linux/fcntl.h>
34
#include <linux/device_cgroup.h>
35
#include <linux/fs_struct.h>
36
#include <linux/posix_acl.h>
37
#include <linux/hash.h>
38
#include <linux/bitops.h>
39
#include <linux/init_task.h>
L
Linus Torvalds 已提交
40 41
#include <asm/uaccess.h>

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

L
Linus Torvalds 已提交
45 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
/* [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 已提交
79
 * the name is a symlink pointing to a non-existent name.
L
Linus Torvalds 已提交
80 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
 *
 * 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)
112
 * implemented.  Let's see if raised priority of ->s_vfs_rename_mutex gives
L
Linus Torvalds 已提交
113 114 115 116 117 118 119 120 121 122
 * 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.
 */
123

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

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

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

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

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

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

154 155 156 157 158 159
	/*
	 * 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 已提交
160
	if (unlikely(len == EMBEDDED_NAME_MAX)) {
A
Al Viro 已提交
161
		const size_t size = offsetof(struct filename, iname[1]);
162 163
		kname = (char *)result;

A
Al Viro 已提交
164 165 166 167 168 169
		/*
		 * 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 已提交
170 171 172
		if (unlikely(!result)) {
			__putname(kname);
			return ERR_PTR(-ENOMEM);
173 174
		}
		result->name = kname;
A
Al Viro 已提交
175 176 177 178 179 180 181 182 183 184 185
		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);
		}
186 187
	}

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

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

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

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

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

221
	if (len <= EMBEDDED_NAME_MAX) {
A
Al Viro 已提交
222
		result->name = (char *)result->iname;
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
	} else if (len <= PATH_MAX) {
		struct filename *tmp;

		tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
		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);
238 239
	result->uptr = NULL;
	result->aname = NULL;
240
	result->refcnt = 1;
241
	audit_getname(result);
242 243 244 245

	return result;
}

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

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

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

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

	if (mask & MAY_NOT_BLOCK) {
266 267
		acl = get_cached_acl_rcu(inode, ACL_TYPE_ACCESS);
	        if (!acl)
268
	                return -EAGAIN;
269
		/* no ->get_acl() calls in RCU mode... */
270
		if (is_uncached_acl(acl))
271
			return -ECHILD;
A
Ari Savolainen 已提交
272
	        return posix_acl_permission(inode, acl, mask & ~MAY_NOT_BLOCK);
273 274
	}

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

	return -EAGAIN;
}

288
/*
289
 * This does the basic permission checking
L
Linus Torvalds 已提交
290
 */
291
static int acl_permission_check(struct inode *inode, int mask)
L
Linus Torvalds 已提交
292
{
293
	unsigned int mode = inode->i_mode;
L
Linus Torvalds 已提交
294

295
	if (likely(uid_eq(current_fsuid(), inode->i_uid)))
L
Linus Torvalds 已提交
296 297
		mode >>= 6;
	else {
298
		if (IS_POSIXACL(inode) && (mode & S_IRWXG)) {
299
			int error = check_acl(inode, mask);
300 301
			if (error != -EAGAIN)
				return error;
L
Linus Torvalds 已提交
302 303 304 305 306 307 308 309 310
		}

		if (in_group_p(inode->i_gid))
			mode >>= 3;
	}

	/*
	 * If the DACs are ok we don't need any capability check.
	 */
311
	if ((mask & ~mode & (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0)
L
Linus Torvalds 已提交
312
		return 0;
313 314 315 316
	return -EACCES;
}

/**
317
 * generic_permission -  check for access rights on a Posix-like filesystem
318
 * @inode:	inode to check access rights for
319
 * @mask:	right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC, ...)
320 321 322 323
 *
 * 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
324 325 326 327 328
 * 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.
329
 */
330
int generic_permission(struct inode *inode, int mask)
331 332 333 334
{
	int ret;

	/*
335
	 * Do the basic permission checks.
336
	 */
337
	ret = acl_permission_check(inode, mask);
338 339
	if (ret != -EACCES)
		return ret;
L
Linus Torvalds 已提交
340

341 342
	if (S_ISDIR(inode->i_mode)) {
		/* DACs are overridable for directories */
343
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
344 345
			return 0;
		if (!(mask & MAY_WRITE))
346 347
			if (capable_wrt_inode_uidgid(inode,
						     CAP_DAC_READ_SEARCH))
348 349 350
				return 0;
		return -EACCES;
	}
L
Linus Torvalds 已提交
351 352
	/*
	 * Read/write DACs are always overridable.
353 354
	 * Executable DACs are overridable when there is
	 * at least one exec bit set.
L
Linus Torvalds 已提交
355
	 */
356
	if (!(mask & MAY_EXEC) || (inode->i_mode & S_IXUGO))
357
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
L
Linus Torvalds 已提交
358 359 360 361 362
			return 0;

	/*
	 * Searching includes executable on directories, else just read.
	 */
363
	mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
364
	if (mask == MAY_READ)
365
		if (capable_wrt_inode_uidgid(inode, CAP_DAC_READ_SEARCH))
L
Linus Torvalds 已提交
366 367 368 369
			return 0;

	return -EACCES;
}
370
EXPORT_SYMBOL(generic_permission);
L
Linus Torvalds 已提交
371

372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
/*
 * 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);
}

C
Christoph Hellwig 已提交
392
/**
D
David Howells 已提交
393 394 395
 * __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)
C
Christoph Hellwig 已提交
396
 *
D
David Howells 已提交
397
 * Check for read/write/execute permissions on an inode.
398 399
 *
 * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
D
David Howells 已提交
400 401 402
 *
 * This does not check for a read-only file system.  You probably want
 * inode_permission().
C
Christoph Hellwig 已提交
403
 */
D
David Howells 已提交
404
int __inode_permission(struct inode *inode, int mask)
L
Linus Torvalds 已提交
405
{
406
	int retval;
L
Linus Torvalds 已提交
407

408
	if (unlikely(mask & MAY_WRITE)) {
L
Linus Torvalds 已提交
409 410 411 412
		/*
		 * Nobody gets write access to an immutable file.
		 */
		if (IS_IMMUTABLE(inode))
E
Eryu Guan 已提交
413
			return -EPERM;
414 415 416 417 418 419 420 421

		/*
		 * 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;
L
Linus Torvalds 已提交
422 423
	}

424
	retval = do_inode_permission(inode, mask);
L
Linus Torvalds 已提交
425 426 427
	if (retval)
		return retval;

428 429 430 431
	retval = devcgroup_inode_permission(inode, mask);
	if (retval)
		return retval;

432
	return security_inode_permission(inode, mask);
L
Linus Torvalds 已提交
433
}
434
EXPORT_SYMBOL(__inode_permission);
L
Linus Torvalds 已提交
435

D
David Howells 已提交
436 437 438
/**
 * sb_permission - Check superblock-level permissions
 * @sb: Superblock of inode to check permission on
439
 * @inode: Inode to check permission on
D
David Howells 已提交
440 441 442 443 444 445 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 472 473 474 475 476
 * @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. */
		if ((sb->s_flags & MS_RDONLY) &&
		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
			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;
	return __inode_permission(inode, mask);
}
477
EXPORT_SYMBOL(inode_permission);
D
David Howells 已提交
478

J
Jan Blunck 已提交
479 480 481 482 483 484
/**
 * 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.
 */
485
void path_get(const struct path *path)
J
Jan Blunck 已提交
486 487 488 489 490 491
{
	mntget(path->mnt);
	dget(path->dentry);
}
EXPORT_SYMBOL(path_get);

J
Jan Blunck 已提交
492 493 494 495 496 497
/**
 * 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.
 */
498
void path_put(const struct path *path)
L
Linus Torvalds 已提交
499
{
J
Jan Blunck 已提交
500 501
	dput(path->dentry);
	mntput(path->mnt);
L
Linus Torvalds 已提交
502
}
J
Jan Blunck 已提交
503
EXPORT_SYMBOL(path_put);
L
Linus Torvalds 已提交
504

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

529
static void set_nameidata(struct nameidata *p, int dfd, struct filename *name)
530
{
531 532
	struct nameidata *old = current->nameidata;
	p->stack = p->internal;
533 534
	p->dfd = dfd;
	p->name = name;
535
	p->total_link_count = old ? old->total_link_count : 0;
536
	p->saved = old;
537
	current->nameidata = p;
538 539
}

540
static void restore_nameidata(void)
541
{
542
	struct nameidata *now = current->nameidata, *old = now->saved;
543 544 545 546

	current->nameidata = old;
	if (old)
		old->total_link_count = now->total_link_count;
547
	if (now->stack != now->internal)
548
		kfree(now->stack);
549 550 551 552
}

static int __nd_alloc_stack(struct nameidata *nd)
{
A
Al Viro 已提交
553 554 555 556 557 558 559 560 561
	struct saved *p;

	if (nd->flags & LOOKUP_RCU) {
		p= kmalloc(MAXSYMLINKS * sizeof(struct saved),
				  GFP_ATOMIC);
		if (unlikely(!p))
			return -ECHILD;
	} else {
		p= kmalloc(MAXSYMLINKS * sizeof(struct saved),
562
				  GFP_KERNEL);
A
Al Viro 已提交
563 564 565
		if (unlikely(!p))
			return -ENOMEM;
	}
566 567 568 569 570
	memcpy(p, nd->internal, sizeof(nd->internal));
	nd->stack = p;
	return 0;
}

571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
/**
 * path_connected - Verify that a path->dentry is below path->mnt.mnt_root
 * @path: nameidate to verify
 *
 * Rename can sometimes move a file or directory outside of a bind
 * mount, path_connected allows those cases to be detected.
 */
static bool path_connected(const struct path *path)
{
	struct vfsmount *mnt = path->mnt;

	/* Only bind mounts can have disconnected paths */
	if (mnt->mnt_root == mnt->mnt_sb->s_root)
		return true;

	return is_subdir(path->dentry, mnt->mnt_root);
}

589 590
static inline int nd_alloc_stack(struct nameidata *nd)
{
591
	if (likely(nd->depth != EMBEDDED_LEVELS))
592 593 594 595 596 597
		return 0;
	if (likely(nd->stack != nd->internal))
		return 0;
	return __nd_alloc_stack(nd);
}

598 599 600 601 602
static void drop_links(struct nameidata *nd)
{
	int i = nd->depth;
	while (i--) {
		struct saved *last = nd->stack + i;
603 604
		do_delayed_call(&last->done);
		clear_delayed_call(&last->done);
605 606 607 608 609 610 611 612 613 614 615
	}
}

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);
616 617 618 619
		if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
			path_put(&nd->root);
			nd->root.mnt = NULL;
		}
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660
	} else {
		nd->flags &= ~LOOKUP_RCU;
		if (!(nd->flags & LOOKUP_ROOT))
			nd->root.mnt = NULL;
		rcu_read_unlock();
	}
	nd->depth = 0;
}

/* path_put is needed afterwards regardless of success or failure */
static bool legitimize_path(struct nameidata *nd,
			    struct path *path, unsigned seq)
{
	int res = __legitimize_mnt(path->mnt, nd->m_seq);
	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);
}

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;
}

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

/**
A
Al Viro 已提交
673 674 675
 * unlazy_walk - try to switch to ref-walk mode.
 * @nd: nameidata pathwalk data
 * @dentry: child of nd->path.dentry or NULL
676
 * @seq: seq number to check dentry against
677
 * Returns: 0 on success, -ECHILD on failure
N
Nick Piggin 已提交
678
 *
A
Al Viro 已提交
679 680 681
 * unlazy_walk 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 or NULL.  Must be called from rcu-walk context.
682 683
 * Nothing should touch nameidata between unlazy_walk() failure and
 * terminate_walk().
N
Nick Piggin 已提交
684
 */
685
static int unlazy_walk(struct nameidata *nd, struct dentry *dentry, unsigned seq)
N
Nick Piggin 已提交
686 687 688 689
{
	struct dentry *parent = nd->path.dentry;

	BUG_ON(!(nd->flags & LOOKUP_RCU));
690 691

	nd->flags &= ~LOOKUP_RCU;
692 693 694 695 696 697
	if (unlikely(!legitimize_links(nd)))
		goto out2;
	if (unlikely(!legitimize_mnt(nd->path.mnt, nd->m_seq)))
		goto out2;
	if (unlikely(!lockref_get_not_dead(&parent->d_lockref)))
		goto out1;
A
Al Viro 已提交
698

699 700 701 702 703 704 705 706 707 708 709
	/*
	 * For a negative lookup, the lookup sequence point is the parents
	 * sequence point, and it only needs to revalidate the parent dentry.
	 *
	 * For a positive lookup, 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 still valid.
	 */
A
Al Viro 已提交
710
	if (!dentry) {
711 712
		if (read_seqcount_retry(&parent->d_seq, nd->seq))
			goto out;
A
Al Viro 已提交
713 714
		BUG_ON(nd->inode != parent->d_inode);
	} else {
715 716
		if (!lockref_get_not_dead(&dentry->d_lockref))
			goto out;
717
		if (read_seqcount_retry(&dentry->d_seq, seq))
718
			goto drop_dentry;
A
Al Viro 已提交
719
	}
720 721 722 723 724 725

	/*
	 * Sequence counts matched. Now make sure that the root is
	 * still valid and get it if required.
	 */
	if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
726 727 728 729
		if (unlikely(!legitimize_path(nd, &nd->root, nd->root_seq))) {
			rcu_read_unlock();
			dput(dentry);
			return -ECHILD;
730
		}
N
Nick Piggin 已提交
731 732
	}

A
Al Viro 已提交
733
	rcu_read_unlock();
N
Nick Piggin 已提交
734
	return 0;
A
Al Viro 已提交
735

736
drop_dentry:
A
Al Viro 已提交
737
	rcu_read_unlock();
738
	dput(dentry);
739
	goto drop_root_mnt;
740 741 742 743
out2:
	nd->path.mnt = NULL;
out1:
	nd->path.dentry = NULL;
744
out:
A
Al Viro 已提交
745
	rcu_read_unlock();
746 747 748
drop_root_mnt:
	if (!(nd->flags & LOOKUP_ROOT))
		nd->root.mnt = NULL;
N
Nick Piggin 已提交
749 750 751
	return -ECHILD;
}

752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769
static int unlazy_link(struct nameidata *nd, struct path *link, unsigned seq)
{
	if (unlikely(!legitimize_path(nd, link, seq))) {
		drop_links(nd);
		nd->depth = 0;
		nd->flags &= ~LOOKUP_RCU;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
		if (!(nd->flags & LOOKUP_ROOT))
			nd->root.mnt = NULL;
		rcu_read_unlock();
	} else if (likely(unlazy_walk(nd, NULL, 0)) == 0) {
		return 0;
	}
	path_put(link);
	return -ECHILD;
}

770
static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
771
{
772
	return dentry->d_op->d_revalidate(dentry, flags);
773 774
}

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

790 791 792
	if (nd->flags & LOOKUP_RCU) {
		if (!(nd->flags & LOOKUP_ROOT))
			nd->root.mnt = NULL;
793
		if (unlikely(unlazy_walk(nd, NULL, 0)))
794 795 796
			return -ECHILD;
	}

A
Al Viro 已提交
797 798 799
	if (likely(!(nd->flags & LOOKUP_JUMPED)))
		return 0;

800
	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
801 802
		return 0;

803
	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
804 805 806
	if (status > 0)
		return 0;

A
Al Viro 已提交
807
	if (!status)
808
		status = -ESTALE;
A
Al Viro 已提交
809

810 811 812
	return status;
}

A
Al Viro 已提交
813
static void set_root(struct nameidata *nd)
N
Nick Piggin 已提交
814
{
815
	struct fs_struct *fs = current->fs;
N
Nick Piggin 已提交
816

817 818 819 820 821 822 823 824 825 826 827
	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);
	}
N
Nick Piggin 已提交
828 829
}

J
Jan Blunck 已提交
830
static void path_put_conditional(struct path *path, struct nameidata *nd)
831 832
{
	dput(path->dentry);
833
	if (path->mnt != nd->path.mnt)
834 835 836
		mntput(path->mnt);
}

837 838
static inline void path_to_nameidata(const struct path *path,
					struct nameidata *nd)
839
{
N
Nick Piggin 已提交
840 841 842 843
	if (!(nd->flags & LOOKUP_RCU)) {
		dput(nd->path.dentry);
		if (nd->path.mnt != path->mnt)
			mntput(nd->path.mnt);
844
	}
N
Nick Piggin 已提交
845
	nd->path.mnt = path->mnt;
846
	nd->path.dentry = path->dentry;
847 848
}

849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
static int nd_jump_root(struct nameidata *nd)
{
	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 已提交
869
/*
870
 * Helper to directly jump to a known parsed path from ->get_link,
C
Christoph Hellwig 已提交
871 872
 * caller must have taken a reference to path beforehand.
 */
873
void nd_jump_link(struct path *path)
C
Christoph Hellwig 已提交
874
{
875
	struct nameidata *nd = current->nameidata;
C
Christoph Hellwig 已提交
876 877 878 879 880 881 882
	path_put(&nd->path);

	nd->path = *path;
	nd->inode = nd->path.dentry->d_inode;
	nd->flags |= LOOKUP_JUMPED;
}

883
static inline void put_link(struct nameidata *nd)
884
{
A
Al Viro 已提交
885
	struct saved *last = nd->stack + --nd->depth;
886
	do_delayed_call(&last->done);
A
Al Viro 已提交
887 888
	if (!(nd->flags & LOOKUP_RCU))
		path_put(&last->link);
889 890
}

891 892
int sysctl_protected_symlinks __read_mostly = 0;
int sysctl_protected_hardlinks __read_mostly = 0;
K
Kees Cook 已提交
893 894 895

/**
 * may_follow_link - Check symlink following for unsafe situations
896
 * @nd: nameidata pathwalk data
K
Kees Cook 已提交
897 898 899 900 901 902 903 904 905 906 907 908
 *
 * 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.
 */
A
Al Viro 已提交
909
static inline int may_follow_link(struct nameidata *nd)
K
Kees Cook 已提交
910 911 912
{
	const struct inode *inode;
	const struct inode *parent;
913
	kuid_t puid;
K
Kees Cook 已提交
914 915 916 917 918

	if (!sysctl_protected_symlinks)
		return 0;

	/* Allowed if owner and follower match. */
919
	inode = nd->link_inode;
920
	if (uid_eq(current_cred()->fsuid, inode->i_uid))
K
Kees Cook 已提交
921 922 923
		return 0;

	/* Allowed if parent directory not sticky and world-writable. */
A
Al Viro 已提交
924
	parent = nd->inode;
K
Kees Cook 已提交
925 926 927 928
	if ((parent->i_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH))
		return 0;

	/* Allowed if parent directory and link owner match. */
929 930
	puid = parent->i_uid;
	if (uid_valid(puid) && uid_eq(puid, inode->i_uid))
K
Kees Cook 已提交
931 932
		return 0;

933 934 935
	if (nd->flags & LOOKUP_RCU)
		return -ECHILD;

A
Al Viro 已提交
936
	audit_log_link_denied("follow_link", &nd->stack[0].link);
K
Kees Cook 已提交
937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982
	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)
983
 *  - not CAP_FOWNER in a namespace with the inode owner uid mapped
K
Kees Cook 已提交
984 985 986 987 988 989 990 991 992 993 994 995 996 997 998
 *
 * Returns 0 if successful, -ve on error.
 */
static int may_linkat(struct path *link)
{
	struct inode *inode;

	if (!sysctl_protected_hardlinks)
		return 0;

	inode = link->dentry->d_inode;

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

1002
	audit_log_link_denied("linkat", link);
K
Kees Cook 已提交
1003 1004 1005
	return -EPERM;
}

1006 1007
static __always_inline
const char *get_link(struct nameidata *nd)
L
Linus Torvalds 已提交
1008
{
1009
	struct saved *last = nd->stack + nd->depth - 1;
A
Al Viro 已提交
1010
	struct dentry *dentry = last->link.dentry;
1011
	struct inode *inode = nd->link_inode;
1012
	int error;
1013
	const char *res;
L
Linus Torvalds 已提交
1014

1015 1016 1017
	if (!(nd->flags & LOOKUP_RCU)) {
		touch_atime(&last->link);
		cond_resched();
1018
	} else if (atime_needs_update_rcu(&last->link, inode)) {
A
Al Viro 已提交
1019 1020
		if (unlikely(unlazy_walk(nd, NULL, 0)))
			return ERR_PTR(-ECHILD);
1021
		touch_atime(&last->link);
A
Al Viro 已提交
1022
	}
1023

1024 1025 1026
	error = security_inode_follow_link(dentry, inode,
					   nd->flags & LOOKUP_RCU);
	if (unlikely(error))
1027
		return ERR_PTR(error);
1028

1029
	nd->last_type = LAST_BIND;
1030 1031
	res = inode->i_link;
	if (!res) {
1032 1033 1034
		const char * (*get)(struct dentry *, struct inode *,
				struct delayed_call *);
		get = inode->i_op->get_link;
1035
		if (nd->flags & LOOKUP_RCU) {
1036
			res = get(NULL, inode, &last->done);
1037 1038 1039
			if (res == ERR_PTR(-ECHILD)) {
				if (unlikely(unlazy_walk(nd, NULL, 0)))
					return ERR_PTR(-ECHILD);
1040
				res = get(dentry, inode, &last->done);
1041 1042
			}
		} else {
1043
			res = get(dentry, inode, &last->done);
1044
		}
1045
		if (IS_ERR_OR_NULL(res))
1046 1047 1048
			return res;
	}
	if (*res == '/') {
1049 1050
		if (!nd->root.mnt)
			set_root(nd);
1051 1052
		if (unlikely(nd_jump_root(nd)))
			return ERR_PTR(-ECHILD);
1053 1054
		while (unlikely(*++res == '/'))
			;
L
Linus Torvalds 已提交
1055
	}
1056 1057
	if (!*res)
		res = NULL;
1058 1059
	return res;
}
1060

1061 1062 1063 1064 1065 1066 1067 1068 1069 1070
/*
 * 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 已提交
1071
int follow_up(struct path *path)
L
Linus Torvalds 已提交
1072
{
1073 1074
	struct mount *mnt = real_mount(path->mnt);
	struct mount *parent;
L
Linus Torvalds 已提交
1075
	struct dentry *mountpoint;
N
Nick Piggin 已提交
1076

A
Al Viro 已提交
1077
	read_seqlock_excl(&mount_lock);
1078
	parent = mnt->mnt_parent;
A
Al Viro 已提交
1079
	if (parent == mnt) {
A
Al Viro 已提交
1080
		read_sequnlock_excl(&mount_lock);
L
Linus Torvalds 已提交
1081 1082
		return 0;
	}
1083
	mntget(&parent->mnt);
1084
	mountpoint = dget(mnt->mnt_mountpoint);
A
Al Viro 已提交
1085
	read_sequnlock_excl(&mount_lock);
A
Al Viro 已提交
1086 1087 1088
	dput(path->dentry);
	path->dentry = mountpoint;
	mntput(path->mnt);
1089
	path->mnt = &parent->mnt;
L
Linus Torvalds 已提交
1090 1091
	return 1;
}
1092
EXPORT_SYMBOL(follow_up);
L
Linus Torvalds 已提交
1093

N
Nick Piggin 已提交
1094
/*
1095 1096 1097
 * Perform an automount
 * - return -EISDIR to tell follow_managed() to stop and return the path we
 *   were called with.
L
Linus Torvalds 已提交
1098
 */
1099
static int follow_automount(struct path *path, struct nameidata *nd,
1100
			    bool *need_mntput)
N
Nick Piggin 已提交
1101
{
1102
	struct vfsmount *mnt;
1103
	const struct cred *old_cred;
1104
	int err;
1105 1106 1107 1108

	if (!path->dentry->d_op || !path->dentry->d_op->d_automount)
		return -EREMOTE;

1109 1110 1111 1112 1113 1114 1115 1116 1117 1118
	/* 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.
1119
	 */
1120 1121
	if (!(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
			   LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
1122 1123 1124
	    path->dentry->d_inode)
		return -EISDIR;

1125 1126 1127
	if (path->dentry->d_sb->s_user_ns != &init_user_ns)
		return -EACCES;

1128 1129
	nd->total_link_count++;
	if (nd->total_link_count >= 40)
1130 1131
		return -ELOOP;

1132
	old_cred = override_creds(&init_cred);
1133
	mnt = path->dentry->d_op->d_automount(path);
1134
	revert_creds(old_cred);
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144
	if (IS_ERR(mnt)) {
		/*
		 * The filesystem is allowed to return -EISDIR here to indicate
		 * it doesn't want to automount.  For instance, autofs would do
		 * this so that its userspace daemon can mount on this dentry.
		 *
		 * However, we can only permit this if it's a terminal point in
		 * the path being looked up; if it wasn't then the remainder of
		 * the path is inaccessible and we should say so.
		 */
1145
		if (PTR_ERR(mnt) == -EISDIR && (nd->flags & LOOKUP_PARENT))
1146 1147
			return -EREMOTE;
		return PTR_ERR(mnt);
N
Nick Piggin 已提交
1148
	}
1149

1150 1151
	if (!mnt) /* mount collision */
		return 0;
N
Nick Piggin 已提交
1152

1153 1154 1155 1156 1157
	if (!*need_mntput) {
		/* lock_mount() may release path->mnt on error */
		mntget(path->mnt);
		*need_mntput = true;
	}
1158
	err = finish_automount(mnt, path);
1159

1160 1161 1162
	switch (err) {
	case -EBUSY:
		/* Someone else made a mount here whilst we were busy */
1163
		return 0;
1164
	case 0:
1165
		path_put(path);
1166 1167 1168
		path->mnt = mnt;
		path->dentry = dget(mnt->mnt_root);
		return 0;
1169 1170
	default:
		return err;
1171
	}
1172

A
Al Viro 已提交
1173 1174
}

1175 1176
/*
 * Handle a dentry that is managed in some way.
1177
 * - Flagged for transit management (autofs)
1178 1179 1180 1181 1182 1183 1184
 * - Flagged as mountpoint
 * - Flagged as automount point
 *
 * This may only be called in refwalk mode.
 *
 * Serialization is taken care of in namespace.c
 */
1185
static int follow_managed(struct path *path, struct nameidata *nd)
L
Linus Torvalds 已提交
1186
{
1187
	struct vfsmount *mnt = path->mnt; /* held by caller, must be left alone */
1188 1189
	unsigned managed;
	bool need_mntput = false;
1190
	int ret = 0;
1191 1192 1193 1194 1195 1196 1197

	/* Given that we're not holding a lock here, we retain the value in a
	 * local variable for each dentry as we look at it so that we don't see
	 * the components of that value change under us */
	while (managed = ACCESS_ONCE(path->dentry->d_flags),
	       managed &= DCACHE_MANAGED_DENTRY,
	       unlikely(managed != 0)) {
1198 1199 1200 1201 1202
		/* Allow the filesystem to manage the transit without i_mutex
		 * being held. */
		if (managed & DCACHE_MANAGE_TRANSIT) {
			BUG_ON(!path->dentry->d_op);
			BUG_ON(!path->dentry->d_op->d_manage);
1203
			ret = path->dentry->d_op->d_manage(path->dentry, false);
1204
			if (ret < 0)
1205
				break;
1206 1207
		}

1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222
		/* Transit to a mounted filesystem. */
		if (managed & DCACHE_MOUNTED) {
			struct vfsmount *mounted = lookup_mnt(path);
			if (mounted) {
				dput(path->dentry);
				if (need_mntput)
					mntput(path->mnt);
				path->mnt = mounted;
				path->dentry = dget(mounted->mnt_root);
				need_mntput = true;
				continue;
			}

			/* Something is mounted on this dentry in another
			 * namespace and/or whatever was mounted there in this
A
Al Viro 已提交
1223 1224
			 * namespace got unmounted before lookup_mnt() could
			 * get it */
1225 1226 1227 1228
		}

		/* Handle an automount point */
		if (managed & DCACHE_NEED_AUTOMOUNT) {
1229
			ret = follow_automount(path, nd, &need_mntput);
1230
			if (ret < 0)
1231
				break;
1232 1233 1234 1235 1236
			continue;
		}

		/* We didn't change the current path point */
		break;
L
Linus Torvalds 已提交
1237
	}
1238 1239 1240

	if (need_mntput && path->mnt == mnt)
		mntput(path->mnt);
1241 1242
	if (ret == -EISDIR || !ret)
		ret = 1;
1243 1244 1245 1246 1247
	if (need_mntput)
		nd->flags |= LOOKUP_JUMPED;
	if (unlikely(ret < 0))
		path_put_conditional(path, nd);
	return ret;
L
Linus Torvalds 已提交
1248 1249
}

1250
int follow_down_one(struct path *path)
L
Linus Torvalds 已提交
1251 1252 1253
{
	struct vfsmount *mounted;

A
Al Viro 已提交
1254
	mounted = lookup_mnt(path);
L
Linus Torvalds 已提交
1255
	if (mounted) {
A
Al Viro 已提交
1256 1257 1258 1259
		dput(path->dentry);
		mntput(path->mnt);
		path->mnt = mounted;
		path->dentry = dget(mounted->mnt_root);
L
Linus Torvalds 已提交
1260 1261 1262 1263
		return 1;
	}
	return 0;
}
1264
EXPORT_SYMBOL(follow_down_one);
L
Linus Torvalds 已提交
1265

1266
static inline int managed_dentry_rcu(struct dentry *dentry)
1267
{
1268 1269
	return (dentry->d_flags & DCACHE_MANAGE_TRANSIT) ?
		dentry->d_op->d_manage(dentry, true) : 0;
1270 1271
}

1272
/*
1273 1274
 * Try to skip to top of mountpoint pile in rcuwalk mode.  Fail if
 * we meet a managed dentry that would need blocking.
1275 1276
 */
static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
1277
			       struct inode **inode, unsigned *seqp)
1278
{
1279
	for (;;) {
1280
		struct mount *mounted;
1281 1282 1283 1284
		/*
		 * Don't forget we might have a non-mountpoint managed dentry
		 * that wants to block transit.
		 */
1285 1286 1287
		switch (managed_dentry_rcu(path->dentry)) {
		case -ECHILD:
		default:
1288
			return false;
1289 1290 1291 1292 1293
		case -EISDIR:
			return true;
		case 0:
			break;
		}
1294 1295

		if (!d_mountpoint(path->dentry))
1296
			return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
1297

A
Al Viro 已提交
1298
		mounted = __lookup_mnt(path->mnt, path->dentry);
1299 1300
		if (!mounted)
			break;
1301 1302
		path->mnt = &mounted->mnt;
		path->dentry = mounted->mnt.mnt_root;
1303
		nd->flags |= LOOKUP_JUMPED;
1304
		*seqp = read_seqcount_begin(&path->dentry->d_seq);
1305 1306 1307 1308 1309 1310
		/*
		 * Update the inode too. We don't need to re-check the
		 * dentry sequence number here after this d_inode read,
		 * because a mount-point is always pinned.
		 */
		*inode = path->dentry->d_inode;
1311
	}
1312
	return !read_seqretry(&mount_lock, nd->m_seq) &&
1313
		!(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
1314 1315
}

N
Nick Piggin 已提交
1316 1317
static int follow_dotdot_rcu(struct nameidata *nd)
{
1318
	struct inode *inode = nd->inode;
N
Nick Piggin 已提交
1319

1320
	while (1) {
1321
		if (path_equal(&nd->path, &nd->root))
N
Nick Piggin 已提交
1322 1323 1324 1325 1326 1327
			break;
		if (nd->path.dentry != nd->path.mnt->mnt_root) {
			struct dentry *old = nd->path.dentry;
			struct dentry *parent = old->d_parent;
			unsigned seq;

1328
			inode = parent->d_inode;
N
Nick Piggin 已提交
1329
			seq = read_seqcount_begin(&parent->d_seq);
1330 1331
			if (unlikely(read_seqcount_retry(&old->d_seq, nd->seq)))
				return -ECHILD;
N
Nick Piggin 已提交
1332 1333
			nd->path.dentry = parent;
			nd->seq = seq;
1334 1335
			if (unlikely(!path_connected(&nd->path)))
				return -ENOENT;
N
Nick Piggin 已提交
1336
			break;
1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351
		} else {
			struct mount *mnt = real_mount(nd->path.mnt);
			struct mount *mparent = mnt->mnt_parent;
			struct dentry *mountpoint = mnt->mnt_mountpoint;
			struct inode *inode2 = mountpoint->d_inode;
			unsigned seq = read_seqcount_begin(&mountpoint->d_seq);
			if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
				return -ECHILD;
			if (&mparent->mnt == nd->path.mnt)
				break;
			/* we know that mountpoint was pinned */
			nd->path.dentry = mountpoint;
			nd->path.mnt = &mparent->mnt;
			inode = inode2;
			nd->seq = seq;
N
Nick Piggin 已提交
1352 1353
		}
	}
1354
	while (unlikely(d_mountpoint(nd->path.dentry))) {
1355 1356
		struct mount *mounted;
		mounted = __lookup_mnt(nd->path.mnt, nd->path.dentry);
1357 1358
		if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
			return -ECHILD;
1359 1360 1361 1362
		if (!mounted)
			break;
		nd->path.mnt = &mounted->mnt;
		nd->path.dentry = mounted->mnt.mnt_root;
1363
		inode = nd->path.dentry->d_inode;
1364 1365
		nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
	}
1366
	nd->inode = inode;
N
Nick Piggin 已提交
1367 1368 1369
	return 0;
}

1370 1371 1372 1373 1374
/*
 * 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.
 */
1375
int follow_down(struct path *path)
1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394
{
	unsigned managed;
	int ret;

	while (managed = ACCESS_ONCE(path->dentry->d_flags),
	       unlikely(managed & DCACHE_MANAGED_DENTRY)) {
		/* Allow the filesystem to manage the transit without i_mutex
		 * being held.
		 *
		 * We indicate to the filesystem if someone is trying to mount
		 * something here.  This gives autofs the chance to deny anyone
		 * other than its daemon the right to mount on its
		 * superstructure.
		 *
		 * The filesystem may sleep at this point.
		 */
		if (managed & DCACHE_MANAGE_TRANSIT) {
			BUG_ON(!path->dentry->d_op);
			BUG_ON(!path->dentry->d_op->d_manage);
1395
			ret = path->dentry->d_op->d_manage(
1396
				path->dentry, false);
1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417
			if (ret < 0)
				return ret == -EISDIR ? 0 : ret;
		}

		/* Transit to a mounted filesystem. */
		if (managed & DCACHE_MOUNTED) {
			struct vfsmount *mounted = lookup_mnt(path);
			if (!mounted)
				break;
			dput(path->dentry);
			mntput(path->mnt);
			path->mnt = mounted;
			path->dentry = dget(mounted->mnt_root);
			continue;
		}

		/* Don't handle automount points here */
		break;
	}
	return 0;
}
1418
EXPORT_SYMBOL(follow_down);
1419

1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435
/*
 * Skip to top of mountpoint pile in refwalk mode for follow_dotdot()
 */
static void follow_mount(struct path *path)
{
	while (d_mountpoint(path->dentry)) {
		struct vfsmount *mounted = lookup_mnt(path);
		if (!mounted)
			break;
		dput(path->dentry);
		mntput(path->mnt);
		path->mnt = mounted;
		path->dentry = dget(mounted->mnt_root);
	}
}

1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446
static int path_parent_directory(struct path *path)
{
	struct dentry *old = path->dentry;
	/* rare case of legitimate dget_parent()... */
	path->dentry = dget_parent(path->dentry);
	dput(old);
	if (unlikely(!path_connected(path)))
		return -ENOENT;
	return 0;
}

1447
static int follow_dotdot(struct nameidata *nd)
L
Linus Torvalds 已提交
1448 1449
{
	while(1) {
A
Al Viro 已提交
1450 1451
		if (nd->path.dentry == nd->root.dentry &&
		    nd->path.mnt == nd->root.mnt) {
L
Linus Torvalds 已提交
1452 1453
			break;
		}
1454
		if (nd->path.dentry != nd->path.mnt->mnt_root) {
1455 1456 1457
			int ret = path_parent_directory(&nd->path);
			if (ret)
				return ret;
L
Linus Torvalds 已提交
1458 1459
			break;
		}
A
Al Viro 已提交
1460
		if (!follow_up(&nd->path))
L
Linus Torvalds 已提交
1461 1462
			break;
	}
A
Al Viro 已提交
1463
	follow_mount(&nd->path);
N
Nick Piggin 已提交
1464
	nd->inode = nd->path.dentry->d_inode;
1465
	return 0;
L
Linus Torvalds 已提交
1466 1467
}

1468
/*
1469 1470
 * 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.
1471
 */
1472 1473
static struct dentry *lookup_dcache(const struct qstr *name,
				    struct dentry *dir,
1474
				    unsigned int flags)
1475 1476
{
	struct dentry *dentry;
M
Miklos Szeredi 已提交
1477
	int error;
1478

M
Miklos Szeredi 已提交
1479 1480
	dentry = d_lookup(dir, name);
	if (dentry) {
J
Jeff Layton 已提交
1481
		if (dentry->d_flags & DCACHE_OP_REVALIDATE) {
1482
			error = d_revalidate(dentry, flags);
M
Miklos Szeredi 已提交
1483
			if (unlikely(error <= 0)) {
1484
				if (!error)
1485
					d_invalidate(dentry);
1486 1487
				dput(dentry);
				return ERR_PTR(error);
M
Miklos Szeredi 已提交
1488 1489 1490
			}
		}
	}
1491 1492 1493
	return dentry;
}

1494
/*
1495 1496
 * Call i_op->lookup on the dentry.  The dentry must be negative and
 * unhashed.
M
Miklos Szeredi 已提交
1497 1498
 *
 * dir->d_inode->i_mutex must be held
1499
 */
M
Miklos Szeredi 已提交
1500
static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
1501
				  unsigned int flags)
1502 1503 1504 1505
{
	struct dentry *old;

	/* Don't create child dentry for a dead directory. */
M
Miklos Szeredi 已提交
1506
	if (unlikely(IS_DEADDIR(dir))) {
1507
		dput(dentry);
1508
		return ERR_PTR(-ENOENT);
1509
	}
1510

1511
	old = dir->i_op->lookup(dir, dentry, flags);
1512 1513 1514 1515 1516 1517 1518
	if (unlikely(old)) {
		dput(dentry);
		dentry = old;
	}
	return dentry;
}

1519
static struct dentry *__lookup_hash(const struct qstr *name,
1520
		struct dentry *base, unsigned int flags)
1521
{
1522
	struct dentry *dentry = lookup_dcache(name, base, flags);
1523

1524
	if (dentry)
M
Miklos Szeredi 已提交
1525
		return dentry;
1526

1527 1528 1529 1530
	dentry = d_alloc(base, name);
	if (unlikely(!dentry))
		return ERR_PTR(-ENOMEM);

1531
	return lookup_real(base->d_inode, dentry, flags);
1532 1533
}

A
Al Viro 已提交
1534
static int lookup_fast(struct nameidata *nd,
1535 1536
		       struct path *path, struct inode **inode,
		       unsigned *seqp)
L
Linus Torvalds 已提交
1537
{
1538
	struct vfsmount *mnt = nd->path.mnt;
N
Nick Piggin 已提交
1539
	struct dentry *dentry, *parent = nd->path.dentry;
A
Al Viro 已提交
1540
	int status = 1;
1541 1542
	int err;

1543 1544
	/*
	 * Rename seqlock is not required here because in the off chance
A
Al Viro 已提交
1545 1546
	 * of a false negative due to a concurrent rename, the caller is
	 * going to fall back to non-racy lookup.
1547
	 */
N
Nick Piggin 已提交
1548 1549
	if (nd->flags & LOOKUP_RCU) {
		unsigned seq;
1550
		bool negative;
1551
		dentry = __d_lookup_rcu(parent, &nd->last, &seq);
A
Al Viro 已提交
1552 1553 1554
		if (unlikely(!dentry)) {
			if (unlazy_walk(nd, NULL, 0))
				return -ECHILD;
1555
			return 0;
A
Al Viro 已提交
1556
		}
A
Al Viro 已提交
1557

1558 1559 1560 1561
		/*
		 * This sequence count validates that the inode matches
		 * the dentry name information from lookup.
		 */
1562
		*inode = d_backing_inode(dentry);
1563
		negative = d_is_negative(dentry);
A
Al Viro 已提交
1564
		if (unlikely(read_seqcount_retry(&dentry->d_seq, seq)))
1565 1566 1567 1568 1569 1570 1571 1572 1573
			return -ECHILD;

		/*
		 * 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 已提交
1574
		if (unlikely(__read_seqcount_retry(&parent->d_seq, nd->seq)))
N
Nick Piggin 已提交
1575
			return -ECHILD;
A
Al Viro 已提交
1576

1577
		*seqp = seq;
A
Al Viro 已提交
1578
		if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
1579
			status = d_revalidate(dentry, nd->flags);
A
Al Viro 已提交
1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594
		if (unlikely(status <= 0)) {
			if (unlazy_walk(nd, dentry, seq))
				return -ECHILD;
			if (status == -ECHILD)
				status = d_revalidate(dentry, nd->flags);
		} else {
			/*
			 * Note: do negative dentry check after revalidation in
			 * case that drops it.
			 */
			if (unlikely(negative))
				return -ENOENT;
			path->mnt = mnt;
			path->dentry = dentry;
			if (likely(__follow_mount_rcu(nd, path, inode, seqp)))
1595
				return 1;
A
Al Viro 已提交
1596 1597
			if (unlazy_walk(nd, dentry, seq))
				return -ECHILD;
1598
		}
A
Al Viro 已提交
1599
	} else {
A
Al Viro 已提交
1600
		dentry = __d_lookup(parent, &nd->last);
A
Al Viro 已提交
1601
		if (unlikely(!dentry))
1602
			return 0;
A
Al Viro 已提交
1603 1604
		if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
			status = d_revalidate(dentry, nd->flags);
1605
	}
A
Al Viro 已提交
1606
	if (unlikely(status <= 0)) {
1607
		if (!status)
A
Al Viro 已提交
1608
			d_invalidate(dentry);
1609
		dput(dentry);
A
Al Viro 已提交
1610
		return status;
1611
	}
1612 1613 1614 1615
	if (unlikely(d_is_negative(dentry))) {
		dput(dentry);
		return -ENOENT;
	}
A
Al Viro 已提交
1616

1617 1618
	path->mnt = mnt;
	path->dentry = dentry;
1619
	err = follow_managed(path, nd);
1620
	if (likely(err > 0))
1621
		*inode = d_backing_inode(path->dentry);
1622
	return err;
M
Miklos Szeredi 已提交
1623 1624 1625
}

/* Fast lookup failed, do it the slow way */
1626 1627 1628
static struct dentry *lookup_slow(const struct qstr *name,
				  struct dentry *dir,
				  unsigned int flags)
M
Miklos Szeredi 已提交
1629
{
A
Al Viro 已提交
1630
	struct dentry *dentry = ERR_PTR(-ENOENT), *old;
1631
	struct inode *inode = dir->d_inode;
1632
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1633

1634
	inode_lock_shared(inode);
1635
	/* Don't go there if it's already dead */
A
Al Viro 已提交
1636 1637 1638
	if (unlikely(IS_DEADDIR(inode)))
		goto out;
again:
1639
	dentry = d_alloc_parallel(dir, name, &wq);
A
Al Viro 已提交
1640 1641 1642
	if (IS_ERR(dentry))
		goto out;
	if (unlikely(!d_in_lookup(dentry))) {
1643 1644 1645 1646
		if ((dentry->d_flags & DCACHE_OP_REVALIDATE) &&
		    !(flags & LOOKUP_NO_REVAL)) {
			int error = d_revalidate(dentry, flags);
			if (unlikely(error <= 0)) {
A
Al Viro 已提交
1647
				if (!error) {
1648
					d_invalidate(dentry);
A
Al Viro 已提交
1649 1650 1651
					dput(dentry);
					goto again;
				}
1652 1653 1654 1655
				dput(dentry);
				dentry = ERR_PTR(error);
			}
		}
A
Al Viro 已提交
1656 1657 1658 1659 1660 1661
	} else {
		old = inode->i_op->lookup(inode, dentry, flags);
		d_lookup_done(dentry);
		if (unlikely(old)) {
			dput(dentry);
			dentry = old;
1662 1663
		}
	}
A
Al Viro 已提交
1664
out:
1665
	inode_unlock_shared(inode);
1666
	return dentry;
L
Linus Torvalds 已提交
1667 1668
}

1669 1670 1671
static inline int may_lookup(struct nameidata *nd)
{
	if (nd->flags & LOOKUP_RCU) {
1672
		int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1673 1674
		if (err != -ECHILD)
			return err;
1675
		if (unlazy_walk(nd, NULL, 0))
1676 1677
			return -ECHILD;
	}
1678
	return inode_permission(nd->inode, MAY_EXEC);
1679 1680
}

1681 1682 1683
static inline int handle_dots(struct nameidata *nd, int type)
{
	if (type == LAST_DOTDOT) {
1684 1685
		if (!nd->root.mnt)
			set_root(nd);
1686
		if (nd->flags & LOOKUP_RCU) {
1687
			return follow_dotdot_rcu(nd);
1688
		} else
1689
			return follow_dotdot(nd);
1690 1691 1692 1693
	}
	return 0;
}

1694 1695
static int pick_link(struct nameidata *nd, struct path *link,
		     struct inode *inode, unsigned seq)
1696
{
1697
	int error;
A
Al Viro 已提交
1698
	struct saved *last;
1699
	if (unlikely(nd->total_link_count++ >= MAXSYMLINKS)) {
1700 1701 1702
		path_to_nameidata(link, nd);
		return -ELOOP;
	}
A
Al Viro 已提交
1703
	if (!(nd->flags & LOOKUP_RCU)) {
1704 1705
		if (link->mnt == nd->path.mnt)
			mntget(link->mnt);
1706
	}
1707 1708
	error = nd_alloc_stack(nd);
	if (unlikely(error)) {
A
Al Viro 已提交
1709 1710 1711 1712 1713 1714 1715 1716 1717
		if (error == -ECHILD) {
			if (unlikely(unlazy_link(nd, link, seq)))
				return -ECHILD;
			error = nd_alloc_stack(nd);
		}
		if (error) {
			path_put(link);
			return error;
		}
1718 1719
	}

1720
	last = nd->stack + nd->depth++;
A
Al Viro 已提交
1721
	last->link = *link;
1722 1723
	clear_delayed_call(&last->done);
	nd->link_inode = inode;
1724
	last->seq = seq;
1725 1726 1727
	return 1;
}

1728 1729 1730 1731 1732 1733
/*
 * 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.
 */
1734
static inline int should_follow_link(struct nameidata *nd, struct path *link,
1735 1736
				     int follow,
				     struct inode *inode, unsigned seq)
1737
{
1738 1739 1740 1741
	if (likely(!d_is_symlink(link->dentry)))
		return 0;
	if (!follow)
		return 0;
1742 1743 1744 1745 1746
	/* make sure that d_is_symlink above matches inode */
	if (nd->flags & LOOKUP_RCU) {
		if (read_seqcount_retry(&link->dentry->d_seq, seq))
			return -ECHILD;
	}
1747
	return pick_link(nd, link, inode, seq);
1748 1749
}

1750 1751 1752
enum {WALK_GET = 1, WALK_PUT = 2};

static int walk_component(struct nameidata *nd, int flags)
1753
{
A
Al Viro 已提交
1754
	struct path path;
1755
	struct inode *inode;
1756
	unsigned seq;
1757 1758 1759 1760 1761 1762
	int err;
	/*
	 * "." and ".." are special - ".." especially so because it has
	 * to be able to know about the current root directory and
	 * parent relationships.
	 */
1763 1764 1765 1766 1767 1768
	if (unlikely(nd->last_type != LAST_NORM)) {
		err = handle_dots(nd, nd->last_type);
		if (flags & WALK_PUT)
			put_link(nd);
		return err;
	}
1769
	err = lookup_fast(nd, &path, &inode, &seq);
1770
	if (unlikely(err <= 0)) {
M
Miklos Szeredi 已提交
1771
		if (err < 0)
1772
			return err;
1773 1774 1775 1776
		path.dentry = lookup_slow(&nd->last, nd->path.dentry,
					  nd->flags);
		if (IS_ERR(path.dentry))
			return PTR_ERR(path.dentry);
1777

1778 1779 1780
		path.mnt = nd->path.mnt;
		err = follow_managed(&path, nd);
		if (unlikely(err < 0))
1781
			return err;
M
Miklos Szeredi 已提交
1782

1783 1784 1785 1786 1787
		if (unlikely(d_is_negative(path.dentry))) {
			path_to_nameidata(&path, nd);
			return -ENOENT;
		}

1788
		seq = 0;	/* we are already out of RCU mode */
1789
		inode = d_backing_inode(path.dentry);
1790
	}
M
Miklos Szeredi 已提交
1791

1792 1793
	if (flags & WALK_PUT)
		put_link(nd);
1794
	err = should_follow_link(nd, &path, flags & WALK_GET, inode, seq);
1795 1796
	if (unlikely(err))
		return err;
A
Al Viro 已提交
1797
	path_to_nameidata(&path, nd);
1798
	nd->inode = inode;
1799
	nd->seq = seq;
1800 1801 1802
	return 0;
}

1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821
/*
 * 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

1822
#include <asm/word-at-a-time.h>
1823

1824
#ifdef HASH_MIX
1825

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

1828
#elif defined(CONFIG_64BIT)
1829
/*
1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856
 * 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)
1857
 */
1858 1859 1860 1861 1862
#define HASH_MIX(x, y, a)	\
	(	x ^= (a),	\
	y ^= x,	x = rol64(x,12),\
	x += y,	y = rol64(y,45),\
	y *= 9			)
1863

1864
/*
1865 1866 1867
 * 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.
1868
 */
1869
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1870
{
1871 1872 1873
	y ^= x * GOLDEN_RATIO_64;
	y *= GOLDEN_RATIO_64;
	return y >> 32;
1874 1875
}

1876 1877
#else	/* 32-bit case */

1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892
/*
 * 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			)
1893

1894
static inline unsigned int fold_hash(unsigned long x, unsigned long y)
1895
{
1896 1897
	/* Use arch-optimized multiply if one exists */
	return __hash_32(y ^ __hash_32(x));
1898 1899
}

1900 1901
#endif

1902 1903 1904 1905 1906 1907 1908
/*
 * 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.
 */
1909
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
1910
{
1911
	unsigned long a, x = 0, y = (unsigned long)salt;
1912 1913

	for (;;) {
1914 1915
		if (!len)
			goto done;
1916
		a = load_unaligned_zeropad(name);
1917 1918
		if (len < sizeof(unsigned long))
			break;
1919
		HASH_MIX(x, y, a);
1920 1921 1922
		name += sizeof(unsigned long);
		len -= sizeof(unsigned long);
	}
1923
	x ^= a & bytemask_from_count(len);
1924
done:
1925
	return fold_hash(x, y);
1926 1927 1928
}
EXPORT_SYMBOL(full_name_hash);

1929
/* Return the "hash_len" (hash and length) of a null-terminated string */
1930
u64 hashlen_string(const void *salt, const char *name)
1931
{
1932 1933
	unsigned long a = 0, x = 0, y = (unsigned long)salt;
	unsigned long adata, mask, len;
1934 1935
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;

1936 1937 1938
	len = 0;
	goto inside;

1939
	do {
1940
		HASH_MIX(x, y, a);
1941
		len += sizeof(unsigned long);
1942
inside:
1943 1944 1945 1946 1947
		a = load_unaligned_zeropad(name+len);
	} while (!has_zero(a, &adata, &constants));

	adata = prep_zero_mask(a, adata, &constants);
	mask = create_zero_mask(adata);
1948
	x ^= a & zero_bytemask(mask);
1949

1950
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
1951 1952 1953
}
EXPORT_SYMBOL(hashlen_string);

1954 1955
/*
 * Calculate the length and hash of the path component, and
1956
 * return the "hash_len" as the result.
1957
 */
1958
static inline u64 hash_name(const void *salt, const char *name)
1959
{
1960 1961
	unsigned long a = 0, b, x = 0, y = (unsigned long)salt;
	unsigned long adata, bdata, mask, len;
1962
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
1963

1964 1965 1966
	len = 0;
	goto inside;

1967
	do {
1968
		HASH_MIX(x, y, a);
1969
		len += sizeof(unsigned long);
1970
inside:
1971
		a = load_unaligned_zeropad(name+len);
1972 1973 1974 1975 1976 1977
		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);
1978
	x ^= a & zero_bytemask(mask);
1979

1980
	return hashlen_create(fold_hash(x, y), len + find_zero(mask));
1981 1982
}

1983
#else	/* !CONFIG_DCACHE_WORD_ACCESS: Slow, byte-at-a-time version */
1984

1985
/* Return the hash of a string of known length */
1986
unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
L
Linus Torvalds 已提交
1987
{
1988
	unsigned long hash = init_name_hash(salt);
L
Linus Torvalds 已提交
1989
	while (len--)
1990
		hash = partial_name_hash((unsigned char)*name++, hash);
L
Linus Torvalds 已提交
1991 1992
	return end_name_hash(hash);
}
1993
EXPORT_SYMBOL(full_name_hash);
L
Linus Torvalds 已提交
1994

1995
/* Return the "hash_len" (hash and length) of a null-terminated string */
1996
u64 hashlen_string(const void *salt, const char *name)
1997
{
1998
	unsigned long hash = init_name_hash(salt);
1999 2000 2001
	unsigned long len = 0, c;

	c = (unsigned char)*name;
2002
	while (c) {
2003 2004 2005
		len++;
		hash = partial_name_hash(c, hash);
		c = (unsigned char)name[len];
2006
	}
2007 2008
	return hashlen_create(end_name_hash(hash), len);
}
2009
EXPORT_SYMBOL(hashlen_string);
2010

2011 2012 2013 2014
/*
 * We know there's a real path component here of at least
 * one character.
 */
2015
static inline u64 hash_name(const void *salt, const char *name)
2016
{
2017
	unsigned long hash = init_name_hash(salt);
2018 2019 2020 2021 2022 2023 2024 2025
	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 != '/');
2026
	return hashlen_create(end_name_hash(hash), len);
2027 2028
}

2029 2030
#endif

L
Linus Torvalds 已提交
2031 2032
/*
 * Name resolution.
2033 2034
 * 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 已提交
2035
 *
2036 2037
 * 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 已提交
2038
 */
2039
static int link_path_walk(const char *name, struct nameidata *nd)
L
Linus Torvalds 已提交
2040 2041
{
	int err;
A
Al Viro 已提交
2042

L
Linus Torvalds 已提交
2043 2044 2045
	while (*name=='/')
		name++;
	if (!*name)
2046
		return 0;
L
Linus Torvalds 已提交
2047 2048 2049

	/* At this point we know we have a real path component. */
	for(;;) {
2050
		u64 hash_len;
A
Al Viro 已提交
2051
		int type;
L
Linus Torvalds 已提交
2052

2053
		err = may_lookup(nd);
2054
		if (err)
2055
			return err;
L
Linus Torvalds 已提交
2056

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

A
Al Viro 已提交
2059
		type = LAST_NORM;
2060
		if (name[0] == '.') switch (hashlen_len(hash_len)) {
A
Al Viro 已提交
2061
			case 2:
2062
				if (name[1] == '.') {
A
Al Viro 已提交
2063
					type = LAST_DOTDOT;
A
Al Viro 已提交
2064 2065
					nd->flags |= LOOKUP_JUMPED;
				}
A
Al Viro 已提交
2066 2067 2068 2069
				break;
			case 1:
				type = LAST_DOT;
		}
2070 2071
		if (likely(type == LAST_NORM)) {
			struct dentry *parent = nd->path.dentry;
A
Al Viro 已提交
2072
			nd->flags &= ~LOOKUP_JUMPED;
2073
			if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
2074
				struct qstr this = { { .hash_len = hash_len }, .name = name };
2075
				err = parent->d_op->d_hash(parent, &this);
2076
				if (err < 0)
2077
					return err;
2078 2079
				hash_len = this.hash_len;
				name = this.name;
2080 2081
			}
		}
A
Al Viro 已提交
2082

2083 2084
		nd->last.hash_len = hash_len;
		nd->last.name = name;
2085 2086
		nd->last_type = type;

2087 2088
		name += hashlen_len(hash_len);
		if (!*name)
2089
			goto OK;
2090 2091 2092 2093 2094
		/*
		 * If it wasn't NUL, we know it was '/'. Skip that
		 * slash, and continue until no more slashes.
		 */
		do {
2095 2096
			name++;
		} while (unlikely(*name == '/'));
2097 2098
		if (unlikely(!*name)) {
OK:
2099
			/* pathname body, done */
2100 2101 2102
			if (!nd->depth)
				return 0;
			name = nd->stack[nd->depth - 1].name;
2103
			/* trailing symlink, done */
2104 2105 2106
			if (!name)
				return 0;
			/* last component of nested symlink */
2107
			err = walk_component(nd, WALK_GET | WALK_PUT);
2108
		} else {
2109
			err = walk_component(nd, WALK_GET);
2110
		}
2111
		if (err < 0)
2112
			return err;
L
Linus Torvalds 已提交
2113

2114
		if (err) {
2115
			const char *s = get_link(nd);
2116

2117
			if (IS_ERR(s))
2118
				return PTR_ERR(s);
2119 2120 2121
			err = 0;
			if (unlikely(!s)) {
				/* jumped */
2122
				put_link(nd);
2123
			} else {
2124 2125 2126
				nd->stack[nd->depth - 1].name = name;
				name = s;
				continue;
2127
			}
N
Nick Piggin 已提交
2128
		}
2129 2130 2131 2132 2133
		if (unlikely(!d_can_lookup(nd->path.dentry))) {
			if (nd->flags & LOOKUP_RCU) {
				if (unlazy_walk(nd, NULL, 0))
					return -ECHILD;
			}
2134
			return -ENOTDIR;
2135
		}
L
Linus Torvalds 已提交
2136 2137 2138
	}
}

2139
static const char *path_init(struct nameidata *nd, unsigned flags)
N
Nick Piggin 已提交
2140 2141
{
	int retval = 0;
2142
	const char *s = nd->name->name;
N
Nick Piggin 已提交
2143 2144

	nd->last_type = LAST_ROOT; /* if there are only slashes... */
2145
	nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
N
Nick Piggin 已提交
2146
	nd->depth = 0;
2147
	if (flags & LOOKUP_ROOT) {
2148 2149
		struct dentry *root = nd->root.dentry;
		struct inode *inode = root->d_inode;
A
Al Viro 已提交
2150
		if (*s) {
M
Miklos Szeredi 已提交
2151
			if (!d_can_lookup(root))
2152
				return ERR_PTR(-ENOTDIR);
A
Al Viro 已提交
2153 2154
			retval = inode_permission(inode, MAY_EXEC);
			if (retval)
2155
				return ERR_PTR(retval);
A
Al Viro 已提交
2156
		}
2157 2158 2159
		nd->path = nd->root;
		nd->inode = inode;
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
2160
			rcu_read_lock();
2161
			nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
2162
			nd->root_seq = nd->seq;
A
Al Viro 已提交
2163
			nd->m_seq = read_seqbegin(&mount_lock);
2164 2165 2166
		} else {
			path_get(&nd->path);
		}
2167
		return s;
2168 2169
	}

N
Nick Piggin 已提交
2170
	nd->root.mnt = NULL;
2171 2172
	nd->path.mnt = NULL;
	nd->path.dentry = NULL;
N
Nick Piggin 已提交
2173

A
Al Viro 已提交
2174
	nd->m_seq = read_seqbegin(&mount_lock);
A
Al Viro 已提交
2175
	if (*s == '/') {
2176
		if (flags & LOOKUP_RCU)
A
Al Viro 已提交
2177
			rcu_read_lock();
2178
		set_root(nd);
2179
		if (likely(!nd_jump_root(nd)))
2180
			return s;
2181
		nd->root.mnt = NULL;
2182 2183
		rcu_read_unlock();
		return ERR_PTR(-ECHILD);
2184
	} else if (nd->dfd == AT_FDCWD) {
A
Al Viro 已提交
2185 2186 2187
		if (flags & LOOKUP_RCU) {
			struct fs_struct *fs = current->fs;
			unsigned seq;
N
Nick Piggin 已提交
2188

A
Al Viro 已提交
2189
			rcu_read_lock();
N
Nick Piggin 已提交
2190

A
Al Viro 已提交
2191 2192 2193
			do {
				seq = read_seqcount_begin(&fs->seq);
				nd->path = fs->pwd;
2194
				nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2195 2196 2197 2198
				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);
2199
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2200
		}
2201
		return s;
N
Nick Piggin 已提交
2202
	} else {
2203
		/* Caller must check execute permissions on the starting path component */
2204
		struct fd f = fdget_raw(nd->dfd);
N
Nick Piggin 已提交
2205 2206
		struct dentry *dentry;

2207
		if (!f.file)
2208
			return ERR_PTR(-EBADF);
N
Nick Piggin 已提交
2209

2210
		dentry = f.file->f_path.dentry;
N
Nick Piggin 已提交
2211

A
Al Viro 已提交
2212
		if (*s) {
M
Miklos Szeredi 已提交
2213
			if (!d_can_lookup(dentry)) {
2214
				fdput(f);
2215
				return ERR_PTR(-ENOTDIR);
2216
			}
A
Al Viro 已提交
2217
		}
N
Nick Piggin 已提交
2218

2219
		nd->path = f.file->f_path;
A
Al Viro 已提交
2220
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
2221
			rcu_read_lock();
A
Al Viro 已提交
2222 2223
			nd->inode = nd->path.dentry->d_inode;
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
A
Al Viro 已提交
2224
		} else {
2225
			path_get(&nd->path);
A
Al Viro 已提交
2226
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2227
		}
A
Al Viro 已提交
2228
		fdput(f);
2229
		return s;
N
Nick Piggin 已提交
2230
	}
2231 2232
}

2233
static const char *trailing_symlink(struct nameidata *nd)
2234 2235
{
	const char *s;
A
Al Viro 已提交
2236
	int error = may_follow_link(nd);
2237
	if (unlikely(error))
2238
		return ERR_PTR(error);
2239
	nd->flags |= LOOKUP_PARENT;
2240
	nd->stack[0].name = NULL;
2241
	s = get_link(nd);
2242
	return s ? s : "";
2243 2244
}

A
Al Viro 已提交
2245
static inline int lookup_last(struct nameidata *nd)
2246 2247 2248 2249 2250
{
	if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
		nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;

	nd->flags &= ~LOOKUP_PARENT;
2251
	return walk_component(nd,
2252 2253 2254 2255 2256
			nd->flags & LOOKUP_FOLLOW
				? nd->depth
					? WALK_PUT | WALK_GET
					: WALK_GET
				: 0);
2257 2258
}

2259
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2260
static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path)
2261
{
2262
	const char *s = path_init(nd, flags);
2263
	int err;
N
Nick Piggin 已提交
2264

2265 2266
	if (IS_ERR(s))
		return PTR_ERR(s);
2267 2268 2269 2270 2271 2272
	while (!(err = link_path_walk(s, nd))
		&& ((err = lookup_last(nd)) > 0)) {
		s = trailing_symlink(nd);
		if (IS_ERR(s)) {
			err = PTR_ERR(s);
			break;
2273 2274
		}
	}
2275 2276
	if (!err)
		err = complete_walk(nd);
2277

2278 2279
	if (!err && nd->flags & LOOKUP_DIRECTORY)
		if (!d_can_lookup(nd->path.dentry))
A
Al Viro 已提交
2280
			err = -ENOTDIR;
2281 2282 2283 2284 2285 2286
	if (!err) {
		*path = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2287
	return err;
A
Al Viro 已提交
2288
}
N
Nick Piggin 已提交
2289

2290
static int filename_lookup(int dfd, struct filename *name, unsigned flags,
2291
			   struct path *path, struct path *root)
A
Al Viro 已提交
2292
{
2293
	int retval;
2294
	struct nameidata nd;
2295 2296
	if (IS_ERR(name))
		return PTR_ERR(name);
2297 2298 2299 2300
	if (unlikely(root)) {
		nd.root = *root;
		flags |= LOOKUP_ROOT;
	}
2301
	set_nameidata(&nd, dfd, name);
2302
	retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2303
	if (unlikely(retval == -ECHILD))
2304
		retval = path_lookupat(&nd, flags, path);
A
Al Viro 已提交
2305
	if (unlikely(retval == -ESTALE))
2306
		retval = path_lookupat(&nd, flags | LOOKUP_REVAL, path);
N
Nick Piggin 已提交
2307

2308
	if (likely(!retval))
2309
		audit_inode(name, path->dentry, flags & LOOKUP_PARENT);
2310
	restore_nameidata();
2311
	putname(name);
2312
	return retval;
L
Linus Torvalds 已提交
2313 2314
}

2315
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2316
static int path_parentat(struct nameidata *nd, unsigned flags,
2317
				struct path *parent)
2318
{
2319
	const char *s = path_init(nd, flags);
2320 2321 2322 2323
	int err;
	if (IS_ERR(s))
		return PTR_ERR(s);
	err = link_path_walk(s, nd);
2324 2325
	if (!err)
		err = complete_walk(nd);
2326 2327 2328 2329 2330 2331
	if (!err) {
		*parent = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2332 2333 2334
	return err;
}

2335
static struct filename *filename_parentat(int dfd, struct filename *name,
2336 2337
				unsigned int flags, struct path *parent,
				struct qstr *last, int *type)
2338 2339
{
	int retval;
2340
	struct nameidata nd;
2341

2342 2343
	if (IS_ERR(name))
		return name;
2344
	set_nameidata(&nd, dfd, name);
2345
	retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
2346
	if (unlikely(retval == -ECHILD))
2347
		retval = path_parentat(&nd, flags, parent);
2348
	if (unlikely(retval == -ESTALE))
2349
		retval = path_parentat(&nd, flags | LOOKUP_REVAL, parent);
2350 2351 2352 2353
	if (likely(!retval)) {
		*last = nd.last;
		*type = nd.last_type;
		audit_inode(name, parent->dentry, LOOKUP_PARENT);
2354 2355 2356
	} else {
		putname(name);
		name = ERR_PTR(retval);
2357
	}
2358
	restore_nameidata();
2359
	return name;
2360 2361
}

A
Al Viro 已提交
2362 2363
/* does lookup, returns the object with parent locked */
struct dentry *kern_path_locked(const char *name, struct path *path)
2364
{
2365 2366
	struct filename *filename;
	struct dentry *d;
2367 2368
	struct qstr last;
	int type;
2369

2370 2371
	filename = filename_parentat(AT_FDCWD, getname_kernel(name), 0, path,
				    &last, &type);
2372 2373
	if (IS_ERR(filename))
		return ERR_CAST(filename);
2374
	if (unlikely(type != LAST_NORM)) {
2375
		path_put(path);
2376 2377
		putname(filename);
		return ERR_PTR(-EINVAL);
A
Al Viro 已提交
2378
	}
A
Al Viro 已提交
2379
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
2380
	d = __lookup_hash(&last, path->dentry, 0);
A
Al Viro 已提交
2381
	if (IS_ERR(d)) {
A
Al Viro 已提交
2382
		inode_unlock(path->dentry->d_inode);
2383
		path_put(path);
A
Al Viro 已提交
2384
	}
2385
	putname(filename);
A
Al Viro 已提交
2386
	return d;
2387 2388
}

A
Al Viro 已提交
2389 2390
int kern_path(const char *name, unsigned int flags, struct path *path)
{
2391 2392
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags, path, NULL);
A
Al Viro 已提交
2393
}
2394
EXPORT_SYMBOL(kern_path);
A
Al Viro 已提交
2395

2396 2397 2398 2399 2400 2401
/**
 * 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
2402
 * @path: pointer to struct path to fill
2403 2404 2405
 */
int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
		    const char *name, unsigned int flags,
2406
		    struct path *path)
2407
{
2408 2409
	struct path root = {.mnt = mnt, .dentry = dentry};
	/* the first argument of filename_lookup() is ignored with root */
2410 2411
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags , path, &root);
2412
}
2413
EXPORT_SYMBOL(vfs_path_lookup);
2414

2415
/**
2416
 * lookup_one_len - filesystem helper to lookup single pathname component
2417 2418 2419 2420
 * @name:	pathname component to lookup
 * @base:	base directory to lookup from
 * @len:	maximum length @len should be interpreted to
 *
2421
 * Note that this routine is purely a helper for filesystem usage and should
2422
 * not be called by generic code.
2423 2424
 *
 * The caller must hold base->i_mutex.
2425
 */
2426 2427 2428
struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
{
	struct qstr this;
A
Al Viro 已提交
2429
	unsigned int c;
2430
	int err;
2431

A
Al Viro 已提交
2432
	WARN_ON_ONCE(!inode_is_locked(base->d_inode));
2433

A
Al Viro 已提交
2434 2435
	this.name = name;
	this.len = len;
2436
	this.hash = full_name_hash(base, name, len);
A
Al Viro 已提交
2437 2438 2439
	if (!len)
		return ERR_PTR(-EACCES);

A
Al Viro 已提交
2440 2441 2442 2443 2444
	if (unlikely(name[0] == '.')) {
		if (len < 2 || (len == 2 && name[1] == '.'))
			return ERR_PTR(-EACCES);
	}

A
Al Viro 已提交
2445 2446 2447 2448 2449
	while (len--) {
		c = *(const unsigned char *)name++;
		if (c == '/' || c == '\0')
			return ERR_PTR(-EACCES);
	}
2450 2451 2452 2453 2454
	/*
	 * See if the low-level filesystem might want
	 * to use its own hash..
	 */
	if (base->d_flags & DCACHE_OP_HASH) {
2455
		int err = base->d_op->d_hash(base, &this);
2456 2457 2458
		if (err < 0)
			return ERR_PTR(err);
	}
2459

2460 2461 2462 2463
	err = inode_permission(base->d_inode, MAY_EXEC);
	if (err)
		return ERR_PTR(err);

2464
	return __lookup_hash(&this, base, 0);
2465
}
2466
EXPORT_SYMBOL(lookup_one_len);
2467

2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485
/**
 * 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;
	unsigned int c;
	int err;
2486
	struct dentry *ret;
2487 2488 2489

	this.name = name;
	this.len = len;
2490
	this.hash = full_name_hash(base, name, len);
2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517
	if (!len)
		return ERR_PTR(-EACCES);

	if (unlikely(name[0] == '.')) {
		if (len < 2 || (len == 2 && name[1] == '.'))
			return ERR_PTR(-EACCES);
	}

	while (len--) {
		c = *(const unsigned char *)name++;
		if (c == '/' || c == '\0')
			return ERR_PTR(-EACCES);
	}
	/*
	 * See if the low-level filesystem might want
	 * to use its own hash..
	 */
	if (base->d_flags & DCACHE_OP_HASH) {
		int err = base->d_op->d_hash(base, &this);
		if (err < 0)
			return ERR_PTR(err);
	}

	err = inode_permission(base->d_inode, MAY_EXEC);
	if (err)
		return ERR_PTR(err);

2518 2519 2520 2521
	ret = lookup_dcache(&this, base, 0);
	if (!ret)
		ret = lookup_slow(&this, base, 0);
	return ret;
2522 2523 2524
}
EXPORT_SYMBOL(lookup_one_len_unlocked);

2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552
#ifdef CONFIG_UNIX98_PTYS
int path_pts(struct path *path)
{
	/* Find something mounted on "pts" in the same directory as
	 * the input path.
	 */
	struct dentry *child, *parent;
	struct qstr this;
	int ret;

	ret = path_parent_directory(path);
	if (ret)
		return ret;

	parent = path->dentry;
	this.name = "pts";
	this.len = 3;
	child = d_hash_and_lookup(parent, &this);
	if (!child)
		return -ENOENT;

	path->dentry = child;
	dput(parent);
	follow_mount(path);
	return 0;
}
#endif

2553 2554
int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
		 struct path *path, int *empty)
L
Linus Torvalds 已提交
2555
{
2556 2557
	return filename_lookup(dfd, getname_flags(name, flags, empty),
			       flags, path, NULL);
L
Linus Torvalds 已提交
2558
}
2559
EXPORT_SYMBOL(user_path_at_empty);
2560

2561 2562 2563 2564 2565 2566
/*
 * NB: most callers don't do anything directly with the reference to the
 *     to struct filename, but the nd->last pointer points into the name string
 *     allocated by getname. So we must hold the reference to it until all
 *     path-walking is complete.
 */
A
Al Viro 已提交
2567
static inline struct filename *
2568 2569 2570 2571
user_path_parent(int dfd, const char __user *path,
		 struct path *parent,
		 struct qstr *last,
		 int *type,
2572
		 unsigned int flags)
2573
{
2574
	/* only LOOKUP_REVAL is allowed in extra flags */
2575 2576
	return filename_parentat(dfd, getname(path), flags & LOOKUP_REVAL,
				 parent, last, type);
2577 2578
}

2579
/**
2580
 * mountpoint_last - look up last component for umount
2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606
 * @nd:   pathwalk nameidata - currently pointing at parent directory of "last"
 * @path: pointer to container for result
 *
 * This is a special lookup_last function just for umount. In this case, we
 * need to resolve the path without doing any revalidation.
 *
 * The nameidata should be the result of doing a LOOKUP_PARENT pathwalk. Since
 * mountpoints are always pinned in the dcache, their ancestors are too. Thus,
 * in almost all cases, this lookup will be served out of the dcache. The only
 * cases where it won't are if nd->last refers to a symlink or the path is
 * bogus and it doesn't exist.
 *
 * Returns:
 * -error: if there was an error during lookup. This includes -ENOENT if the
 *         lookup found a negative dentry. The nd->path reference will also be
 *         put in this case.
 *
 * 0:      if we successfully resolved nd->path and found it to not to be a
 *         symlink that needs to be followed. "path" will also be populated.
 *         The nd->path reference will also be put.
 *
 * 1:      if we successfully resolved nd->last and found it to be a symlink
 *         that needs to be followed. "path" will be populated with the path
 *         to the link, and nd->path will *not* be put.
 */
static int
2607
mountpoint_last(struct nameidata *nd, struct path *path)
2608 2609 2610 2611 2612
{
	int error = 0;
	struct dentry *dentry;
	struct dentry *dir = nd->path.dentry;

2613 2614
	/* If we're in rcuwalk, drop out of it to handle last component */
	if (nd->flags & LOOKUP_RCU) {
2615
		if (unlazy_walk(nd, NULL, 0))
2616
			return -ECHILD;
2617 2618 2619 2620 2621 2622
	}

	nd->flags &= ~LOOKUP_PARENT;

	if (unlikely(nd->last_type != LAST_NORM)) {
		error = handle_dots(nd, nd->last_type);
2623
		if (error)
2624
			return error;
2625
		dentry = dget(nd->path.dentry);
2626 2627
	} else {
		dentry = d_lookup(dir, &nd->last);
2628
		if (!dentry) {
2629 2630 2631 2632 2633 2634 2635 2636 2637 2638
			/*
			 * No cached dentry. Mounted dentries are pinned in the
			 * cache, so that means that this dentry is probably
			 * a symlink or the path doesn't actually point
			 * to a mounted dentry.
			 */
			dentry = lookup_slow(&nd->last, dir,
					     nd->flags | LOOKUP_NO_REVAL);
			if (IS_ERR(dentry))
				return PTR_ERR(dentry);
2639
		}
2640
	}
2641
	if (d_is_negative(dentry)) {
2642
		dput(dentry);
2643
		return -ENOENT;
2644
	}
2645 2646
	if (nd->depth)
		put_link(nd);
2647
	path->dentry = dentry;
2648
	path->mnt = nd->path.mnt;
2649 2650
	error = should_follow_link(nd, path, nd->flags & LOOKUP_FOLLOW,
				   d_backing_inode(dentry), 0);
2651
	if (unlikely(error))
2652
		return error;
2653
	mntget(path->mnt);
2654
	follow_mount(path);
2655
	return 0;
2656 2657 2658
}

/**
2659
 * path_mountpoint - look up a path to be umounted
2660
 * @nd:		lookup context
2661
 * @flags:	lookup flags
2662
 * @path:	pointer to container for result
2663 2664
 *
 * Look up the given name, but don't attempt to revalidate the last component.
2665
 * Returns 0 and "path" will be valid on success; Returns error otherwise.
2666 2667
 */
static int
2668
path_mountpoint(struct nameidata *nd, unsigned flags, struct path *path)
2669
{
2670
	const char *s = path_init(nd, flags);
2671 2672 2673
	int err;
	if (IS_ERR(s))
		return PTR_ERR(s);
2674 2675 2676 2677 2678
	while (!(err = link_path_walk(s, nd)) &&
		(err = mountpoint_last(nd, path)) > 0) {
		s = trailing_symlink(nd);
		if (IS_ERR(s)) {
			err = PTR_ERR(s);
2679
			break;
2680
		}
2681
	}
2682
	terminate_walk(nd);
2683 2684 2685
	return err;
}

A
Al Viro 已提交
2686
static int
2687
filename_mountpoint(int dfd, struct filename *name, struct path *path,
A
Al Viro 已提交
2688 2689
			unsigned int flags)
{
2690
	struct nameidata nd;
2691
	int error;
2692 2693
	if (IS_ERR(name))
		return PTR_ERR(name);
2694
	set_nameidata(&nd, dfd, name);
2695
	error = path_mountpoint(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2696
	if (unlikely(error == -ECHILD))
2697
		error = path_mountpoint(&nd, flags, path);
A
Al Viro 已提交
2698
	if (unlikely(error == -ESTALE))
2699
		error = path_mountpoint(&nd, flags | LOOKUP_REVAL, path);
A
Al Viro 已提交
2700
	if (likely(!error))
2701
		audit_inode(name, path->dentry, 0);
2702
	restore_nameidata();
2703
	putname(name);
A
Al Viro 已提交
2704 2705 2706
	return error;
}

2707
/**
2708
 * user_path_mountpoint_at - lookup a path from userland in order to umount it
2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721
 * @dfd:	directory file descriptor
 * @name:	pathname from userland
 * @flags:	lookup flags
 * @path:	pointer to container to hold result
 *
 * A umount is a special case for path walking. We're not actually interested
 * in the inode in this situation, and ESTALE errors can be a problem. We
 * simply want track down the dentry and vfsmount attached at the mountpoint
 * and avoid revalidating the last component.
 *
 * Returns 0 and populates "path" on success.
 */
int
2722
user_path_mountpoint_at(int dfd, const char __user *name, unsigned int flags,
2723 2724
			struct path *path)
{
2725
	return filename_mountpoint(dfd, getname(name), path, flags);
2726 2727
}

A
Al Viro 已提交
2728 2729 2730 2731
int
kern_path_mountpoint(int dfd, const char *name, struct path *path,
			unsigned int flags)
{
2732
	return filename_mountpoint(dfd, getname_kernel(name), path, flags);
A
Al Viro 已提交
2733 2734 2735
}
EXPORT_SYMBOL(kern_path_mountpoint);

M
Miklos Szeredi 已提交
2736
int __check_sticky(struct inode *dir, struct inode *inode)
L
Linus Torvalds 已提交
2737
{
2738
	kuid_t fsuid = current_fsuid();
2739

2740
	if (uid_eq(inode->i_uid, fsuid))
L
Linus Torvalds 已提交
2741
		return 0;
2742
	if (uid_eq(dir->i_uid, fsuid))
L
Linus Torvalds 已提交
2743
		return 0;
2744
	return !capable_wrt_inode_uidgid(inode, CAP_FOWNER);
L
Linus Torvalds 已提交
2745
}
M
Miklos Szeredi 已提交
2746
EXPORT_SYMBOL(__check_sticky);
L
Linus Torvalds 已提交
2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760

/*
 *	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.
2761 2762 2763 2764 2765
 *  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 已提交
2766 2767
 *     nfs_async_unlink().
 */
2768
static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
L
Linus Torvalds 已提交
2769
{
2770
	struct inode *inode = d_backing_inode(victim);
L
Linus Torvalds 已提交
2771 2772
	int error;

2773
	if (d_is_negative(victim))
L
Linus Torvalds 已提交
2774
		return -ENOENT;
2775
	BUG_ON(!inode);
L
Linus Torvalds 已提交
2776 2777

	BUG_ON(victim->d_parent->d_inode != dir);
2778
	audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
L
Linus Torvalds 已提交
2779

2780
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2781 2782 2783 2784
	if (error)
		return error;
	if (IS_APPEND(dir))
		return -EPERM;
2785 2786

	if (check_sticky(dir, inode) || IS_APPEND(inode) ||
2787
	    IS_IMMUTABLE(inode) || IS_SWAPFILE(inode) || HAS_UNMAPPED_ID(inode))
L
Linus Torvalds 已提交
2788 2789
		return -EPERM;
	if (isdir) {
M
Miklos Szeredi 已提交
2790
		if (!d_is_dir(victim))
L
Linus Torvalds 已提交
2791 2792 2793
			return -ENOTDIR;
		if (IS_ROOT(victim))
			return -EBUSY;
M
Miklos Szeredi 已提交
2794
	} else if (d_is_dir(victim))
L
Linus Torvalds 已提交
2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807
		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())
2808 2809 2810
 *  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 已提交
2811
 */
2812
static inline int may_create(struct inode *dir, struct dentry *child)
L
Linus Torvalds 已提交
2813
{
2814
	struct user_namespace *s_user_ns;
2815
	audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
L
Linus Torvalds 已提交
2816 2817 2818 2819
	if (child->d_inode)
		return -EEXIST;
	if (IS_DEADDIR(dir))
		return -ENOENT;
2820 2821 2822 2823
	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;
2824
	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2825 2826 2827 2828 2829 2830 2831 2832 2833 2834
}

/*
 * 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 已提交
2835
		inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
L
Linus Torvalds 已提交
2836 2837 2838
		return NULL;
	}

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

2841 2842
	p = d_ancestor(p2, p1);
	if (p) {
A
Al Viro 已提交
2843 2844
		inode_lock_nested(p2->d_inode, I_MUTEX_PARENT);
		inode_lock_nested(p1->d_inode, I_MUTEX_CHILD);
2845
		return p;
L
Linus Torvalds 已提交
2846 2847
	}

2848 2849
	p = d_ancestor(p1, p2);
	if (p) {
A
Al Viro 已提交
2850 2851
		inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
		inode_lock_nested(p2->d_inode, I_MUTEX_CHILD);
2852
		return p;
L
Linus Torvalds 已提交
2853 2854
	}

A
Al Viro 已提交
2855 2856
	inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
	inode_lock_nested(p2->d_inode, I_MUTEX_PARENT2);
L
Linus Torvalds 已提交
2857 2858
	return NULL;
}
2859
EXPORT_SYMBOL(lock_rename);
L
Linus Torvalds 已提交
2860 2861 2862

void unlock_rename(struct dentry *p1, struct dentry *p2)
{
A
Al Viro 已提交
2863
	inode_unlock(p1->d_inode);
L
Linus Torvalds 已提交
2864
	if (p1 != p2) {
A
Al Viro 已提交
2865
		inode_unlock(p2->d_inode);
2866
		mutex_unlock(&p1->d_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2867 2868
	}
}
2869
EXPORT_SYMBOL(unlock_rename);
L
Linus Torvalds 已提交
2870

A
Al Viro 已提交
2871
int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
A
Al Viro 已提交
2872
		bool want_excl)
L
Linus Torvalds 已提交
2873
{
2874
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
2875 2876 2877
	if (error)
		return error;

A
Al Viro 已提交
2878
	if (!dir->i_op->create)
L
Linus Torvalds 已提交
2879 2880 2881 2882 2883 2884
		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 已提交
2885
	error = dir->i_op->create(dir, dentry, mode, want_excl);
2886
	if (!error)
2887
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
2888 2889
	return error;
}
2890
EXPORT_SYMBOL(vfs_create);
L
Linus Torvalds 已提交
2891

2892 2893 2894 2895 2896 2897
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 已提交
2898
static int may_open(struct path *path, int acc_mode, int flag)
L
Linus Torvalds 已提交
2899
{
2900
	struct dentry *dentry = path->dentry;
L
Linus Torvalds 已提交
2901 2902 2903 2904 2905 2906
	struct inode *inode = dentry->d_inode;
	int error;

	if (!inode)
		return -ENOENT;

C
Christoph Hellwig 已提交
2907 2908
	switch (inode->i_mode & S_IFMT) {
	case S_IFLNK:
L
Linus Torvalds 已提交
2909
		return -ELOOP;
C
Christoph Hellwig 已提交
2910 2911 2912 2913 2914 2915
	case S_IFDIR:
		if (acc_mode & MAY_WRITE)
			return -EISDIR;
		break;
	case S_IFBLK:
	case S_IFCHR:
2916
		if (!may_open_dev(path))
L
Linus Torvalds 已提交
2917
			return -EACCES;
C
Christoph Hellwig 已提交
2918 2919 2920
		/*FALLTHRU*/
	case S_IFIFO:
	case S_IFSOCK:
L
Linus Torvalds 已提交
2921
		flag &= ~O_TRUNC;
C
Christoph Hellwig 已提交
2922
		break;
2923
	}
2924

A
Al Viro 已提交
2925
	error = inode_permission(inode, MAY_OPEN | acc_mode);
2926 2927
	if (error)
		return error;
M
Mimi Zohar 已提交
2928

L
Linus Torvalds 已提交
2929 2930 2931 2932
	/*
	 * An append-only file must be opened in append mode for writing.
	 */
	if (IS_APPEND(inode)) {
2933
		if  ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
2934
			return -EPERM;
L
Linus Torvalds 已提交
2935
		if (flag & O_TRUNC)
2936
			return -EPERM;
L
Linus Torvalds 已提交
2937 2938 2939
	}

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

2943
	return 0;
2944
}
L
Linus Torvalds 已提交
2945

2946
static int handle_truncate(struct file *filp)
2947
{
2948
	struct path *path = &filp->f_path;
2949 2950 2951 2952 2953 2954 2955
	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.
	 */
2956
	error = locks_verify_locked(filp);
2957
	if (!error)
2958
		error = security_path_truncate(path);
2959 2960 2961
	if (!error) {
		error = do_truncate(path->dentry, 0,
				    ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
2962
				    filp);
2963 2964
	}
	put_write_access(inode);
M
Mimi Zohar 已提交
2965
	return error;
L
Linus Torvalds 已提交
2966 2967
}

2968 2969
static inline int open_to_namei_flags(int flag)
{
2970 2971
	if ((flag & O_ACCMODE) == 3)
		flag--;
2972 2973 2974
	return flag;
}

2975
static int may_o_create(const struct path *dir, struct dentry *dentry, umode_t mode)
M
Miklos Szeredi 已提交
2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987
{
	int error = security_path_mknod(dir, dentry, mode, 0);
	if (error)
		return error;

	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);
}

2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
/*
 * 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().
 *
 * Returns 1 if the file was looked up only or didn't need creating.  The
 * caller will need to perform the open themselves.  @path will have been
 * updated to point to the new dentry.  This may be negative.
 *
 * Returns an error code otherwise.
 */
3001 3002 3003
static int atomic_open(struct nameidata *nd, struct dentry *dentry,
			struct path *path, struct file *file,
			const struct open_flags *op,
3004
			int open_flag, umode_t mode,
3005
			int *opened)
M
Miklos Szeredi 已提交
3006
{
3007
	struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
M
Miklos Szeredi 已提交
3008 3009 3010
	struct inode *dir =  nd->path.dentry->d_inode;
	int error;

3011
	if (!(~open_flag & (O_EXCL | O_CREAT)))	/* both O_EXCL and O_CREAT */
M
Miklos Szeredi 已提交
3012 3013 3014 3015 3016
		open_flag &= ~O_TRUNC;

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

A
Al Viro 已提交
3017 3018
	file->f_path.dentry = DENTRY_NOT_SET;
	file->f_path.mnt = nd->path.mnt;
3019 3020 3021
	error = dir->i_op->atomic_open(dir, dentry, file,
				       open_to_namei_flags(open_flag),
				       mode, opened);
3022
	d_lookup_done(dentry);
3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037
	if (!error) {
		/*
		 * We didn't have the inode before the open, so check open
		 * permission here.
		 */
		int acc_mode = op->acc_mode;
		if (*opened & FILE_CREATED) {
			WARN_ON(!(open_flag & O_CREAT));
			fsnotify_create(dir, dentry);
			acc_mode = 0;
		}
		error = may_open(&file->f_path, acc_mode, open_flag);
		if (WARN_ON(error > 0))
			error = -EINVAL;
	} else if (error > 0) {
A
Al Viro 已提交
3038
		if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
3039
			error = -EIO;
3040
		} else {
3041 3042 3043
			if (file->f_path.dentry) {
				dput(dentry);
				dentry = file->f_path.dentry;
3044
			}
3045 3046
			if (*opened & FILE_CREATED)
				fsnotify_create(dir, dentry);
A
Al Viro 已提交
3047 3048 3049 3050 3051 3052 3053
			if (unlikely(d_is_negative(dentry))) {
				error = -ENOENT;
			} else {
				path->dentry = dentry;
				path->mnt = nd->path.mnt;
				return 1;
			}
3054
		}
M
Miklos Szeredi 已提交
3055 3056
	}
	dput(dentry);
3057
	return error;
M
Miklos Szeredi 已提交
3058 3059
}

M
Miklos Szeredi 已提交
3060
/*
3061
 * Look up and maybe create and open the last component.
M
Miklos Szeredi 已提交
3062 3063 3064
 *
 * Must be called with i_mutex held on parent.
 *
3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076
 * Returns 0 if the file was successfully atomically created (if necessary) and
 * opened.  In this case the file will be returned attached to @file.
 *
 * Returns 1 if the file was not completely opened at this time, though lookups
 * and creations will have been performed and the dentry returned in @path will
 * be positive upon return if O_CREAT was specified.  If O_CREAT wasn't
 * specified then a negative dentry may be returned.
 *
 * An error code is returned otherwise.
 *
 * FILE_CREATE will be set in @*opened if the dentry was created and will be
 * cleared otherwise prior to returning.
M
Miklos Szeredi 已提交
3077
 */
3078 3079 3080
static int lookup_open(struct nameidata *nd, struct path *path,
			struct file *file,
			const struct open_flags *op,
3081
			bool got_write, int *opened)
M
Miklos Szeredi 已提交
3082 3083
{
	struct dentry *dir = nd->path.dentry;
3084
	struct inode *dir_inode = dir->d_inode;
3085
	int open_flag = op->open_flag;
M
Miklos Szeredi 已提交
3086
	struct dentry *dentry;
3087 3088
	int error, create_error = 0;
	umode_t mode = op->mode;
3089
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
M
Miklos Szeredi 已提交
3090

3091 3092
	if (unlikely(IS_DEADDIR(dir_inode)))
		return -ENOENT;
M
Miklos Szeredi 已提交
3093

3094
	*opened &= ~FILE_CREATED;
3095 3096 3097 3098 3099 3100 3101 3102 3103
	dentry = d_lookup(dir, &nd->last);
	for (;;) {
		if (!dentry) {
			dentry = d_alloc_parallel(dir, &nd->last, &wq);
			if (IS_ERR(dentry))
				return PTR_ERR(dentry);
		}
		if (d_in_lookup(dentry))
			break;
M
Miklos Szeredi 已提交
3104

3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117
		if (!(dentry->d_flags & DCACHE_OP_REVALIDATE))
			break;

		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) {
3118
		/* Cached positive dentry: will open in f_op->open */
M
Miklos Szeredi 已提交
3119
		goto out_no_open;
3120
	}
M
Miklos Szeredi 已提交
3121

3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154
	/*
	 * 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).
	 */
	if (open_flag & O_CREAT) {
		if (!IS_POSIXACL(dir->d_inode))
			mode &= ~current_umask();
		if (unlikely(!got_write)) {
			create_error = -EROFS;
			open_flag &= ~O_CREAT;
			if (open_flag & (O_EXCL | O_TRUNC))
				goto no_open;
			/* No side effects, safe to clear O_CREAT */
		} else {
			create_error = may_o_create(&nd->path, dentry, mode);
			if (create_error) {
				open_flag &= ~O_CREAT;
				if (open_flag & O_EXCL)
					goto no_open;
			}
		}
	} else if ((open_flag & (O_TRUNC|O_WRONLY|O_RDWR)) &&
		   unlikely(!got_write)) {
		/*
		 * No O_CREATE -> atomicity not a requirement -> fall
		 * back to lookup + open
		 */
		goto no_open;
M
Miklos Szeredi 已提交
3155 3156
	}

3157
	if (dir_inode->i_op->atomic_open) {
3158 3159 3160 3161 3162
		error = atomic_open(nd, dentry, path, file, op, open_flag,
				    mode, opened);
		if (unlikely(error == -ENOENT) && create_error)
			error = create_error;
		return error;
M
Miklos Szeredi 已提交
3163
	}
3164

3165
no_open:
3166
	if (d_in_lookup(dentry)) {
3167 3168
		struct dentry *res = dir_inode->i_op->lookup(dir_inode, dentry,
							     nd->flags);
3169
		d_lookup_done(dentry);
3170 3171 3172 3173 3174 3175 3176 3177
		if (unlikely(res)) {
			if (IS_ERR(res)) {
				error = PTR_ERR(res);
				goto out_dput;
			}
			dput(dentry);
			dentry = res;
		}
3178 3179
	}

M
Miklos Szeredi 已提交
3180
	/* Negative dentry, just create the file */
3181
	if (!dentry->d_inode && (open_flag & O_CREAT)) {
3182
		*opened |= FILE_CREATED;
3183 3184 3185
		audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
		if (!dir_inode->i_op->create) {
			error = -EACCES;
M
Miklos Szeredi 已提交
3186
			goto out_dput;
3187 3188
		}
		error = dir_inode->i_op->create(dir_inode, dentry, mode,
3189
						open_flag & O_EXCL);
M
Miklos Szeredi 已提交
3190 3191
		if (error)
			goto out_dput;
3192
		fsnotify_create(dir_inode, dentry);
M
Miklos Szeredi 已提交
3193
	}
3194 3195 3196
	if (unlikely(create_error) && !dentry->d_inode) {
		error = create_error;
		goto out_dput;
M
Miklos Szeredi 已提交
3197
	}
M
Miklos Szeredi 已提交
3198
out_no_open:
M
Miklos Szeredi 已提交
3199 3200
	path->dentry = dentry;
	path->mnt = nd->path.mnt;
3201
	return 1;
M
Miklos Szeredi 已提交
3202 3203 3204

out_dput:
	dput(dentry);
3205
	return error;
M
Miklos Szeredi 已提交
3206 3207
}

N
Nick Piggin 已提交
3208
/*
3209
 * Handle the last step of open()
N
Nick Piggin 已提交
3210
 */
3211
static int do_last(struct nameidata *nd,
3212
		   struct file *file, const struct open_flags *op,
A
Al Viro 已提交
3213
		   int *opened)
3214
{
3215
	struct dentry *dir = nd->path.dentry;
3216
	int open_flag = op->open_flag;
M
Miklos Szeredi 已提交
3217
	bool will_truncate = (open_flag & O_TRUNC) != 0;
3218
	bool got_write = false;
A
Al Viro 已提交
3219
	int acc_mode = op->acc_mode;
3220
	unsigned seq;
3221
	struct inode *inode;
3222
	struct path path;
A
Al Viro 已提交
3223
	int error;
3224

3225 3226 3227
	nd->flags &= ~LOOKUP_PARENT;
	nd->flags |= op->intent;

3228
	if (nd->last_type != LAST_NORM) {
3229
		error = handle_dots(nd, nd->last_type);
3230
		if (unlikely(error))
3231
			return error;
M
Miklos Szeredi 已提交
3232
		goto finish_open;
3233
	}
3234

3235
	if (!(open_flag & O_CREAT)) {
3236 3237 3238
		if (nd->last.name[nd->last.len])
			nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
		/* we _can_ be in RCU mode here */
3239
		error = lookup_fast(nd, &path, &inode, &seq);
3240
		if (likely(error > 0))
3241 3242 3243
			goto finish_lookup;

		if (error < 0)
3244
			return error;
3245 3246

		BUG_ON(nd->inode != dir->d_inode);
A
Al Viro 已提交
3247
		BUG_ON(nd->flags & LOOKUP_RCU);
3248 3249 3250 3251 3252 3253 3254 3255
	} else {
		/* create side of things */
		/*
		 * This will *only* deal with leaving RCU mode - LOOKUP_JUMPED
		 * has been cleared when we got to the last component we are
		 * about to look up
		 */
		error = complete_walk(nd);
3256
		if (error)
3257
			return error;
3258

A
Al Viro 已提交
3259
		audit_inode(nd->name, dir, LOOKUP_PARENT);
3260
		/* trailing slashes? */
3261 3262
		if (unlikely(nd->last.name[nd->last.len]))
			return -EISDIR;
3263
	}
A
Al Viro 已提交
3264

3265
	if (open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
3266 3267 3268 3269 3270 3271 3272 3273 3274
		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.
		 */
	}
3275 3276 3277 3278
	if (open_flag & O_CREAT)
		inode_lock(dir->d_inode);
	else
		inode_lock_shared(dir->d_inode);
3279
	error = lookup_open(nd, &path, file, op, got_write, opened);
3280 3281 3282 3283
	if (open_flag & O_CREAT)
		inode_unlock(dir->d_inode);
	else
		inode_unlock_shared(dir->d_inode);
3284

3285 3286
	if (error <= 0) {
		if (error)
M
Miklos Szeredi 已提交
3287 3288
			goto out;

3289
		if ((*opened & FILE_CREATED) ||
A
Al Viro 已提交
3290
		    !S_ISREG(file_inode(file)->i_mode))
M
Miklos Szeredi 已提交
3291
			will_truncate = false;
M
Miklos Szeredi 已提交
3292

A
Al Viro 已提交
3293
		audit_inode(nd->name, file->f_path.dentry, 0);
M
Miklos Szeredi 已提交
3294 3295
		goto opened;
	}
3296

3297
	if (*opened & FILE_CREATED) {
3298
		/* Don't check for write permission, don't truncate */
3299
		open_flag &= ~O_TRUNC;
M
Miklos Szeredi 已提交
3300
		will_truncate = false;
A
Al Viro 已提交
3301
		acc_mode = 0;
3302
		path_to_nameidata(&path, nd);
M
Miklos Szeredi 已提交
3303
		goto finish_open_created;
3304 3305
	}

M
Miklos Szeredi 已提交
3306 3307 3308 3309 3310
	/*
	 * If atomic_open() acquired write access it is dropped now due to
	 * possible mount and symlink following (this might be optimized away if
	 * necessary...)
	 */
3311
	if (got_write) {
M
Miklos Szeredi 已提交
3312
		mnt_drop_write(nd->path.mnt);
3313
		got_write = false;
M
Miklos Szeredi 已提交
3314 3315
	}

A
Al Viro 已提交
3316 3317 3318 3319
	error = follow_managed(&path, nd);
	if (unlikely(error < 0))
		return error;

A
Al Viro 已提交
3320 3321 3322 3323 3324 3325 3326 3327 3328 3329
	if (unlikely(d_is_negative(path.dentry))) {
		path_to_nameidata(&path, nd);
		return -ENOENT;
	}

	/*
	 * create/update audit record if it already exists.
	 */
	audit_inode(nd->name, path.dentry, 0);

3330 3331 3332 3333
	if (unlikely((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))) {
		path_to_nameidata(&path, nd);
		return -EEXIST;
	}
3334

3335
	seq = 0;	/* out of RCU mode, so the value doesn't matter */
3336
	inode = d_backing_inode(path.dentry);
3337
finish_lookup:
3338 3339
	if (nd->depth)
		put_link(nd);
3340 3341
	error = should_follow_link(nd, &path, nd->flags & LOOKUP_FOLLOW,
				   inode, seq);
3342
	if (unlikely(error))
3343
		return error;
3344

A
Al Viro 已提交
3345
	path_to_nameidata(&path, nd);
3346
	nd->inode = inode;
3347
	nd->seq = seq;
3348
	/* Why this, you ask?  _Now_ we might have grown LOOKUP_JUMPED... */
3349
finish_open:
3350
	error = complete_walk(nd);
A
Al Viro 已提交
3351
	if (error)
3352
		return error;
A
Al Viro 已提交
3353
	audit_inode(nd->name, nd->path.dentry, 0);
3354
	error = -EISDIR;
M
Miklos Szeredi 已提交
3355
	if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
3356
		goto out;
3357
	error = -ENOTDIR;
M
Miklos Szeredi 已提交
3358
	if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry))
3359
		goto out;
3360
	if (!d_is_reg(nd->path.dentry))
M
Miklos Szeredi 已提交
3361
		will_truncate = false;
3362

3363 3364 3365
	if (will_truncate) {
		error = mnt_want_write(nd->path.mnt);
		if (error)
3366
			goto out;
3367
		got_write = true;
3368
	}
M
Miklos Szeredi 已提交
3369
finish_open_created:
3370 3371 3372
	error = may_open(&nd->path, acc_mode, open_flag);
	if (error)
		goto out;
M
Miklos Szeredi 已提交
3373 3374
	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
	error = vfs_open(&nd->path, file, current_cred());
A
Al Viro 已提交
3375
	if (error)
3376
		goto out;
A
Al Viro 已提交
3377
	*opened |= FILE_OPENED;
3378
opened:
3379
	error = open_check_o_direct(file);
3380 3381 3382
	if (!error)
		error = ima_file_check(file, op->acc_mode, *opened);
	if (!error && will_truncate)
3383
		error = handle_truncate(file);
3384
out:
3385 3386
	if (unlikely(error) && (*opened & FILE_OPENED))
		fput(file);
3387 3388 3389 3390
	if (unlikely(error > 0)) {
		WARN_ON(1);
		error = -EINVAL;
	}
3391
	if (got_write)
3392
		mnt_drop_write(nd->path.mnt);
3393
	return error;
3394 3395
}

3396
static int do_tmpfile(struct nameidata *nd, unsigned flags,
3397 3398 3399 3400
		const struct open_flags *op,
		struct file *file, int *opened)
{
	static const struct qstr name = QSTR_INIT("/", 1);
3401
	struct dentry *child;
3402
	struct inode *dir;
3403
	struct path path;
3404
	int error = path_lookupat(nd, flags | LOOKUP_DIRECTORY, &path);
3405 3406
	if (unlikely(error))
		return error;
3407
	error = mnt_want_write(path.mnt);
3408 3409
	if (unlikely(error))
		goto out;
3410
	dir = path.dentry->d_inode;
3411
	/* we want directory to be writable */
3412
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
3413 3414 3415 3416 3417 3418
	if (error)
		goto out2;
	if (!dir->i_op->tmpfile) {
		error = -EOPNOTSUPP;
		goto out2;
	}
3419
	child = d_alloc(path.dentry, &name);
3420 3421 3422 3423
	if (unlikely(!child)) {
		error = -ENOMEM;
		goto out2;
	}
3424 3425 3426
	dput(path.dentry);
	path.dentry = child;
	error = dir->i_op->tmpfile(dir, child, op->mode);
3427 3428
	if (error)
		goto out2;
3429
	audit_inode(nd->name, child, 0);
3430
	/* Don't check for other permissions, the inode was just created */
A
Al Viro 已提交
3431
	error = may_open(&path, 0, op->open_flag);
3432 3433
	if (error)
		goto out2;
3434 3435
	file->f_path.mnt = path.mnt;
	error = finish_open(file, child, NULL, opened);
3436 3437 3438
	if (error)
		goto out2;
	error = open_check_o_direct(file);
3439
	if (error) {
3440
		fput(file);
3441 3442 3443 3444 3445 3446
	} else if (!(op->open_flag & O_EXCL)) {
		struct inode *inode = file_inode(file);
		spin_lock(&inode->i_lock);
		inode->i_state |= I_LINKABLE;
		spin_unlock(&inode->i_lock);
	}
3447
out2:
3448
	mnt_drop_write(path.mnt);
3449
out:
3450
	path_put(&path);
3451 3452 3453
	return error;
}

3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465
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);
		error = vfs_open(&path, file, current_cred());
		path_put(&path);
	}
	return error;
}

3466 3467
static struct file *path_openat(struct nameidata *nd,
			const struct open_flags *op, unsigned flags)
L
Linus Torvalds 已提交
3468
{
3469
	const char *s;
A
Al Viro 已提交
3470
	struct file *file;
3471
	int opened = 0;
3472
	int error;
N
Nick Piggin 已提交
3473

A
Al Viro 已提交
3474
	file = get_empty_filp();
3475 3476
	if (IS_ERR(file))
		return file;
N
Nick Piggin 已提交
3477

A
Al Viro 已提交
3478
	file->f_flags = op->open_flag;
N
Nick Piggin 已提交
3479

A
Al Viro 已提交
3480
	if (unlikely(file->f_flags & __O_TMPFILE)) {
3481
		error = do_tmpfile(nd, flags, op, file, &opened);
A
Al Viro 已提交
3482
		goto out2;
3483 3484
	}

3485 3486 3487 3488 3489 3490 3491
	if (unlikely(file->f_flags & O_PATH)) {
		error = do_o_path(nd, flags, file);
		if (!error)
			opened |= FILE_OPENED;
		goto out2;
	}

3492
	s = path_init(nd, flags);
3493 3494 3495 3496
	if (IS_ERR(s)) {
		put_filp(file);
		return ERR_CAST(s);
	}
3497
	while (!(error = link_path_walk(s, nd)) &&
A
Al Viro 已提交
3498
		(error = do_last(nd, file, op, &opened)) > 0) {
A
Al Viro 已提交
3499
		nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3500 3501 3502
		s = trailing_symlink(nd);
		if (IS_ERR(s)) {
			error = PTR_ERR(s);
3503
			break;
3504
		}
3505
	}
3506
	terminate_walk(nd);
A
Al Viro 已提交
3507
out2:
3508 3509
	if (!(opened & FILE_OPENED)) {
		BUG_ON(!error);
A
Al Viro 已提交
3510
		put_filp(file);
3511
	}
3512 3513 3514 3515 3516 3517 3518 3519 3520 3521
	if (unlikely(error)) {
		if (error == -EOPENSTALE) {
			if (flags & LOOKUP_RCU)
				error = -ECHILD;
			else
				error = -ESTALE;
		}
		file = ERR_PTR(error);
	}
	return file;
L
Linus Torvalds 已提交
3522 3523
}

3524
struct file *do_filp_open(int dfd, struct filename *pathname,
3525
		const struct open_flags *op)
3526
{
3527
	struct nameidata nd;
3528
	int flags = op->lookup_flags;
3529 3530
	struct file *filp;

3531
	set_nameidata(&nd, dfd, pathname);
3532
	filp = path_openat(&nd, op, flags | LOOKUP_RCU);
3533
	if (unlikely(filp == ERR_PTR(-ECHILD)))
3534
		filp = path_openat(&nd, op, flags);
3535
	if (unlikely(filp == ERR_PTR(-ESTALE)))
3536
		filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3537
	restore_nameidata();
3538 3539 3540
	return filp;
}

A
Al Viro 已提交
3541
struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
3542
		const char *name, const struct open_flags *op)
A
Al Viro 已提交
3543
{
3544
	struct nameidata nd;
A
Al Viro 已提交
3545
	struct file *file;
3546
	struct filename *filename;
3547
	int flags = op->lookup_flags | LOOKUP_ROOT;
A
Al Viro 已提交
3548 3549 3550 3551

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

3552
	if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN)
A
Al Viro 已提交
3553 3554
		return ERR_PTR(-ELOOP);

3555
	filename = getname_kernel(name);
3556
	if (IS_ERR(filename))
3557 3558
		return ERR_CAST(filename);

3559
	set_nameidata(&nd, -1, filename);
3560
	file = path_openat(&nd, op, flags | LOOKUP_RCU);
A
Al Viro 已提交
3561
	if (unlikely(file == ERR_PTR(-ECHILD)))
3562
		file = path_openat(&nd, op, flags);
A
Al Viro 已提交
3563
	if (unlikely(file == ERR_PTR(-ESTALE)))
3564
		file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3565
	restore_nameidata();
3566
	putname(filename);
A
Al Viro 已提交
3567 3568 3569
	return file;
}

3570
static struct dentry *filename_create(int dfd, struct filename *name,
3571
				struct path *path, unsigned int lookup_flags)
L
Linus Torvalds 已提交
3572
{
3573
	struct dentry *dentry = ERR_PTR(-EEXIST);
3574 3575
	struct qstr last;
	int type;
3576
	int err2;
3577 3578 3579 3580 3581 3582 3583 3584 3585
	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;

3586 3587 3588
	name = filename_parentat(dfd, name, lookup_flags, path, &last, &type);
	if (IS_ERR(name))
		return ERR_CAST(name);
L
Linus Torvalds 已提交
3589

3590 3591 3592 3593
	/*
	 * Yucky last component or no last component at all?
	 * (foo/., foo/.., /////)
	 */
3594
	if (unlikely(type != LAST_NORM))
A
Al Viro 已提交
3595
		goto out;
3596

3597
	/* don't fail immediately if it's r/o, at least try to report other errors */
3598
	err2 = mnt_want_write(path->mnt);
3599 3600 3601
	/*
	 * Do the final lookup.
	 */
3602
	lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
A
Al Viro 已提交
3603
	inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
3604
	dentry = __lookup_hash(&last, path->dentry, lookup_flags);
L
Linus Torvalds 已提交
3605
	if (IS_ERR(dentry))
3606
		goto unlock;
3607

3608
	error = -EEXIST;
3609
	if (d_is_positive(dentry))
3610
		goto fail;
3611

3612 3613 3614 3615 3616 3617
	/*
	 * 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.
	 */
3618
	if (unlikely(!is_dir && last.name[last.len])) {
3619
		error = -ENOENT;
A
Al Viro 已提交
3620
		goto fail;
3621
	}
3622 3623
	if (unlikely(err2)) {
		error = err2;
3624
		goto fail;
3625
	}
3626
	putname(name);
L
Linus Torvalds 已提交
3627 3628
	return dentry;
fail:
3629 3630 3631
	dput(dentry);
	dentry = ERR_PTR(error);
unlock:
A
Al Viro 已提交
3632
	inode_unlock(path->dentry->d_inode);
3633
	if (!err2)
3634
		mnt_drop_write(path->mnt);
A
Al Viro 已提交
3635
out:
3636
	path_put(path);
3637
	putname(name);
L
Linus Torvalds 已提交
3638 3639
	return dentry;
}
3640 3641 3642 3643

struct dentry *kern_path_create(int dfd, const char *pathname,
				struct path *path, unsigned int lookup_flags)
{
3644 3645
	return filename_create(dfd, getname_kernel(pathname),
				path, lookup_flags);
3646
}
3647 3648
EXPORT_SYMBOL(kern_path_create);

A
Al Viro 已提交
3649 3650 3651
void done_path_create(struct path *path, struct dentry *dentry)
{
	dput(dentry);
A
Al Viro 已提交
3652
	inode_unlock(path->dentry->d_inode);
3653
	mnt_drop_write(path->mnt);
A
Al Viro 已提交
3654 3655 3656 3657
	path_put(path);
}
EXPORT_SYMBOL(done_path_create);

A
Al Viro 已提交
3658
inline struct dentry *user_path_create(int dfd, const char __user *pathname,
3659
				struct path *path, unsigned int lookup_flags)
3660
{
3661
	return filename_create(dfd, getname(pathname), path, lookup_flags);
3662 3663 3664
}
EXPORT_SYMBOL(user_path_create);

A
Al Viro 已提交
3665
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
L
Linus Torvalds 已提交
3666
{
3667
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3668 3669 3670 3671

	if (error)
		return error;

3672
	if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD))
L
Linus Torvalds 已提交
3673 3674
		return -EPERM;

A
Al Viro 已提交
3675
	if (!dir->i_op->mknod)
L
Linus Torvalds 已提交
3676 3677
		return -EPERM;

3678 3679 3680 3681
	error = devcgroup_inode_mknod(mode, dev);
	if (error)
		return error;

L
Linus Torvalds 已提交
3682 3683 3684 3685 3686
	error = security_inode_mknod(dir, dentry, mode, dev);
	if (error)
		return error;

	error = dir->i_op->mknod(dir, dentry, mode, dev);
3687
	if (!error)
3688
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3689 3690
	return error;
}
3691
EXPORT_SYMBOL(vfs_mknod);
L
Linus Torvalds 已提交
3692

A
Al Viro 已提交
3693
static int may_mknod(umode_t mode)
3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709
{
	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;
	}
}

A
Al Viro 已提交
3710
SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
3711
		unsigned, dev)
L
Linus Torvalds 已提交
3712
{
3713
	struct dentry *dentry;
3714 3715
	struct path path;
	int error;
3716
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3717

3718 3719 3720
	error = may_mknod(mode);
	if (error)
		return error;
3721 3722
retry:
	dentry = user_path_create(dfd, filename, &path, lookup_flags);
3723 3724
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);
3725

3726
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3727
		mode &= ~current_umask();
3728
	error = security_path_mknod(&path, dentry, mode, dev);
3729
	if (error)
3730
		goto out;
3731
	switch (mode & S_IFMT) {
L
Linus Torvalds 已提交
3732
		case 0: case S_IFREG:
A
Al Viro 已提交
3733
			error = vfs_create(path.dentry->d_inode,dentry,mode,true);
3734 3735
			if (!error)
				ima_post_path_mknod(dentry);
L
Linus Torvalds 已提交
3736 3737
			break;
		case S_IFCHR: case S_IFBLK:
3738
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,
L
Linus Torvalds 已提交
3739 3740 3741
					new_decode_dev(dev));
			break;
		case S_IFIFO: case S_IFSOCK:
3742
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
L
Linus Torvalds 已提交
3743 3744
			break;
	}
3745
out:
A
Al Viro 已提交
3746
	done_path_create(&path, dentry);
3747 3748 3749 3750
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3751 3752 3753
	return error;
}

A
Al Viro 已提交
3754
SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3755 3756 3757 3758
{
	return sys_mknodat(AT_FDCWD, filename, mode, dev);
}

3759
int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
L
Linus Torvalds 已提交
3760
{
3761
	int error = may_create(dir, dentry);
3762
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
3763 3764 3765 3766

	if (error)
		return error;

A
Al Viro 已提交
3767
	if (!dir->i_op->mkdir)
L
Linus Torvalds 已提交
3768 3769 3770 3771 3772 3773 3774
		return -EPERM;

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

3775 3776 3777
	if (max_links && dir->i_nlink >= max_links)
		return -EMLINK;

L
Linus Torvalds 已提交
3778
	error = dir->i_op->mkdir(dir, dentry, mode);
3779
	if (!error)
3780
		fsnotify_mkdir(dir, dentry);
L
Linus Torvalds 已提交
3781 3782
	return error;
}
3783
EXPORT_SYMBOL(vfs_mkdir);
L
Linus Torvalds 已提交
3784

3785
SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
L
Linus Torvalds 已提交
3786
{
3787
	struct dentry *dentry;
3788 3789
	struct path path;
	int error;
3790
	unsigned int lookup_flags = LOOKUP_DIRECTORY;
L
Linus Torvalds 已提交
3791

3792 3793
retry:
	dentry = user_path_create(dfd, pathname, &path, lookup_flags);
3794
	if (IS_ERR(dentry))
3795
		return PTR_ERR(dentry);
L
Linus Torvalds 已提交
3796

3797
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3798
		mode &= ~current_umask();
3799
	error = security_path_mkdir(&path, dentry, mode);
3800 3801
	if (!error)
		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
A
Al Viro 已提交
3802
	done_path_create(&path, dentry);
3803 3804 3805 3806
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3807 3808 3809
	return error;
}

3810
SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
3811 3812 3813 3814
{
	return sys_mkdirat(AT_FDCWD, pathname, mode);
}

L
Linus Torvalds 已提交
3815 3816 3817 3818 3819 3820 3821
int vfs_rmdir(struct inode *dir, struct dentry *dentry)
{
	int error = may_delete(dir, dentry, 1);

	if (error)
		return error;

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

3825
	dget(dentry);
A
Al Viro 已提交
3826
	inode_lock(dentry->d_inode);
S
Sage Weil 已提交
3827 3828

	error = -EBUSY;
3829
	if (is_local_mountpoint(dentry))
S
Sage Weil 已提交
3830 3831 3832 3833 3834 3835
		goto out;

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

3836
	shrink_dcache_parent(dentry);
S
Sage Weil 已提交
3837 3838 3839 3840 3841 3842
	error = dir->i_op->rmdir(dir, dentry);
	if (error)
		goto out;

	dentry->d_inode->i_flags |= S_DEAD;
	dont_mount(dentry);
3843
	detach_mounts(dentry);
S
Sage Weil 已提交
3844 3845

out:
A
Al Viro 已提交
3846
	inode_unlock(dentry->d_inode);
3847
	dput(dentry);
S
Sage Weil 已提交
3848
	if (!error)
L
Linus Torvalds 已提交
3849 3850 3851
		d_delete(dentry);
	return error;
}
3852
EXPORT_SYMBOL(vfs_rmdir);
L
Linus Torvalds 已提交
3853

3854
static long do_rmdir(int dfd, const char __user *pathname)
L
Linus Torvalds 已提交
3855 3856
{
	int error = 0;
3857
	struct filename *name;
L
Linus Torvalds 已提交
3858
	struct dentry *dentry;
3859 3860 3861
	struct path path;
	struct qstr last;
	int type;
3862 3863
	unsigned int lookup_flags = 0;
retry:
3864 3865
	name = user_path_parent(dfd, pathname,
				&path, &last, &type, lookup_flags);
3866 3867
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
3868

3869
	switch (type) {
3870 3871 3872 3873 3874 3875 3876 3877 3878
	case LAST_DOTDOT:
		error = -ENOTEMPTY;
		goto exit1;
	case LAST_DOT:
		error = -EINVAL;
		goto exit1;
	case LAST_ROOT:
		error = -EBUSY;
		goto exit1;
L
Linus Torvalds 已提交
3879
	}
3880

3881
	error = mnt_want_write(path.mnt);
3882 3883
	if (error)
		goto exit1;
3884

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
	error = PTR_ERR(dentry);
3888 3889
	if (IS_ERR(dentry))
		goto exit2;
3890 3891 3892 3893
	if (!dentry->d_inode) {
		error = -ENOENT;
		goto exit3;
	}
3894
	error = security_path_rmdir(&path, dentry);
3895
	if (error)
3896
		goto exit3;
3897
	error = vfs_rmdir(path.dentry->d_inode, dentry);
3898
exit3:
3899 3900
	dput(dentry);
exit2:
A
Al Viro 已提交
3901
	inode_unlock(path.dentry->d_inode);
3902
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3903
exit1:
3904
	path_put(&path);
L
Linus Torvalds 已提交
3905
	putname(name);
3906 3907 3908 3909
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3910 3911 3912
	return error;
}

3913
SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
3914 3915 3916 3917
{
	return do_rmdir(AT_FDCWD, pathname);
}

3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936
/**
 * 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 已提交
3937
{
J
J. Bruce Fields 已提交
3938
	struct inode *target = dentry->d_inode;
L
Linus Torvalds 已提交
3939 3940 3941 3942 3943
	int error = may_delete(dir, dentry, 0);

	if (error)
		return error;

A
Al Viro 已提交
3944
	if (!dir->i_op->unlink)
L
Linus Torvalds 已提交
3945 3946
		return -EPERM;

A
Al Viro 已提交
3947
	inode_lock(target);
3948
	if (is_local_mountpoint(dentry))
L
Linus Torvalds 已提交
3949 3950 3951
		error = -EBUSY;
	else {
		error = security_inode_unlink(dir, dentry);
3952
		if (!error) {
3953 3954
			error = try_break_deleg(target, delegated_inode);
			if (error)
3955
				goto out;
L
Linus Torvalds 已提交
3956
			error = dir->i_op->unlink(dir, dentry);
3957
			if (!error) {
3958
				dont_mount(dentry);
3959 3960
				detach_mounts(dentry);
			}
3961
		}
L
Linus Torvalds 已提交
3962
	}
3963
out:
A
Al Viro 已提交
3964
	inode_unlock(target);
L
Linus Torvalds 已提交
3965 3966 3967

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

L
Linus Torvalds 已提交
3972 3973
	return error;
}
3974
EXPORT_SYMBOL(vfs_unlink);
L
Linus Torvalds 已提交
3975 3976 3977

/*
 * Make sure that the actual truncation of the file will occur outside its
3978
 * directory's i_mutex.  Truncate can take a long time if there is a lot of
L
Linus Torvalds 已提交
3979 3980 3981
 * writeout happening, and we don't want to prevent access to the directory
 * while waiting on the I/O.
 */
3982
static long do_unlinkat(int dfd, const char __user *pathname)
L
Linus Torvalds 已提交
3983
{
3984
	int error;
3985
	struct filename *name;
L
Linus Torvalds 已提交
3986
	struct dentry *dentry;
3987 3988 3989
	struct path path;
	struct qstr last;
	int type;
L
Linus Torvalds 已提交
3990
	struct inode *inode = NULL;
3991
	struct inode *delegated_inode = NULL;
3992 3993
	unsigned int lookup_flags = 0;
retry:
3994 3995
	name = user_path_parent(dfd, pathname,
				&path, &last, &type, lookup_flags);
3996 3997
	if (IS_ERR(name))
		return PTR_ERR(name);
3998

L
Linus Torvalds 已提交
3999
	error = -EISDIR;
4000
	if (type != LAST_NORM)
L
Linus Torvalds 已提交
4001
		goto exit1;
4002

4003
	error = mnt_want_write(path.mnt);
4004 4005
	if (error)
		goto exit1;
4006
retry_deleg:
A
Al Viro 已提交
4007
	inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
4008
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
4009 4010 4011
	error = PTR_ERR(dentry);
	if (!IS_ERR(dentry)) {
		/* Why not before? Because we want correct error value */
4012
		if (last.name[last.len])
4013
			goto slashes;
L
Linus Torvalds 已提交
4014
		inode = dentry->d_inode;
4015
		if (d_is_negative(dentry))
4016 4017
			goto slashes;
		ihold(inode);
4018
		error = security_path_unlink(&path, dentry);
4019
		if (error)
4020
			goto exit2;
4021
		error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode);
4022
exit2:
L
Linus Torvalds 已提交
4023 4024
		dput(dentry);
	}
A
Al Viro 已提交
4025
	inode_unlock(path.dentry->d_inode);
L
Linus Torvalds 已提交
4026 4027
	if (inode)
		iput(inode);	/* truncate the inode here */
4028 4029
	inode = NULL;
	if (delegated_inode) {
4030
		error = break_deleg_wait(&delegated_inode);
4031 4032 4033
		if (!error)
			goto retry_deleg;
	}
4034
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
4035
exit1:
4036
	path_put(&path);
L
Linus Torvalds 已提交
4037
	putname(name);
4038 4039 4040 4041 4042
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		inode = NULL;
		goto retry;
	}
L
Linus Torvalds 已提交
4043 4044 4045
	return error;

slashes:
4046 4047
	if (d_is_negative(dentry))
		error = -ENOENT;
M
Miklos Szeredi 已提交
4048
	else if (d_is_dir(dentry))
4049 4050 4051
		error = -EISDIR;
	else
		error = -ENOTDIR;
L
Linus Torvalds 已提交
4052 4053 4054
	goto exit2;
}

4055
SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
4056 4057 4058 4059 4060 4061 4062 4063 4064 4065
{
	if ((flag & ~AT_REMOVEDIR) != 0)
		return -EINVAL;

	if (flag & AT_REMOVEDIR)
		return do_rmdir(dfd, pathname);

	return do_unlinkat(dfd, pathname);
}

4066
SYSCALL_DEFINE1(unlink, const char __user *, pathname)
4067 4068 4069 4070
{
	return do_unlinkat(AT_FDCWD, pathname);
}

4071
int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
L
Linus Torvalds 已提交
4072
{
4073
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
4074 4075 4076 4077

	if (error)
		return error;

A
Al Viro 已提交
4078
	if (!dir->i_op->symlink)
L
Linus Torvalds 已提交
4079 4080 4081 4082 4083 4084 4085
		return -EPERM;

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

	error = dir->i_op->symlink(dir, dentry, oldname);
4086
	if (!error)
4087
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
4088 4089
	return error;
}
4090
EXPORT_SYMBOL(vfs_symlink);
L
Linus Torvalds 已提交
4091

4092 4093
SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
L
Linus Torvalds 已提交
4094
{
4095
	int error;
4096
	struct filename *from;
4097
	struct dentry *dentry;
4098
	struct path path;
4099
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
4100 4101

	from = getname(oldname);
4102
	if (IS_ERR(from))
L
Linus Torvalds 已提交
4103
		return PTR_ERR(from);
4104 4105
retry:
	dentry = user_path_create(newdfd, newname, &path, lookup_flags);
4106 4107
	error = PTR_ERR(dentry);
	if (IS_ERR(dentry))
4108
		goto out_putname;
4109

4110
	error = security_path_symlink(&path, dentry, from->name);
4111
	if (!error)
4112
		error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
A
Al Viro 已提交
4113
	done_path_create(&path, dentry);
4114 4115 4116 4117
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4118
out_putname:
L
Linus Torvalds 已提交
4119 4120 4121 4122
	putname(from);
	return error;
}

4123
SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
4124 4125 4126 4127
{
	return sys_symlinkat(oldname, AT_FDCWD, newname);
}

J
J. Bruce Fields 已提交
4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147
/**
 * 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 已提交
4148 4149
{
	struct inode *inode = old_dentry->d_inode;
4150
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
4151 4152 4153 4154 4155
	int error;

	if (!inode)
		return -ENOENT;

4156
	error = may_create(dir, new_dentry);
L
Linus Torvalds 已提交
4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167
	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;
4168 4169 4170 4171 4172 4173 4174
	/*
	 * 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 已提交
4175
	if (!dir->i_op->link)
L
Linus Torvalds 已提交
4176
		return -EPERM;
4177
	if (S_ISDIR(inode->i_mode))
L
Linus Torvalds 已提交
4178 4179 4180 4181 4182 4183
		return -EPERM;

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

A
Al Viro 已提交
4184
	inode_lock(inode);
4185
	/* Make sure we don't allow creating hardlink to an unlinked file */
4186
	if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
4187
		error =  -ENOENT;
4188 4189
	else if (max_links && inode->i_nlink >= max_links)
		error = -EMLINK;
J
J. Bruce Fields 已提交
4190 4191 4192 4193 4194
	else {
		error = try_break_deleg(inode, delegated_inode);
		if (!error)
			error = dir->i_op->link(old_dentry, dir, new_dentry);
	}
4195 4196 4197 4198 4199 4200

	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 已提交
4201
	inode_unlock(inode);
4202
	if (!error)
4203
		fsnotify_link(dir, inode, new_dentry);
L
Linus Torvalds 已提交
4204 4205
	return error;
}
4206
EXPORT_SYMBOL(vfs_link);
L
Linus Torvalds 已提交
4207 4208 4209 4210 4211 4212 4213 4214 4215 4216

/*
 * 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
 */
4217 4218
SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, int, flags)
L
Linus Torvalds 已提交
4219 4220
{
	struct dentry *new_dentry;
4221
	struct path old_path, new_path;
J
J. Bruce Fields 已提交
4222
	struct inode *delegated_inode = NULL;
4223
	int how = 0;
L
Linus Torvalds 已提交
4224 4225
	int error;

4226
	if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0)
4227
		return -EINVAL;
4228
	/*
4229 4230 4231
	 * 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.
4232
	 */
4233 4234 4235
	if (flags & AT_EMPTY_PATH) {
		if (!capable(CAP_DAC_READ_SEARCH))
			return -ENOENT;
4236
		how = LOOKUP_EMPTY;
4237
	}
4238 4239 4240

	if (flags & AT_SYMLINK_FOLLOW)
		how |= LOOKUP_FOLLOW;
4241
retry:
4242
	error = user_path_at(olddfd, oldname, how, &old_path);
L
Linus Torvalds 已提交
4243
	if (error)
4244 4245
		return error;

4246 4247
	new_dentry = user_path_create(newdfd, newname, &new_path,
					(how & LOOKUP_REVAL));
L
Linus Torvalds 已提交
4248
	error = PTR_ERR(new_dentry);
4249
	if (IS_ERR(new_dentry))
4250 4251 4252 4253 4254
		goto out;

	error = -EXDEV;
	if (old_path.mnt != new_path.mnt)
		goto out_dput;
K
Kees Cook 已提交
4255 4256 4257
	error = may_linkat(&old_path);
	if (unlikely(error))
		goto out_dput;
4258
	error = security_path_link(old_path.dentry, &new_path, new_dentry);
4259
	if (error)
4260
		goto out_dput;
J
J. Bruce Fields 已提交
4261
	error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
4262
out_dput:
A
Al Viro 已提交
4263
	done_path_create(&new_path, new_dentry);
J
J. Bruce Fields 已提交
4264 4265
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
4266 4267
		if (!error) {
			path_put(&old_path);
J
J. Bruce Fields 已提交
4268
			goto retry;
4269
		}
J
J. Bruce Fields 已提交
4270
	}
4271
	if (retry_estale(error, how)) {
4272
		path_put(&old_path);
4273 4274 4275
		how |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
4276
out:
4277
	path_put(&old_path);
L
Linus Torvalds 已提交
4278 4279 4280 4281

	return error;
}

4282
SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
4283
{
4284
	return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4285 4286
}

4287 4288 4289 4290 4291 4292 4293
/**
 * 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 已提交
4294
 * @flags:	rename flags
4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308
 *
 * 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 已提交
4309 4310 4311
 * 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:
4312
 *	a) we can get into loop creation.
L
Linus Torvalds 已提交
4313 4314
 *	b) race potential - two innocent renames can create a loop together.
 *	   That's where 4.4 screws up. Current fix: serialization on
4315
 *	   sb->s_vfs_rename_mutex. We might be more accurate, but that's another
L
Linus Torvalds 已提交
4316
 *	   story.
4317 4318
 *	c) we have to lock _four_ objects - parents and victim (if it exists),
 *	   and source (if it is not a directory).
4319
 *	   And that - after we got ->i_mutex on parents (until then we don't know
L
Linus Torvalds 已提交
4320 4321
 *	   whether the target exists).  Solution: try to be smart with locking
 *	   order for inodes.  We rely on the fact that tree topology may change
4322
 *	   only under ->s_vfs_rename_mutex _and_ that parent of the object we
L
Linus Torvalds 已提交
4323 4324 4325
 *	   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,
4326
 *	   lock child" and rename is under ->s_vfs_rename_mutex.
L
Linus Torvalds 已提交
4327 4328 4329
 *	   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.
4330
 *	d) conversion from fhandle to dentry may come in the wrong moment - when
4331
 *	   we are removing the target. Solution: we will have to grab ->i_mutex
L
Linus Torvalds 已提交
4332
 *	   in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
4333
 *	   ->i_mutex on parents, which works but leads to some truly excessive
L
Linus Torvalds 已提交
4334 4335
 *	   locking].
 */
4336 4337
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	       struct inode *new_dir, struct dentry *new_dentry,
M
Miklos Szeredi 已提交
4338
	       struct inode **delegated_inode, unsigned int flags)
L
Linus Torvalds 已提交
4339
{
4340 4341 4342 4343
	int error;
	bool is_dir = d_is_dir(old_dentry);
	const unsigned char *old_name;
	struct inode *source = old_dentry->d_inode;
S
Sage Weil 已提交
4344
	struct inode *target = new_dentry->d_inode;
M
Miklos Szeredi 已提交
4345 4346
	bool new_is_dir = false;
	unsigned max_links = new_dir->i_sb->s_max_links;
4347

4348 4349 4350 4351
	/*
	 * Check source == target.
	 * On overlayfs need to look at underlying inodes.
	 */
4352
	if (d_real_inode(old_dentry) == d_real_inode(new_dentry))
4353 4354 4355 4356 4357 4358
		return 0;

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

M
Miklos Szeredi 已提交
4359
	if (!target) {
4360
		error = may_create(new_dir, new_dentry);
M
Miklos Szeredi 已提交
4361 4362 4363 4364 4365 4366 4367 4368
	} 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);
	}
4369 4370 4371
	if (error)
		return error;

4372
	if (!old_dir->i_op->rename)
4373
		return -EPERM;
L
Linus Torvalds 已提交
4374 4375 4376 4377 4378

	/*
	 * If we are going to change the parent - check write permissions,
	 * we'll need to flip '..'.
	 */
M
Miklos Szeredi 已提交
4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389
	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 已提交
4390 4391
	}

4392 4393
	error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
				      flags);
L
Linus Torvalds 已提交
4394 4395 4396
	if (error)
		return error;

4397
	old_name = fsnotify_oldname_init(old_dentry->d_name.name);
4398
	dget(new_dentry);
M
Miklos Szeredi 已提交
4399
	if (!is_dir || (flags & RENAME_EXCHANGE))
4400 4401
		lock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4402
		inode_lock(target);
S
Sage Weil 已提交
4403 4404

	error = -EBUSY;
4405
	if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry))
S
Sage Weil 已提交
4406 4407
		goto out;

M
Miklos Szeredi 已提交
4408
	if (max_links && new_dir != old_dir) {
4409
		error = -EMLINK;
M
Miklos Szeredi 已提交
4410
		if (is_dir && !new_is_dir && new_dir->i_nlink >= max_links)
4411
			goto out;
M
Miklos Szeredi 已提交
4412 4413 4414 4415 4416 4417 4418
		if ((flags & RENAME_EXCHANGE) && !is_dir && new_is_dir &&
		    old_dir->i_nlink >= max_links)
			goto out;
	}
	if (is_dir && !(flags & RENAME_EXCHANGE) && target)
		shrink_dcache_parent(new_dentry);
	if (!is_dir) {
4419
		error = try_break_deleg(source, delegated_inode);
4420 4421
		if (error)
			goto out;
M
Miklos Szeredi 已提交
4422 4423 4424 4425 4426
	}
	if (target && !new_is_dir) {
		error = try_break_deleg(target, delegated_inode);
		if (error)
			goto out;
4427
	}
4428
	error = old_dir->i_op->rename(old_dir, old_dentry,
M
Miklos Szeredi 已提交
4429
				       new_dir, new_dentry, flags);
S
Sage Weil 已提交
4430 4431 4432
	if (error)
		goto out;

M
Miklos Szeredi 已提交
4433
	if (!(flags & RENAME_EXCHANGE) && target) {
4434 4435
		if (is_dir)
			target->i_flags |= S_DEAD;
S
Sage Weil 已提交
4436
		dont_mount(new_dentry);
4437
		detach_mounts(new_dentry);
4438
	}
M
Miklos Szeredi 已提交
4439 4440 4441 4442 4443 4444
	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 已提交
4445
out:
M
Miklos Szeredi 已提交
4446
	if (!is_dir || (flags & RENAME_EXCHANGE))
4447 4448
		unlock_two_nondirectories(source, target);
	else if (target)
A
Al Viro 已提交
4449
		inode_unlock(target);
L
Linus Torvalds 已提交
4450
	dput(new_dentry);
M
Miklos Szeredi 已提交
4451
	if (!error) {
4452
		fsnotify_move(old_dir, new_dir, old_name, is_dir,
M
Miklos Szeredi 已提交
4453 4454 4455 4456 4457 4458
			      !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
		if (flags & RENAME_EXCHANGE) {
			fsnotify_move(new_dir, old_dir, old_dentry->d_name.name,
				      new_is_dir, NULL, new_dentry);
		}
	}
R
Robert Love 已提交
4459 4460
	fsnotify_oldname_free(old_name);

L
Linus Torvalds 已提交
4461 4462
	return error;
}
4463
EXPORT_SYMBOL(vfs_rename);
L
Linus Torvalds 已提交
4464

M
Miklos Szeredi 已提交
4465 4466
SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, unsigned int, flags)
L
Linus Torvalds 已提交
4467
{
4468 4469
	struct dentry *old_dentry, *new_dentry;
	struct dentry *trap;
4470 4471 4472
	struct path old_path, new_path;
	struct qstr old_last, new_last;
	int old_type, new_type;
4473
	struct inode *delegated_inode = NULL;
4474 4475
	struct filename *from;
	struct filename *to;
4476
	unsigned int lookup_flags = 0, target_flags = LOOKUP_RENAME_TARGET;
4477
	bool should_retry = false;
4478
	int error;
M
Miklos Szeredi 已提交
4479

M
Miklos Szeredi 已提交
4480
	if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
M
Miklos Szeredi 已提交
4481 4482
		return -EINVAL;

M
Miklos Szeredi 已提交
4483 4484
	if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) &&
	    (flags & RENAME_EXCHANGE))
M
Miklos Szeredi 已提交
4485 4486
		return -EINVAL;

M
Miklos Szeredi 已提交
4487 4488 4489
	if ((flags & RENAME_WHITEOUT) && !capable(CAP_MKNOD))
		return -EPERM;

4490 4491 4492
	if (flags & RENAME_EXCHANGE)
		target_flags = 0;

4493
retry:
4494 4495
	from = user_path_parent(olddfd, oldname,
				&old_path, &old_last, &old_type, lookup_flags);
4496 4497
	if (IS_ERR(from)) {
		error = PTR_ERR(from);
L
Linus Torvalds 已提交
4498
		goto exit;
4499
	}
L
Linus Torvalds 已提交
4500

4501 4502
	to = user_path_parent(newdfd, newname,
				&new_path, &new_last, &new_type, lookup_flags);
4503 4504
	if (IS_ERR(to)) {
		error = PTR_ERR(to);
L
Linus Torvalds 已提交
4505
		goto exit1;
4506
	}
L
Linus Torvalds 已提交
4507 4508

	error = -EXDEV;
4509
	if (old_path.mnt != new_path.mnt)
L
Linus Torvalds 已提交
4510 4511 4512
		goto exit2;

	error = -EBUSY;
4513
	if (old_type != LAST_NORM)
L
Linus Torvalds 已提交
4514 4515
		goto exit2;

M
Miklos Szeredi 已提交
4516 4517
	if (flags & RENAME_NOREPLACE)
		error = -EEXIST;
4518
	if (new_type != LAST_NORM)
L
Linus Torvalds 已提交
4519 4520
		goto exit2;

4521
	error = mnt_want_write(old_path.mnt);
4522 4523 4524
	if (error)
		goto exit2;

4525
retry_deleg:
4526
	trap = lock_rename(new_path.dentry, old_path.dentry);
L
Linus Torvalds 已提交
4527

4528
	old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags);
L
Linus Torvalds 已提交
4529 4530 4531 4532 4533
	error = PTR_ERR(old_dentry);
	if (IS_ERR(old_dentry))
		goto exit3;
	/* source must exist */
	error = -ENOENT;
4534
	if (d_is_negative(old_dentry))
L
Linus Torvalds 已提交
4535
		goto exit4;
4536
	new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags);
M
Miklos Szeredi 已提交
4537 4538 4539 4540 4541 4542
	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 已提交
4543 4544 4545 4546 4547 4548 4549
	if (flags & RENAME_EXCHANGE) {
		error = -ENOENT;
		if (d_is_negative(new_dentry))
			goto exit5;

		if (!d_is_dir(new_dentry)) {
			error = -ENOTDIR;
4550
			if (new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4551 4552 4553
				goto exit5;
		}
	}
L
Linus Torvalds 已提交
4554
	/* unless the source is a directory trailing slashes give -ENOTDIR */
M
Miklos Szeredi 已提交
4555
	if (!d_is_dir(old_dentry)) {
L
Linus Torvalds 已提交
4556
		error = -ENOTDIR;
4557
		if (old_last.name[old_last.len])
M
Miklos Szeredi 已提交
4558
			goto exit5;
4559
		if (!(flags & RENAME_EXCHANGE) && new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4560
			goto exit5;
L
Linus Torvalds 已提交
4561 4562 4563 4564
	}
	/* source should not be ancestor of target */
	error = -EINVAL;
	if (old_dentry == trap)
M
Miklos Szeredi 已提交
4565
		goto exit5;
L
Linus Torvalds 已提交
4566
	/* target should not be an ancestor of source */
M
Miklos Szeredi 已提交
4567 4568
	if (!(flags & RENAME_EXCHANGE))
		error = -ENOTEMPTY;
L
Linus Torvalds 已提交
4569 4570 4571
	if (new_dentry == trap)
		goto exit5;

4572 4573
	error = security_path_rename(&old_path, old_dentry,
				     &new_path, new_dentry, flags);
4574
	if (error)
4575
		goto exit5;
4576 4577
	error = vfs_rename(old_path.dentry->d_inode, old_dentry,
			   new_path.dentry->d_inode, new_dentry,
M
Miklos Szeredi 已提交
4578
			   &delegated_inode, flags);
L
Linus Torvalds 已提交
4579 4580 4581 4582 4583
exit5:
	dput(new_dentry);
exit4:
	dput(old_dentry);
exit3:
4584
	unlock_rename(new_path.dentry, old_path.dentry);
4585 4586 4587 4588 4589
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
		if (!error)
			goto retry_deleg;
	}
4590
	mnt_drop_write(old_path.mnt);
L
Linus Torvalds 已提交
4591
exit2:
4592 4593
	if (retry_estale(error, lookup_flags))
		should_retry = true;
4594
	path_put(&new_path);
4595
	putname(to);
L
Linus Torvalds 已提交
4596
exit1:
4597
	path_put(&old_path);
L
Linus Torvalds 已提交
4598
	putname(from);
4599 4600 4601 4602 4603
	if (should_retry) {
		should_retry = false;
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4604
exit:
L
Linus Torvalds 已提交
4605 4606 4607
	return error;
}

M
Miklos Szeredi 已提交
4608 4609 4610 4611 4612 4613
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
	return sys_renameat2(olddfd, oldname, newdfd, newname, 0);
}

4614
SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4615
{
M
Miklos Szeredi 已提交
4616
	return sys_renameat2(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4617 4618
}

M
Miklos Szeredi 已提交
4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632
int vfs_whiteout(struct inode *dir, struct dentry *dentry)
{
	int error = may_create(dir, dentry);
	if (error)
		return error;

	if (!dir->i_op->mknod)
		return -EPERM;

	return dir->i_op->mknod(dir, dentry,
				S_IFCHR | WHITEOUT_MODE, WHITEOUT_DEV);
}
EXPORT_SYMBOL(vfs_whiteout);

A
Al Viro 已提交
4633
int readlink_copy(char __user *buffer, int buflen, const char *link)
L
Linus Torvalds 已提交
4634
{
A
Al Viro 已提交
4635
	int len = PTR_ERR(link);
L
Linus Torvalds 已提交
4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649
	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;
}

/*
 * A helper for ->readlink().  This should be used *ONLY* for symlinks that
4650 4651
 * have ->get_link() not calling nd_jump_link().  Using (or not using) it
 * for any given inode is up to filesystem.
L
Linus Torvalds 已提交
4652 4653 4654
 */
int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
4655
	DEFINE_DELAYED_CALL(done);
4656 4657
	struct inode *inode = d_inode(dentry);
	const char *link = inode->i_link;
4658
	int res;
4659

4660
	if (!link) {
4661
		link = inode->i_op->get_link(dentry, inode, &done);
4662 4663 4664
		if (IS_ERR(link))
			return PTR_ERR(link);
	}
4665
	res = readlink_copy(buffer, buflen, link);
4666
	do_delayed_call(&done);
4667
	return res;
L
Linus Torvalds 已提交
4668
}
4669
EXPORT_SYMBOL(generic_readlink);
L
Linus Torvalds 已提交
4670

4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691
/**
 * 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);

	if (!inode->i_op->readlink)
		return -EINVAL;

	return inode->i_op->readlink(dentry, buffer, buflen);
}
EXPORT_SYMBOL(vfs_readlink);

M
Miklos Szeredi 已提交
4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716
/**
 * 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 已提交
4717
/* get the link contents into pagecache */
4718
const char *page_get_link(struct dentry *dentry, struct inode *inode,
4719
			  struct delayed_call *callback)
L
Linus Torvalds 已提交
4720
{
4721 4722
	char *kaddr;
	struct page *page;
4723 4724
	struct address_space *mapping = inode->i_mapping;

4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737
	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;
	}
4738
	set_delayed_call(callback, page_put_link, page);
4739 4740
	BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
	kaddr = page_address(page);
4741
	nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
4742
	return kaddr;
L
Linus Torvalds 已提交
4743 4744
}

4745
EXPORT_SYMBOL(page_get_link);
L
Linus Torvalds 已提交
4746

4747
void page_put_link(void *arg)
L
Linus Torvalds 已提交
4748
{
4749
	put_page(arg);
L
Linus Torvalds 已提交
4750
}
4751
EXPORT_SYMBOL(page_put_link);
L
Linus Torvalds 已提交
4752

4753 4754
int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
4755
	DEFINE_DELAYED_CALL(done);
4756 4757
	int res = readlink_copy(buffer, buflen,
				page_get_link(dentry, d_inode(dentry),
4758 4759
					      &done));
	do_delayed_call(&done);
4760 4761 4762 4763
	return res;
}
EXPORT_SYMBOL(page_readlink);

4764 4765 4766 4767
/*
 * 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 已提交
4768 4769
{
	struct address_space *mapping = inode->i_mapping;
4770
	struct page *page;
4771
	void *fsdata;
4772
	int err;
4773 4774 4775
	unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
	if (nofs)
		flags |= AOP_FLAG_NOFS;
L
Linus Torvalds 已提交
4776

4777
retry:
4778
	err = pagecache_write_begin(NULL, mapping, 0, len-1,
4779
				flags, &page, &fsdata);
L
Linus Torvalds 已提交
4780
	if (err)
4781 4782
		goto fail;

4783
	memcpy(page_address(page), symname, len-1);
4784 4785 4786

	err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
							page, fsdata);
L
Linus Torvalds 已提交
4787 4788
	if (err < 0)
		goto fail;
4789 4790 4791
	if (err < len-1)
		goto retry;

L
Linus Torvalds 已提交
4792 4793 4794 4795 4796
	mark_inode_dirty(inode);
	return 0;
fail:
	return err;
}
4797
EXPORT_SYMBOL(__page_symlink);
L
Linus Torvalds 已提交
4798

4799 4800 4801
int page_symlink(struct inode *inode, const char *symname, int len)
{
	return __page_symlink(inode, symname, len,
4802
			!mapping_gfp_constraint(inode->i_mapping, __GFP_FS));
4803
}
4804
EXPORT_SYMBOL(page_symlink);
4805

4806
const struct inode_operations page_symlink_inode_operations = {
L
Linus Torvalds 已提交
4807
	.readlink	= generic_readlink,
4808
	.get_link	= page_get_link,
L
Linus Torvalds 已提交
4809 4810
};
EXPORT_SYMBOL(page_symlink_inode_operations);