namei.c 114.1 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>
L
Linus Torvalds 已提交
38 39
#include <asm/uaccess.h>

40
#include "internal.h"
41
#include "mount.h"
42

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

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

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

131 132 133 134
	result = audit_reusename(filename);
	if (result)
		return result;

135
	result = __getname();
136
	if (unlikely(!result))
137 138
		return ERR_PTR(-ENOMEM);

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

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

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

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

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

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

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

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

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

219
	if (len <= EMBEDDED_NAME_MAX) {
A
Al Viro 已提交
220
		result->name = (char *)result->iname;
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
	} 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);
236 237
	result->uptr = NULL;
	result->aname = NULL;
238
	result->refcnt = 1;
239
	audit_getname(result);
240 241 242 243

	return result;
}

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

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

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

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

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

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

	return -EAGAIN;
}

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

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

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

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

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

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

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

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

	return -EACCES;
}
368
EXPORT_SYMBOL(generic_permission);
L
Linus Torvalds 已提交
369

370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
/*
 * 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 已提交
390
/**
D
David Howells 已提交
391 392 393
 * __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 已提交
394
 *
D
David Howells 已提交
395
 * Check for read/write/execute permissions on an inode.
396 397
 *
 * When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
D
David Howells 已提交
398 399 400
 *
 * This does not check for a read-only file system.  You probably want
 * inode_permission().
C
Christoph Hellwig 已提交
401
 */
D
David Howells 已提交
402
int __inode_permission(struct inode *inode, int mask)
L
Linus Torvalds 已提交
403
{
404
	int retval;
L
Linus Torvalds 已提交
405

406
	if (unlikely(mask & MAY_WRITE)) {
L
Linus Torvalds 已提交
407 408 409 410 411 412 413
		/*
		 * Nobody gets write access to an immutable file.
		 */
		if (IS_IMMUTABLE(inode))
			return -EACCES;
	}

414
	retval = do_inode_permission(inode, mask);
L
Linus Torvalds 已提交
415 416 417
	if (retval)
		return retval;

418 419 420 421
	retval = devcgroup_inode_permission(inode, mask);
	if (retval)
		return retval;

422
	return security_inode_permission(inode, mask);
L
Linus Torvalds 已提交
423
}
424
EXPORT_SYMBOL(__inode_permission);
L
Linus Torvalds 已提交
425

D
David Howells 已提交
426 427 428
/**
 * sb_permission - Check superblock-level permissions
 * @sb: Superblock of inode to check permission on
429
 * @inode: Inode to check permission on
D
David Howells 已提交
430 431 432 433 434 435 436 437 438 439 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
 * @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);
}
467
EXPORT_SYMBOL(inode_permission);
D
David Howells 已提交
468

J
Jan Blunck 已提交
469 470 471 472 473 474
/**
 * 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.
 */
475
void path_get(const struct path *path)
J
Jan Blunck 已提交
476 477 478 479 480 481
{
	mntget(path->mnt);
	dget(path->dentry);
}
EXPORT_SYMBOL(path_get);

J
Jan Blunck 已提交
482 483 484 485 486 487
/**
 * 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.
 */
488
void path_put(const struct path *path)
L
Linus Torvalds 已提交
489
{
J
Jan Blunck 已提交
490 491
	dput(path->dentry);
	mntput(path->mnt);
L
Linus Torvalds 已提交
492
}
J
Jan Blunck 已提交
493
EXPORT_SYMBOL(path_put);
L
Linus Torvalds 已提交
494

495
#define EMBEDDED_LEVELS 2
496 497
struct nameidata {
	struct path	path;
A
Al Viro 已提交
498
	struct qstr	last;
499 500
	struct path	root;
	struct inode	*inode; /* path.dentry.d_inode */
501 502
	struct filename	*name;
	int		dfd;
503
	unsigned int	flags;
504
	unsigned	seq, m_seq, root_seq;
505 506
	int		last_type;
	unsigned	depth;
507
	int		total_link_count;
508 509 510 511
	struct saved {
		struct path link;
		void *cookie;
		const char *name;
A
Al Viro 已提交
512
		struct inode *inode;
513
		unsigned seq;
514
	} *stack, internal[EMBEDDED_LEVELS];
515 516
};

517 518
static struct nameidata *set_nameidata(struct nameidata *p, int dfd,
					struct filename *name)
519
{
520 521
	struct nameidata *old = current->nameidata;
	p->stack = p->internal;
522 523
	p->dfd = dfd;
	p->name = name;
524 525 526
	p->total_link_count = old ? old->total_link_count : 0;
	current->nameidata = p;
	return old;
527 528
}

529
static void restore_nameidata(struct nameidata *old)
530
{
531 532 533 534 535 536 537 538
	struct nameidata *now = current->nameidata;

	current->nameidata = old;
	if (old)
		old->total_link_count = now->total_link_count;
	if (now->stack != now->internal) {
		kfree(now->stack);
		now->stack = now->internal;
539 540 541 542 543
	}
}

static int __nd_alloc_stack(struct nameidata *nd)
{
A
Al Viro 已提交
544 545 546 547 548 549 550 551 552
	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),
553
				  GFP_KERNEL);
A
Al Viro 已提交
554 555 556
		if (unlikely(!p))
			return -ENOMEM;
	}
557 558 559 560 561 562 563
	memcpy(p, nd->internal, sizeof(nd->internal));
	nd->stack = p;
	return 0;
}

static inline int nd_alloc_stack(struct nameidata *nd)
{
564
	if (likely(nd->depth != EMBEDDED_LEVELS))
565 566 567 568 569 570
		return 0;
	if (likely(nd->stack != nd->internal))
		return 0;
	return __nd_alloc_stack(nd);
}

571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591
static void drop_links(struct nameidata *nd)
{
	int i = nd->depth;
	while (i--) {
		struct saved *last = nd->stack + i;
		struct inode *inode = last->inode;
		if (last->cookie && inode->i_op->put_link) {
			inode->i_op->put_link(inode, last->cookie);
			last->cookie = NULL;
		}
	}
}

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);
592 593 594 595
		if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
			path_put(&nd->root);
			nd->root.mnt = NULL;
		}
596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636
	} 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 已提交
637
/*
N
Nick Piggin 已提交
638
 * Path walking has 2 modes, rcu-walk and ref-walk (see
A
Al Viro 已提交
639 640 641 642 643 644 645
 * 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
 * normal reference counts on dentries and vfsmounts to transition to rcu-walk
 * 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 已提交
646 647 648
 */

/**
A
Al Viro 已提交
649 650 651
 * unlazy_walk - try to switch to ref-walk mode.
 * @nd: nameidata pathwalk data
 * @dentry: child of nd->path.dentry or NULL
652
 * @seq: seq number to check dentry against
653
 * Returns: 0 on success, -ECHILD on failure
N
Nick Piggin 已提交
654
 *
A
Al Viro 已提交
655 656 657
 * 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.
658 659
 * Nothing should touch nameidata between unlazy_walk() failure and
 * terminate_walk().
N
Nick Piggin 已提交
660
 */
661
static int unlazy_walk(struct nameidata *nd, struct dentry *dentry, unsigned seq)
N
Nick Piggin 已提交
662 663 664 665
{
	struct dentry *parent = nd->path.dentry;

	BUG_ON(!(nd->flags & LOOKUP_RCU));
666 667

	nd->flags &= ~LOOKUP_RCU;
668 669 670 671 672 673
	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 已提交
674

675 676 677 678 679 680 681 682 683 684 685
	/*
	 * 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 已提交
686
	if (!dentry) {
687 688
		if (read_seqcount_retry(&parent->d_seq, nd->seq))
			goto out;
A
Al Viro 已提交
689 690
		BUG_ON(nd->inode != parent->d_inode);
	} else {
691 692
		if (!lockref_get_not_dead(&dentry->d_lockref))
			goto out;
693
		if (read_seqcount_retry(&dentry->d_seq, seq))
694
			goto drop_dentry;
A
Al Viro 已提交
695
	}
696 697 698 699 700 701

	/*
	 * 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)) {
702 703 704 705
		if (unlikely(!legitimize_path(nd, &nd->root, nd->root_seq))) {
			rcu_read_unlock();
			dput(dentry);
			return -ECHILD;
706
		}
N
Nick Piggin 已提交
707 708
	}

A
Al Viro 已提交
709
	rcu_read_unlock();
N
Nick Piggin 已提交
710
	return 0;
A
Al Viro 已提交
711

712
drop_dentry:
A
Al Viro 已提交
713
	rcu_read_unlock();
714
	dput(dentry);
715
	goto drop_root_mnt;
716 717 718 719
out2:
	nd->path.mnt = NULL;
out1:
	nd->path.dentry = NULL;
720
out:
A
Al Viro 已提交
721
	rcu_read_unlock();
722 723 724
drop_root_mnt:
	if (!(nd->flags & LOOKUP_ROOT))
		nd->root.mnt = NULL;
N
Nick Piggin 已提交
725 726 727
	return -ECHILD;
}

728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745
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;
}

746
static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
747
{
748
	return dentry->d_op->d_revalidate(dentry, flags);
749 750
}

751 752 753
/**
 * complete_walk - successful completion of path walk
 * @nd:  pointer nameidata
754
 *
755 756 757 758 759
 * 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.
760
 */
761
static int complete_walk(struct nameidata *nd)
762
{
A
Al Viro 已提交
763
	struct dentry *dentry = nd->path.dentry;
764 765
	int status;

766 767 768
	if (nd->flags & LOOKUP_RCU) {
		if (!(nd->flags & LOOKUP_ROOT))
			nd->root.mnt = NULL;
769
		if (unlikely(unlazy_walk(nd, NULL, 0)))
770 771 772
			return -ECHILD;
	}

A
Al Viro 已提交
773 774 775
	if (likely(!(nd->flags & LOOKUP_JUMPED)))
		return 0;

776
	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
777 778
		return 0;

779
	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
780 781 782
	if (status > 0)
		return 0;

A
Al Viro 已提交
783
	if (!status)
784
		status = -ESTALE;
A
Al Viro 已提交
785

786 787 788
	return status;
}

A
Al Viro 已提交
789
static void set_root(struct nameidata *nd)
A
Al Viro 已提交
790
{
791
	get_fs_root(current->fs, &nd->root);
A
Al Viro 已提交
792 793
}

A
Al Viro 已提交
794
static unsigned set_root_rcu(struct nameidata *nd)
N
Nick Piggin 已提交
795
{
796
	struct fs_struct *fs = current->fs;
797
	unsigned seq;
N
Nick Piggin 已提交
798

799 800 801
	do {
		seq = read_seqcount_begin(&fs->seq);
		nd->root = fs->root;
802
		nd->root_seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
803
	} while (read_seqcount_retry(&fs->seq, seq));
804
	return nd->root_seq;
N
Nick Piggin 已提交
805 806
}

J
Jan Blunck 已提交
807
static void path_put_conditional(struct path *path, struct nameidata *nd)
808 809
{
	dput(path->dentry);
810
	if (path->mnt != nd->path.mnt)
811 812 813
		mntput(path->mnt);
}

814 815
static inline void path_to_nameidata(const struct path *path,
					struct nameidata *nd)
816
{
N
Nick Piggin 已提交
817 818 819 820
	if (!(nd->flags & LOOKUP_RCU)) {
		dput(nd->path.dentry);
		if (nd->path.mnt != path->mnt)
			mntput(nd->path.mnt);
821
	}
N
Nick Piggin 已提交
822
	nd->path.mnt = path->mnt;
823
	nd->path.dentry = path->dentry;
824 825
}

C
Christoph Hellwig 已提交
826 827 828 829
/*
 * Helper to directly jump to a known parsed path from ->follow_link,
 * caller must have taken a reference to path beforehand.
 */
830
void nd_jump_link(struct path *path)
C
Christoph Hellwig 已提交
831
{
832
	struct nameidata *nd = current->nameidata;
C
Christoph Hellwig 已提交
833 834 835 836 837 838 839
	path_put(&nd->path);

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

840
static inline void put_link(struct nameidata *nd)
841
{
A
Al Viro 已提交
842
	struct saved *last = nd->stack + --nd->depth;
A
Al Viro 已提交
843
	struct inode *inode = last->inode;
844
	if (last->cookie && inode->i_op->put_link)
845
		inode->i_op->put_link(inode, last->cookie);
A
Al Viro 已提交
846 847
	if (!(nd->flags & LOOKUP_RCU))
		path_put(&last->link);
848 849
}

850 851
int sysctl_protected_symlinks __read_mostly = 0;
int sysctl_protected_hardlinks __read_mostly = 0;
K
Kees Cook 已提交
852 853 854

/**
 * may_follow_link - Check symlink following for unsafe situations
855
 * @nd: nameidata pathwalk data
K
Kees Cook 已提交
856 857 858 859 860 861 862 863 864 865 866 867
 *
 * 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 已提交
868
static inline int may_follow_link(struct nameidata *nd)
K
Kees Cook 已提交
869 870 871 872 873 874 875 876
{
	const struct inode *inode;
	const struct inode *parent;

	if (!sysctl_protected_symlinks)
		return 0;

	/* Allowed if owner and follower match. */
A
Al Viro 已提交
877
	inode = nd->stack[0].inode;
878
	if (uid_eq(current_cred()->fsuid, inode->i_uid))
K
Kees Cook 已提交
879 880 881 882 883 884 885 886
		return 0;

	/* Allowed if parent directory not sticky and world-writable. */
	parent = nd->path.dentry->d_inode;
	if ((parent->i_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH))
		return 0;

	/* Allowed if parent directory and link owner match. */
887
	if (uid_eq(parent->i_uid, inode->i_uid))
K
Kees Cook 已提交
888 889
		return 0;

890 891 892
	if (nd->flags & LOOKUP_RCU)
		return -ECHILD;

A
Al Viro 已提交
893
	audit_log_link_denied("follow_link", &nd->stack[0].link);
K
Kees Cook 已提交
894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957
	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)
 *  - not CAP_FOWNER
 *
 * Returns 0 if successful, -ve on error.
 */
static int may_linkat(struct path *link)
{
	const struct cred *cred;
	struct inode *inode;

	if (!sysctl_protected_hardlinks)
		return 0;

	cred = current_cred();
	inode = link->dentry->d_inode;

	/* Source inode owner (or CAP_FOWNER) can hardlink all they like,
	 * otherwise, it must be a safe source.
	 */
958
	if (uid_eq(cred->fsuid, inode->i_uid) || safe_hardlink_source(inode) ||
K
Kees Cook 已提交
959 960 961
	    capable(CAP_FOWNER))
		return 0;

962
	audit_log_link_denied("linkat", link);
K
Kees Cook 已提交
963 964 965
	return -EPERM;
}

966 967
static __always_inline
const char *get_link(struct nameidata *nd)
L
Linus Torvalds 已提交
968
{
969
	struct saved *last = nd->stack + nd->depth - 1;
A
Al Viro 已提交
970
	struct dentry *dentry = last->link.dentry;
A
Al Viro 已提交
971
	struct inode *inode = last->inode;
972
	int error;
973
	const char *res;
L
Linus Torvalds 已提交
974

975 976 977 978
	if (!(nd->flags & LOOKUP_RCU)) {
		touch_atime(&last->link);
		cond_resched();
	} else if (atime_needs_update(&last->link, inode)) {
A
Al Viro 已提交
979 980
		if (unlikely(unlazy_walk(nd, NULL, 0)))
			return ERR_PTR(-ECHILD);
981
		touch_atime(&last->link);
A
Al Viro 已提交
982
	}
983

984 985 986
	error = security_inode_follow_link(dentry, inode,
					   nd->flags & LOOKUP_RCU);
	if (unlikely(error))
987
		return ERR_PTR(error);
988

989
	nd->last_type = LAST_BIND;
990 991
	res = inode->i_link;
	if (!res) {
992 993 994 995
		if (nd->flags & LOOKUP_RCU) {
			if (unlikely(unlazy_walk(nd, NULL, 0)))
				return ERR_PTR(-ECHILD);
		}
996
		res = inode->i_op->follow_link(dentry, &last->cookie);
997
		if (IS_ERR_OR_NULL(res)) {
998
			last->cookie = NULL;
999 1000 1001 1002
			return res;
		}
	}
	if (*res == '/') {
1003
		if (nd->flags & LOOKUP_RCU) {
1004 1005 1006 1007 1008 1009 1010 1011
			struct dentry *d;
			if (!nd->root.mnt)
				set_root_rcu(nd);
			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)))
1012
				return ERR_PTR(-ECHILD);
1013 1014 1015 1016 1017 1018 1019
		} else {
			if (!nd->root.mnt)
				set_root(nd);
			path_put(&nd->path);
			nd->path = nd->root;
			path_get(&nd->root);
			nd->inode = nd->path.dentry->d_inode;
1020
		}
1021 1022 1023
		nd->flags |= LOOKUP_JUMPED;
		while (unlikely(*++res == '/'))
			;
L
Linus Torvalds 已提交
1024
	}
1025 1026
	if (!*res)
		res = NULL;
1027 1028
	return res;
}
1029

1030 1031 1032 1033 1034 1035 1036 1037 1038 1039
/*
 * 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 已提交
1040
int follow_up(struct path *path)
L
Linus Torvalds 已提交
1041
{
1042 1043
	struct mount *mnt = real_mount(path->mnt);
	struct mount *parent;
L
Linus Torvalds 已提交
1044
	struct dentry *mountpoint;
N
Nick Piggin 已提交
1045

A
Al Viro 已提交
1046
	read_seqlock_excl(&mount_lock);
1047
	parent = mnt->mnt_parent;
A
Al Viro 已提交
1048
	if (parent == mnt) {
A
Al Viro 已提交
1049
		read_sequnlock_excl(&mount_lock);
L
Linus Torvalds 已提交
1050 1051
		return 0;
	}
1052
	mntget(&parent->mnt);
1053
	mountpoint = dget(mnt->mnt_mountpoint);
A
Al Viro 已提交
1054
	read_sequnlock_excl(&mount_lock);
A
Al Viro 已提交
1055 1056 1057
	dput(path->dentry);
	path->dentry = mountpoint;
	mntput(path->mnt);
1058
	path->mnt = &parent->mnt;
L
Linus Torvalds 已提交
1059 1060
	return 1;
}
1061
EXPORT_SYMBOL(follow_up);
L
Linus Torvalds 已提交
1062

N
Nick Piggin 已提交
1063
/*
1064 1065 1066
 * Perform an automount
 * - return -EISDIR to tell follow_managed() to stop and return the path we
 *   were called with.
L
Linus Torvalds 已提交
1067
 */
1068
static int follow_automount(struct path *path, struct nameidata *nd,
1069
			    bool *need_mntput)
N
Nick Piggin 已提交
1070
{
1071
	struct vfsmount *mnt;
1072
	int err;
1073 1074 1075 1076

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

1077 1078 1079 1080 1081 1082 1083 1084 1085 1086
	/* 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.
1087
	 */
1088 1089
	if (!(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
			   LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
1090 1091 1092
	    path->dentry->d_inode)
		return -EISDIR;

1093 1094
	nd->total_link_count++;
	if (nd->total_link_count >= 40)
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107
		return -ELOOP;

	mnt = path->dentry->d_op->d_automount(path);
	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.
		 */
1108
		if (PTR_ERR(mnt) == -EISDIR && (nd->flags & LOOKUP_PARENT))
1109 1110
			return -EREMOTE;
		return PTR_ERR(mnt);
N
Nick Piggin 已提交
1111
	}
1112

1113 1114
	if (!mnt) /* mount collision */
		return 0;
N
Nick Piggin 已提交
1115

1116 1117 1118 1119 1120
	if (!*need_mntput) {
		/* lock_mount() may release path->mnt on error */
		mntget(path->mnt);
		*need_mntput = true;
	}
1121
	err = finish_automount(mnt, path);
1122

1123 1124 1125
	switch (err) {
	case -EBUSY:
		/* Someone else made a mount here whilst we were busy */
1126
		return 0;
1127
	case 0:
1128
		path_put(path);
1129 1130 1131
		path->mnt = mnt;
		path->dentry = dget(mnt->mnt_root);
		return 0;
1132 1133
	default:
		return err;
1134
	}
1135

A
Al Viro 已提交
1136 1137
}

1138 1139
/*
 * Handle a dentry that is managed in some way.
1140
 * - Flagged for transit management (autofs)
1141 1142 1143 1144 1145 1146 1147
 * - Flagged as mountpoint
 * - Flagged as automount point
 *
 * This may only be called in refwalk mode.
 *
 * Serialization is taken care of in namespace.c
 */
1148
static int follow_managed(struct path *path, struct nameidata *nd)
L
Linus Torvalds 已提交
1149
{
1150
	struct vfsmount *mnt = path->mnt; /* held by caller, must be left alone */
1151 1152
	unsigned managed;
	bool need_mntput = false;
1153
	int ret = 0;
1154 1155 1156 1157 1158 1159 1160

	/* 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)) {
1161 1162 1163 1164 1165
		/* 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);
1166
			ret = path->dentry->d_op->d_manage(path->dentry, false);
1167
			if (ret < 0)
1168
				break;
1169 1170
		}

1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185
		/* 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 已提交
1186 1187
			 * namespace got unmounted before lookup_mnt() could
			 * get it */
1188 1189 1190 1191
		}

		/* Handle an automount point */
		if (managed & DCACHE_NEED_AUTOMOUNT) {
1192
			ret = follow_automount(path, nd, &need_mntput);
1193
			if (ret < 0)
1194
				break;
1195 1196 1197 1198 1199
			continue;
		}

		/* We didn't change the current path point */
		break;
L
Linus Torvalds 已提交
1200
	}
1201 1202 1203 1204 1205

	if (need_mntput && path->mnt == mnt)
		mntput(path->mnt);
	if (ret == -EISDIR)
		ret = 0;
1206 1207 1208 1209 1210
	if (need_mntput)
		nd->flags |= LOOKUP_JUMPED;
	if (unlikely(ret < 0))
		path_put_conditional(path, nd);
	return ret;
L
Linus Torvalds 已提交
1211 1212
}

1213
int follow_down_one(struct path *path)
L
Linus Torvalds 已提交
1214 1215 1216
{
	struct vfsmount *mounted;

A
Al Viro 已提交
1217
	mounted = lookup_mnt(path);
L
Linus Torvalds 已提交
1218
	if (mounted) {
A
Al Viro 已提交
1219 1220 1221 1222
		dput(path->dentry);
		mntput(path->mnt);
		path->mnt = mounted;
		path->dentry = dget(mounted->mnt_root);
L
Linus Torvalds 已提交
1223 1224 1225 1226
		return 1;
	}
	return 0;
}
1227
EXPORT_SYMBOL(follow_down_one);
L
Linus Torvalds 已提交
1228

1229
static inline int managed_dentry_rcu(struct dentry *dentry)
1230
{
1231 1232
	return (dentry->d_flags & DCACHE_MANAGE_TRANSIT) ?
		dentry->d_op->d_manage(dentry, true) : 0;
1233 1234
}

1235
/*
1236 1237
 * Try to skip to top of mountpoint pile in rcuwalk mode.  Fail if
 * we meet a managed dentry that would need blocking.
1238 1239
 */
static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
1240
			       struct inode **inode, unsigned *seqp)
1241
{
1242
	for (;;) {
1243
		struct mount *mounted;
1244 1245 1246 1247
		/*
		 * Don't forget we might have a non-mountpoint managed dentry
		 * that wants to block transit.
		 */
1248 1249 1250
		switch (managed_dentry_rcu(path->dentry)) {
		case -ECHILD:
		default:
1251
			return false;
1252 1253 1254 1255 1256
		case -EISDIR:
			return true;
		case 0:
			break;
		}
1257 1258

		if (!d_mountpoint(path->dentry))
1259
			return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
1260

A
Al Viro 已提交
1261
		mounted = __lookup_mnt(path->mnt, path->dentry);
1262 1263
		if (!mounted)
			break;
1264 1265
		path->mnt = &mounted->mnt;
		path->dentry = mounted->mnt.mnt_root;
1266
		nd->flags |= LOOKUP_JUMPED;
1267
		*seqp = read_seqcount_begin(&path->dentry->d_seq);
1268 1269 1270 1271 1272 1273
		/*
		 * 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;
1274
	}
1275
	return !read_seqretry(&mount_lock, nd->m_seq) &&
1276
		!(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT);
1277 1278
}

N
Nick Piggin 已提交
1279 1280
static int follow_dotdot_rcu(struct nameidata *nd)
{
1281
	struct inode *inode = nd->inode;
1282 1283
	if (!nd->root.mnt)
		set_root_rcu(nd);
N
Nick Piggin 已提交
1284

1285
	while (1) {
1286
		if (path_equal(&nd->path, &nd->root))
N
Nick Piggin 已提交
1287 1288 1289 1290 1291 1292
			break;
		if (nd->path.dentry != nd->path.mnt->mnt_root) {
			struct dentry *old = nd->path.dentry;
			struct dentry *parent = old->d_parent;
			unsigned seq;

1293
			inode = parent->d_inode;
N
Nick Piggin 已提交
1294
			seq = read_seqcount_begin(&parent->d_seq);
1295 1296
			if (unlikely(read_seqcount_retry(&old->d_seq, nd->seq)))
				return -ECHILD;
N
Nick Piggin 已提交
1297 1298 1299
			nd->path.dentry = parent;
			nd->seq = seq;
			break;
1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314
		} 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 已提交
1315 1316
		}
	}
1317
	while (unlikely(d_mountpoint(nd->path.dentry))) {
1318 1319
		struct mount *mounted;
		mounted = __lookup_mnt(nd->path.mnt, nd->path.dentry);
1320 1321
		if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
			return -ECHILD;
1322 1323 1324 1325
		if (!mounted)
			break;
		nd->path.mnt = &mounted->mnt;
		nd->path.dentry = mounted->mnt.mnt_root;
1326
		inode = nd->path.dentry->d_inode;
1327 1328
		nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
	}
1329
	nd->inode = inode;
N
Nick Piggin 已提交
1330 1331 1332
	return 0;
}

1333 1334 1335 1336 1337
/*
 * 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.
 */
1338
int follow_down(struct path *path)
1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357
{
	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);
1358
			ret = path->dentry->d_op->d_manage(
1359
				path->dentry, false);
1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380
			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;
}
1381
EXPORT_SYMBOL(follow_down);
1382

1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398
/*
 * 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);
	}
}

N
Nick Piggin 已提交
1399
static void follow_dotdot(struct nameidata *nd)
L
Linus Torvalds 已提交
1400
{
1401 1402
	if (!nd->root.mnt)
		set_root(nd);
1403

L
Linus Torvalds 已提交
1404
	while(1) {
1405
		struct dentry *old = nd->path.dentry;
L
Linus Torvalds 已提交
1406

A
Al Viro 已提交
1407 1408
		if (nd->path.dentry == nd->root.dentry &&
		    nd->path.mnt == nd->root.mnt) {
L
Linus Torvalds 已提交
1409 1410
			break;
		}
1411
		if (nd->path.dentry != nd->path.mnt->mnt_root) {
A
Al Viro 已提交
1412 1413
			/* rare case of legitimate dget_parent()... */
			nd->path.dentry = dget_parent(nd->path.dentry);
L
Linus Torvalds 已提交
1414 1415 1416
			dput(old);
			break;
		}
A
Al Viro 已提交
1417
		if (!follow_up(&nd->path))
L
Linus Torvalds 已提交
1418 1419
			break;
	}
A
Al Viro 已提交
1420
	follow_mount(&nd->path);
N
Nick Piggin 已提交
1421
	nd->inode = nd->path.dentry->d_inode;
L
Linus Torvalds 已提交
1422 1423
}

1424
/*
M
Miklos Szeredi 已提交
1425 1426 1427 1428 1429
 * This looks up the name in dcache, possibly revalidates the old dentry and
 * allocates a new one if not found or not valid.  In the need_lookup argument
 * returns whether i_op->lookup is necessary.
 *
 * dir->d_inode->i_mutex must be held
1430
 */
M
Miklos Szeredi 已提交
1431
static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir,
1432
				    unsigned int flags, bool *need_lookup)
1433 1434
{
	struct dentry *dentry;
M
Miklos Szeredi 已提交
1435
	int error;
1436

M
Miklos Szeredi 已提交
1437 1438 1439
	*need_lookup = false;
	dentry = d_lookup(dir, name);
	if (dentry) {
J
Jeff Layton 已提交
1440
		if (dentry->d_flags & DCACHE_OP_REVALIDATE) {
1441
			error = d_revalidate(dentry, flags);
M
Miklos Szeredi 已提交
1442 1443 1444 1445
			if (unlikely(error <= 0)) {
				if (error < 0) {
					dput(dentry);
					return ERR_PTR(error);
1446 1447
				} else {
					d_invalidate(dentry);
M
Miklos Szeredi 已提交
1448 1449 1450 1451 1452 1453
					dput(dentry);
					dentry = NULL;
				}
			}
		}
	}
1454

M
Miklos Szeredi 已提交
1455 1456 1457 1458
	if (!dentry) {
		dentry = d_alloc(dir, name);
		if (unlikely(!dentry))
			return ERR_PTR(-ENOMEM);
1459

M
Miklos Szeredi 已提交
1460
		*need_lookup = true;
1461 1462 1463 1464
	}
	return dentry;
}

1465
/*
1466 1467
 * Call i_op->lookup on the dentry.  The dentry must be negative and
 * unhashed.
M
Miklos Szeredi 已提交
1468 1469
 *
 * dir->d_inode->i_mutex must be held
1470
 */
M
Miklos Szeredi 已提交
1471
static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
1472
				  unsigned int flags)
1473 1474 1475 1476
{
	struct dentry *old;

	/* Don't create child dentry for a dead directory. */
M
Miklos Szeredi 已提交
1477
	if (unlikely(IS_DEADDIR(dir))) {
1478
		dput(dentry);
1479
		return ERR_PTR(-ENOENT);
1480
	}
1481

1482
	old = dir->i_op->lookup(dir, dentry, flags);
1483 1484 1485 1486 1487 1488 1489
	if (unlikely(old)) {
		dput(dentry);
		dentry = old;
	}
	return dentry;
}

1490
static struct dentry *__lookup_hash(struct qstr *name,
1491
		struct dentry *base, unsigned int flags)
1492
{
M
Miklos Szeredi 已提交
1493
	bool need_lookup;
1494 1495
	struct dentry *dentry;

1496
	dentry = lookup_dcache(name, base, flags, &need_lookup);
M
Miklos Szeredi 已提交
1497 1498
	if (!need_lookup)
		return dentry;
1499

1500
	return lookup_real(base->d_inode, dentry, flags);
1501 1502
}

L
Linus Torvalds 已提交
1503 1504 1505 1506 1507
/*
 *  It's more convoluted than I'd like it to be, but... it's still fairly
 *  small and for now I'd prefer to have fast path as straight as possible.
 *  It _is_ time-critical.
 */
A
Al Viro 已提交
1508
static int lookup_fast(struct nameidata *nd,
1509 1510
		       struct path *path, struct inode **inode,
		       unsigned *seqp)
L
Linus Torvalds 已提交
1511
{
1512
	struct vfsmount *mnt = nd->path.mnt;
N
Nick Piggin 已提交
1513
	struct dentry *dentry, *parent = nd->path.dentry;
A
Al Viro 已提交
1514 1515
	int need_reval = 1;
	int status = 1;
1516 1517
	int err;

1518 1519 1520 1521 1522
	/*
	 * Rename seqlock is not required here because in the off chance
	 * of a false negative due to a concurrent rename, we're going to
	 * do the non-racy lookup, below.
	 */
N
Nick Piggin 已提交
1523 1524
	if (nd->flags & LOOKUP_RCU) {
		unsigned seq;
1525
		bool negative;
1526
		dentry = __d_lookup_rcu(parent, &nd->last, &seq);
A
Al Viro 已提交
1527 1528 1529
		if (!dentry)
			goto unlazy;

1530 1531 1532 1533
		/*
		 * This sequence count validates that the inode matches
		 * the dentry name information from lookup.
		 */
1534
		*inode = d_backing_inode(dentry);
1535
		negative = d_is_negative(dentry);
1536 1537
		if (read_seqcount_retry(&dentry->d_seq, seq))
			return -ECHILD;
1538 1539
		if (negative)
			return -ENOENT;
1540 1541 1542 1543 1544 1545 1546 1547

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

1551
		*seqp = seq;
1552
		if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE)) {
1553
			status = d_revalidate(dentry, nd->flags);
A
Al Viro 已提交
1554 1555 1556 1557 1558
			if (unlikely(status <= 0)) {
				if (status != -ECHILD)
					need_reval = 0;
				goto unlazy;
			}
1559
		}
N
Nick Piggin 已提交
1560 1561
		path->mnt = mnt;
		path->dentry = dentry;
1562
		if (likely(__follow_mount_rcu(nd, path, inode, seqp)))
1563
			return 0;
A
Al Viro 已提交
1564
unlazy:
1565
		if (unlazy_walk(nd, dentry, seq))
A
Al Viro 已提交
1566
			return -ECHILD;
A
Al Viro 已提交
1567
	} else {
A
Al Viro 已提交
1568
		dentry = __d_lookup(parent, &nd->last);
1569
	}
A
Al Viro 已提交
1570

1571 1572 1573
	if (unlikely(!dentry))
		goto need_lookup;

A
Al Viro 已提交
1574
	if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval)
1575
		status = d_revalidate(dentry, nd->flags);
A
Al Viro 已提交
1576 1577 1578 1579 1580
	if (unlikely(status <= 0)) {
		if (status < 0) {
			dput(dentry);
			return status;
		}
1581 1582 1583
		d_invalidate(dentry);
		dput(dentry);
		goto need_lookup;
1584
	}
M
Miklos Szeredi 已提交
1585

1586 1587 1588 1589
	if (unlikely(d_is_negative(dentry))) {
		dput(dentry);
		return -ENOENT;
	}
1590 1591
	path->mnt = mnt;
	path->dentry = dentry;
1592
	err = follow_managed(path, nd);
1593
	if (likely(!err))
1594
		*inode = d_backing_inode(path->dentry);
1595
	return err;
1596 1597

need_lookup:
M
Miklos Szeredi 已提交
1598 1599 1600 1601
	return 1;
}

/* Fast lookup failed, do it the slow way */
A
Al Viro 已提交
1602
static int lookup_slow(struct nameidata *nd, struct path *path)
M
Miklos Szeredi 已提交
1603 1604 1605 1606
{
	struct dentry *dentry, *parent;

	parent = nd->path.dentry;
1607 1608 1609
	BUG_ON(nd->inode != parent->d_inode);

	mutex_lock(&parent->d_inode->i_mutex);
A
Al Viro 已提交
1610
	dentry = __lookup_hash(&nd->last, parent, nd->flags);
1611 1612 1613
	mutex_unlock(&parent->d_inode->i_mutex);
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);
M
Miklos Szeredi 已提交
1614 1615
	path->mnt = nd->path.mnt;
	path->dentry = dentry;
1616
	return follow_managed(path, nd);
L
Linus Torvalds 已提交
1617 1618
}

1619 1620 1621
static inline int may_lookup(struct nameidata *nd)
{
	if (nd->flags & LOOKUP_RCU) {
1622
		int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1623 1624
		if (err != -ECHILD)
			return err;
1625
		if (unlazy_walk(nd, NULL, 0))
1626 1627
			return -ECHILD;
	}
1628
	return inode_permission(nd->inode, MAY_EXEC);
1629 1630
}

1631 1632 1633 1634
static inline int handle_dots(struct nameidata *nd, int type)
{
	if (type == LAST_DOTDOT) {
		if (nd->flags & LOOKUP_RCU) {
1635
			return follow_dotdot_rcu(nd);
1636 1637 1638 1639 1640 1641
		} else
			follow_dotdot(nd);
	}
	return 0;
}

1642 1643
static int pick_link(struct nameidata *nd, struct path *link,
		     struct inode *inode, unsigned seq)
1644
{
1645
	int error;
A
Al Viro 已提交
1646
	struct saved *last;
1647
	if (unlikely(nd->total_link_count++ >= MAXSYMLINKS)) {
1648 1649 1650
		path_to_nameidata(link, nd);
		return -ELOOP;
	}
A
Al Viro 已提交
1651
	if (!(nd->flags & LOOKUP_RCU)) {
1652 1653
		if (link->mnt == nd->path.mnt)
			mntget(link->mnt);
1654
	}
1655 1656
	error = nd_alloc_stack(nd);
	if (unlikely(error)) {
A
Al Viro 已提交
1657 1658 1659 1660 1661 1662 1663 1664 1665
		if (error == -ECHILD) {
			if (unlikely(unlazy_link(nd, link, seq)))
				return -ECHILD;
			error = nd_alloc_stack(nd);
		}
		if (error) {
			path_put(link);
			return error;
		}
1666 1667
	}

1668
	last = nd->stack + nd->depth++;
A
Al Viro 已提交
1669
	last->link = *link;
1670
	last->cookie = NULL;
1671
	last->inode = inode;
1672
	last->seq = seq;
1673 1674 1675
	return 1;
}

1676 1677 1678 1679 1680 1681
/*
 * 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.
 */
1682
static inline int should_follow_link(struct nameidata *nd, struct path *link,
1683 1684
				     int follow,
				     struct inode *inode, unsigned seq)
1685
{
1686 1687 1688 1689
	if (likely(!d_is_symlink(link->dentry)))
		return 0;
	if (!follow)
		return 0;
1690
	return pick_link(nd, link, inode, seq);
1691 1692
}

1693 1694 1695
enum {WALK_GET = 1, WALK_PUT = 2};

static int walk_component(struct nameidata *nd, int flags)
1696
{
A
Al Viro 已提交
1697
	struct path path;
1698
	struct inode *inode;
1699
	unsigned seq;
1700 1701 1702 1703 1704 1705
	int err;
	/*
	 * "." and ".." are special - ".." especially so because it has
	 * to be able to know about the current root directory and
	 * parent relationships.
	 */
1706 1707 1708 1709 1710 1711
	if (unlikely(nd->last_type != LAST_NORM)) {
		err = handle_dots(nd, nd->last_type);
		if (flags & WALK_PUT)
			put_link(nd);
		return err;
	}
1712
	err = lookup_fast(nd, &path, &inode, &seq);
1713
	if (unlikely(err)) {
M
Miklos Szeredi 已提交
1714
		if (err < 0)
1715
			return err;
M
Miklos Szeredi 已提交
1716

A
Al Viro 已提交
1717
		err = lookup_slow(nd, &path);
M
Miklos Szeredi 已提交
1718
		if (err < 0)
1719
			return err;
M
Miklos Szeredi 已提交
1720

1721
		inode = d_backing_inode(path.dentry);
1722
		seq = 0;	/* we are already out of RCU mode */
1723
		err = -ENOENT;
A
Al Viro 已提交
1724
		if (d_is_negative(path.dentry))
1725
			goto out_path_put;
1726
	}
M
Miklos Szeredi 已提交
1727

1728 1729
	if (flags & WALK_PUT)
		put_link(nd);
1730
	err = should_follow_link(nd, &path, flags & WALK_GET, inode, seq);
1731 1732
	if (unlikely(err))
		return err;
A
Al Viro 已提交
1733
	path_to_nameidata(&path, nd);
1734
	nd->inode = inode;
1735
	nd->seq = seq;
1736
	return 0;
M
Miklos Szeredi 已提交
1737 1738

out_path_put:
A
Al Viro 已提交
1739
	path_to_nameidata(&path, nd);
M
Miklos Szeredi 已提交
1740
	return err;
1741 1742
}

1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761
/*
 * 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

1762
#include <asm/word-at-a-time.h>
1763

1764
#ifdef CONFIG_64BIT
1765 1766 1767

static inline unsigned int fold_hash(unsigned long hash)
{
1768
	return hash_64(hash, 32);
1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782
}

#else	/* 32-bit case */

#define fold_hash(x) (x)

#endif

unsigned int full_name_hash(const unsigned char *name, unsigned int len)
{
	unsigned long a, mask;
	unsigned long hash = 0;

	for (;;) {
1783
		a = load_unaligned_zeropad(name);
1784 1785 1786
		if (len < sizeof(unsigned long))
			break;
		hash += a;
1787
		hash *= 9;
1788 1789 1790 1791 1792
		name += sizeof(unsigned long);
		len -= sizeof(unsigned long);
		if (!len)
			goto done;
	}
1793
	mask = bytemask_from_count(len);
1794 1795 1796 1797 1798 1799 1800 1801
	hash += mask & a;
done:
	return fold_hash(hash);
}
EXPORT_SYMBOL(full_name_hash);

/*
 * Calculate the length and hash of the path component, and
1802
 * return the "hash_len" as the result.
1803
 */
1804
static inline u64 hash_name(const char *name)
1805
{
1806 1807
	unsigned long a, b, adata, bdata, mask, hash, len;
	const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
1808 1809 1810 1811 1812 1813

	hash = a = 0;
	len = -sizeof(unsigned long);
	do {
		hash = (hash + a) * 9;
		len += sizeof(unsigned long);
1814
		a = load_unaligned_zeropad(name+len);
1815 1816 1817 1818 1819 1820 1821 1822 1823
		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);

	hash += a & zero_bytemask(mask);
1824
	len += find_zero(mask);
1825
	return hashlen_create(fold_hash(hash), len);
1826 1827 1828 1829
}

#else

L
Linus Torvalds 已提交
1830 1831 1832 1833 1834 1835 1836
unsigned int full_name_hash(const unsigned char *name, unsigned int len)
{
	unsigned long hash = init_name_hash();
	while (len--)
		hash = partial_name_hash(*name++, hash);
	return end_name_hash(hash);
}
1837
EXPORT_SYMBOL(full_name_hash);
L
Linus Torvalds 已提交
1838

1839 1840 1841 1842
/*
 * We know there's a real path component here of at least
 * one character.
 */
1843
static inline u64 hash_name(const char *name)
1844 1845 1846 1847 1848 1849 1850 1851 1852 1853
{
	unsigned long hash = init_name_hash();
	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 != '/');
1854
	return hashlen_create(end_name_hash(hash), len);
1855 1856
}

1857 1858
#endif

L
Linus Torvalds 已提交
1859 1860
/*
 * Name resolution.
1861 1862
 * 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 已提交
1863
 *
1864 1865
 * 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 已提交
1866
 */
1867
static int link_path_walk(const char *name, struct nameidata *nd)
L
Linus Torvalds 已提交
1868 1869
{
	int err;
A
Al Viro 已提交
1870

L
Linus Torvalds 已提交
1871 1872 1873
	while (*name=='/')
		name++;
	if (!*name)
1874
		return 0;
L
Linus Torvalds 已提交
1875 1876 1877

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

1881
		err = may_lookup(nd);
L
Linus Torvalds 已提交
1882
 		if (err)
1883
			return err;
L
Linus Torvalds 已提交
1884

1885
		hash_len = hash_name(name);
L
Linus Torvalds 已提交
1886

A
Al Viro 已提交
1887
		type = LAST_NORM;
1888
		if (name[0] == '.') switch (hashlen_len(hash_len)) {
A
Al Viro 已提交
1889
			case 2:
1890
				if (name[1] == '.') {
A
Al Viro 已提交
1891
					type = LAST_DOTDOT;
A
Al Viro 已提交
1892 1893
					nd->flags |= LOOKUP_JUMPED;
				}
A
Al Viro 已提交
1894 1895 1896 1897
				break;
			case 1:
				type = LAST_DOT;
		}
1898 1899
		if (likely(type == LAST_NORM)) {
			struct dentry *parent = nd->path.dentry;
A
Al Viro 已提交
1900
			nd->flags &= ~LOOKUP_JUMPED;
1901
			if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
1902
				struct qstr this = { { .hash_len = hash_len }, .name = name };
1903
				err = parent->d_op->d_hash(parent, &this);
1904
				if (err < 0)
1905
					return err;
1906 1907
				hash_len = this.hash_len;
				name = this.name;
1908 1909
			}
		}
A
Al Viro 已提交
1910

1911 1912
		nd->last.hash_len = hash_len;
		nd->last.name = name;
1913 1914
		nd->last_type = type;

1915 1916
		name += hashlen_len(hash_len);
		if (!*name)
1917
			goto OK;
1918 1919 1920 1921 1922
		/*
		 * If it wasn't NUL, we know it was '/'. Skip that
		 * slash, and continue until no more slashes.
		 */
		do {
1923 1924
			name++;
		} while (unlikely(*name == '/'));
1925 1926
		if (unlikely(!*name)) {
OK:
1927
			/* pathname body, done */
1928 1929 1930
			if (!nd->depth)
				return 0;
			name = nd->stack[nd->depth - 1].name;
1931
			/* trailing symlink, done */
1932 1933 1934
			if (!name)
				return 0;
			/* last component of nested symlink */
1935
			err = walk_component(nd, WALK_GET | WALK_PUT);
1936
		} else {
1937
			err = walk_component(nd, WALK_GET);
1938
		}
1939
		if (err < 0)
1940
			return err;
L
Linus Torvalds 已提交
1941

1942
		if (err) {
1943
			const char *s = get_link(nd);
1944

1945 1946
			if (unlikely(IS_ERR(s)))
				return PTR_ERR(s);
1947 1948 1949
			err = 0;
			if (unlikely(!s)) {
				/* jumped */
1950
				put_link(nd);
1951
			} else {
1952 1953 1954
				nd->stack[nd->depth - 1].name = name;
				name = s;
				continue;
1955
			}
N
Nick Piggin 已提交
1956
		}
1957 1958
		if (unlikely(!d_can_lookup(nd->path.dentry)))
			return -ENOTDIR;
L
Linus Torvalds 已提交
1959 1960 1961
	}
}

1962
static const char *path_init(struct nameidata *nd, unsigned flags)
N
Nick Piggin 已提交
1963 1964
{
	int retval = 0;
1965
	const char *s = nd->name->name;
N
Nick Piggin 已提交
1966 1967

	nd->last_type = LAST_ROOT; /* if there are only slashes... */
1968
	nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
N
Nick Piggin 已提交
1969
	nd->depth = 0;
1970
	nd->total_link_count = 0;
1971
	if (flags & LOOKUP_ROOT) {
1972 1973
		struct dentry *root = nd->root.dentry;
		struct inode *inode = root->d_inode;
A
Al Viro 已提交
1974
		if (*s) {
M
Miklos Szeredi 已提交
1975
			if (!d_can_lookup(root))
1976
				return ERR_PTR(-ENOTDIR);
A
Al Viro 已提交
1977 1978
			retval = inode_permission(inode, MAY_EXEC);
			if (retval)
1979
				return ERR_PTR(retval);
A
Al Viro 已提交
1980
		}
1981 1982 1983
		nd->path = nd->root;
		nd->inode = inode;
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
1984
			rcu_read_lock();
1985
			nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
1986
			nd->root_seq = nd->seq;
A
Al Viro 已提交
1987
			nd->m_seq = read_seqbegin(&mount_lock);
1988 1989 1990
		} else {
			path_get(&nd->path);
		}
1991
		return s;
1992 1993
	}

N
Nick Piggin 已提交
1994 1995
	nd->root.mnt = NULL;

A
Al Viro 已提交
1996
	nd->m_seq = read_seqbegin(&mount_lock);
A
Al Viro 已提交
1997
	if (*s == '/') {
A
Al Viro 已提交
1998
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
1999
			rcu_read_lock();
2000
			nd->seq = set_root_rcu(nd);
A
Al Viro 已提交
2001 2002 2003 2004 2005
		} else {
			set_root(nd);
			path_get(&nd->root);
		}
		nd->path = nd->root;
2006
	} else if (nd->dfd == AT_FDCWD) {
A
Al Viro 已提交
2007 2008 2009
		if (flags & LOOKUP_RCU) {
			struct fs_struct *fs = current->fs;
			unsigned seq;
N
Nick Piggin 已提交
2010

A
Al Viro 已提交
2011
			rcu_read_lock();
N
Nick Piggin 已提交
2012

A
Al Viro 已提交
2013 2014 2015 2016 2017 2018 2019 2020
			do {
				seq = read_seqcount_begin(&fs->seq);
				nd->path = fs->pwd;
				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);
		}
N
Nick Piggin 已提交
2021
	} else {
2022
		/* Caller must check execute permissions on the starting path component */
2023
		struct fd f = fdget_raw(nd->dfd);
N
Nick Piggin 已提交
2024 2025
		struct dentry *dentry;

2026
		if (!f.file)
2027
			return ERR_PTR(-EBADF);
N
Nick Piggin 已提交
2028

2029
		dentry = f.file->f_path.dentry;
N
Nick Piggin 已提交
2030

A
Al Viro 已提交
2031
		if (*s) {
M
Miklos Szeredi 已提交
2032
			if (!d_can_lookup(dentry)) {
2033
				fdput(f);
2034
				return ERR_PTR(-ENOTDIR);
2035
			}
A
Al Viro 已提交
2036
		}
N
Nick Piggin 已提交
2037

2038
		nd->path = f.file->f_path;
A
Al Viro 已提交
2039
		if (flags & LOOKUP_RCU) {
A
Al Viro 已提交
2040
			rcu_read_lock();
A
Al Viro 已提交
2041 2042
			nd->inode = nd->path.dentry->d_inode;
			nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
A
Al Viro 已提交
2043
		} else {
2044
			path_get(&nd->path);
A
Al Viro 已提交
2045
			nd->inode = nd->path.dentry->d_inode;
A
Al Viro 已提交
2046
		}
A
Al Viro 已提交
2047
		fdput(f);
2048
		return s;
N
Nick Piggin 已提交
2049 2050 2051
	}

	nd->inode = nd->path.dentry->d_inode;
2052
	if (!(flags & LOOKUP_RCU))
2053
		return s;
2054
	if (likely(!read_seqcount_retry(&nd->path.dentry->d_seq, nd->seq)))
2055
		return s;
2056 2057 2058
	if (!(nd->flags & LOOKUP_ROOT))
		nd->root.mnt = NULL;
	rcu_read_unlock();
2059
	return ERR_PTR(-ECHILD);
2060 2061
}

2062
static const char *trailing_symlink(struct nameidata *nd)
2063 2064
{
	const char *s;
A
Al Viro 已提交
2065
	int error = may_follow_link(nd);
2066
	if (unlikely(error))
2067
		return ERR_PTR(error);
2068
	nd->flags |= LOOKUP_PARENT;
2069
	nd->stack[0].name = NULL;
2070
	s = get_link(nd);
2071
	return s ? s : "";
2072 2073
}

A
Al Viro 已提交
2074
static inline int lookup_last(struct nameidata *nd)
2075 2076 2077 2078 2079
{
	if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
		nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;

	nd->flags &= ~LOOKUP_PARENT;
2080
	return walk_component(nd,
2081 2082 2083 2084 2085
			nd->flags & LOOKUP_FOLLOW
				? nd->depth
					? WALK_PUT | WALK_GET
					: WALK_GET
				: 0);
2086 2087
}

2088
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2089
static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path)
2090
{
2091
	const char *s = path_init(nd, flags);
2092
	int err;
N
Nick Piggin 已提交
2093

2094 2095
	if (IS_ERR(s))
		return PTR_ERR(s);
2096 2097 2098 2099 2100 2101
	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;
2102 2103
		}
	}
2104 2105
	if (!err)
		err = complete_walk(nd);
2106

2107 2108
	if (!err && nd->flags & LOOKUP_DIRECTORY)
		if (!d_can_lookup(nd->path.dentry))
A
Al Viro 已提交
2109
			err = -ENOTDIR;
2110 2111 2112 2113 2114 2115
	if (!err) {
		*path = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2116
	return err;
A
Al Viro 已提交
2117
}
N
Nick Piggin 已提交
2118

2119
static int filename_lookup(int dfd, struct filename *name, unsigned flags,
2120
			   struct path *path, struct path *root)
A
Al Viro 已提交
2121
{
2122
	int retval;
2123 2124 2125
	struct nameidata nd, *saved_nd;
	if (IS_ERR(name))
		return PTR_ERR(name);
2126
	saved_nd = set_nameidata(&nd, dfd, name);
2127 2128 2129 2130
	if (unlikely(root)) {
		nd.root = *root;
		flags |= LOOKUP_ROOT;
	}
2131
	retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2132
	if (unlikely(retval == -ECHILD))
2133
		retval = path_lookupat(&nd, flags, path);
A
Al Viro 已提交
2134
	if (unlikely(retval == -ESTALE))
2135
		retval = path_lookupat(&nd, flags | LOOKUP_REVAL, path);
N
Nick Piggin 已提交
2136

2137
	if (likely(!retval))
2138
		audit_inode(name, path->dentry, flags & LOOKUP_PARENT);
2139
	restore_nameidata(saved_nd);
2140
	putname(name);
2141
	return retval;
L
Linus Torvalds 已提交
2142 2143
}

2144
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
2145
static int path_parentat(struct nameidata *nd, unsigned flags,
2146
				struct path *parent)
2147
{
2148
	const char *s = path_init(nd, flags);
2149 2150 2151 2152
	int err;
	if (IS_ERR(s))
		return PTR_ERR(s);
	err = link_path_walk(s, nd);
2153 2154
	if (!err)
		err = complete_walk(nd);
2155 2156 2157 2158 2159 2160
	if (!err) {
		*parent = nd->path;
		nd->path.mnt = NULL;
		nd->path.dentry = NULL;
	}
	terminate_walk(nd);
2161 2162 2163
	return err;
}

2164
static struct filename *filename_parentat(int dfd, struct filename *name,
2165 2166
				unsigned int flags, struct path *parent,
				struct qstr *last, int *type)
2167 2168
{
	int retval;
2169
	struct nameidata nd, *saved_nd;
2170

2171 2172
	if (IS_ERR(name))
		return name;
2173 2174
	saved_nd = set_nameidata(&nd, dfd, name);
	retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
2175
	if (unlikely(retval == -ECHILD))
2176
		retval = path_parentat(&nd, flags, parent);
2177
	if (unlikely(retval == -ESTALE))
2178
		retval = path_parentat(&nd, flags | LOOKUP_REVAL, parent);
2179 2180 2181 2182
	if (likely(!retval)) {
		*last = nd.last;
		*type = nd.last_type;
		audit_inode(name, parent->dentry, LOOKUP_PARENT);
2183 2184 2185
	} else {
		putname(name);
		name = ERR_PTR(retval);
2186
	}
2187
	restore_nameidata(saved_nd);
2188
	return name;
2189 2190
}

A
Al Viro 已提交
2191 2192
/* does lookup, returns the object with parent locked */
struct dentry *kern_path_locked(const char *name, struct path *path)
2193
{
2194 2195
	struct filename *filename;
	struct dentry *d;
2196 2197
	struct qstr last;
	int type;
2198

2199 2200
	filename = filename_parentat(AT_FDCWD, getname_kernel(name), 0, path,
				    &last, &type);
2201 2202
	if (IS_ERR(filename))
		return ERR_CAST(filename);
2203
	if (unlikely(type != LAST_NORM)) {
2204
		path_put(path);
2205 2206
		putname(filename);
		return ERR_PTR(-EINVAL);
A
Al Viro 已提交
2207
	}
2208 2209
	mutex_lock_nested(&path->dentry->d_inode->i_mutex, I_MUTEX_PARENT);
	d = __lookup_hash(&last, path->dentry, 0);
A
Al Viro 已提交
2210
	if (IS_ERR(d)) {
2211 2212
		mutex_unlock(&path->dentry->d_inode->i_mutex);
		path_put(path);
A
Al Viro 已提交
2213
	}
2214
	putname(filename);
A
Al Viro 已提交
2215
	return d;
2216 2217
}

A
Al Viro 已提交
2218 2219
int kern_path(const char *name, unsigned int flags, struct path *path)
{
2220 2221
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags, path, NULL);
A
Al Viro 已提交
2222
}
2223
EXPORT_SYMBOL(kern_path);
A
Al Viro 已提交
2224

2225 2226 2227 2228 2229 2230
/**
 * 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
2231
 * @path: pointer to struct path to fill
2232 2233 2234
 */
int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
		    const char *name, unsigned int flags,
2235
		    struct path *path)
2236
{
2237 2238
	struct path root = {.mnt = mnt, .dentry = dentry};
	/* the first argument of filename_lookup() is ignored with root */
2239 2240
	return filename_lookup(AT_FDCWD, getname_kernel(name),
			       flags , path, &root);
2241
}
2242
EXPORT_SYMBOL(vfs_path_lookup);
2243

2244
/**
2245
 * lookup_one_len - filesystem helper to lookup single pathname component
2246 2247 2248 2249
 * @name:	pathname component to lookup
 * @base:	base directory to lookup from
 * @len:	maximum length @len should be interpreted to
 *
2250
 * Note that this routine is purely a helper for filesystem usage and should
2251
 * not be called by generic code.
2252
 */
2253 2254 2255
struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
{
	struct qstr this;
A
Al Viro 已提交
2256
	unsigned int c;
2257
	int err;
2258

2259 2260
	WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));

A
Al Viro 已提交
2261 2262
	this.name = name;
	this.len = len;
L
Linus Torvalds 已提交
2263
	this.hash = full_name_hash(name, len);
A
Al Viro 已提交
2264 2265 2266
	if (!len)
		return ERR_PTR(-EACCES);

A
Al Viro 已提交
2267 2268 2269 2270 2271
	if (unlikely(name[0] == '.')) {
		if (len < 2 || (len == 2 && name[1] == '.'))
			return ERR_PTR(-EACCES);
	}

A
Al Viro 已提交
2272 2273 2274 2275 2276
	while (len--) {
		c = *(const unsigned char *)name++;
		if (c == '/' || c == '\0')
			return ERR_PTR(-EACCES);
	}
2277 2278 2279 2280 2281
	/*
	 * See if the low-level filesystem might want
	 * to use its own hash..
	 */
	if (base->d_flags & DCACHE_OP_HASH) {
2282
		int err = base->d_op->d_hash(base, &this);
2283 2284 2285
		if (err < 0)
			return ERR_PTR(err);
	}
2286

2287 2288 2289 2290
	err = inode_permission(base->d_inode, MAY_EXEC);
	if (err)
		return ERR_PTR(err);

2291
	return __lookup_hash(&this, base, 0);
2292
}
2293
EXPORT_SYMBOL(lookup_one_len);
2294

2295 2296
int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
		 struct path *path, int *empty)
L
Linus Torvalds 已提交
2297
{
2298 2299
	return filename_lookup(dfd, getname_flags(name, flags, empty),
			       flags, path, NULL);
L
Linus Torvalds 已提交
2300 2301
}

2302 2303 2304
int user_path_at(int dfd, const char __user *name, unsigned flags,
		 struct path *path)
{
2305
	return user_path_at_empty(dfd, name, flags, path, NULL);
2306
}
2307
EXPORT_SYMBOL(user_path_at);
2308

2309 2310 2311 2312 2313 2314
/*
 * 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 已提交
2315
static inline struct filename *
2316 2317 2318 2319
user_path_parent(int dfd, const char __user *path,
		 struct path *parent,
		 struct qstr *last,
		 int *type,
2320
		 unsigned int flags)
2321
{
2322
	/* only LOOKUP_REVAL is allowed in extra flags */
2323 2324
	return filename_parentat(dfd, getname(path), flags & LOOKUP_REVAL,
				 parent, last, type);
2325 2326
}

2327
/**
2328
 * mountpoint_last - look up last component for umount
2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354
 * @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
2355
mountpoint_last(struct nameidata *nd, struct path *path)
2356 2357 2358 2359 2360
{
	int error = 0;
	struct dentry *dentry;
	struct dentry *dir = nd->path.dentry;

2361 2362
	/* If we're in rcuwalk, drop out of it to handle last component */
	if (nd->flags & LOOKUP_RCU) {
2363
		if (unlazy_walk(nd, NULL, 0))
2364
			return -ECHILD;
2365 2366 2367 2368 2369 2370
	}

	nd->flags &= ~LOOKUP_PARENT;

	if (unlikely(nd->last_type != LAST_NORM)) {
		error = handle_dots(nd, nd->last_type);
2371
		if (error)
2372
			return error;
2373 2374
		dentry = dget(nd->path.dentry);
		goto done;
2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386
	}

	mutex_lock(&dir->d_inode->i_mutex);
	dentry = d_lookup(dir, &nd->last);
	if (!dentry) {
		/*
		 * 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 = d_alloc(dir, &nd->last);
		if (!dentry) {
2387
			mutex_unlock(&dir->d_inode->i_mutex);
2388
			return -ENOMEM;
2389
		}
2390
		dentry = lookup_real(dir->d_inode, dentry, nd->flags);
2391 2392
		if (IS_ERR(dentry)) {
			mutex_unlock(&dir->d_inode->i_mutex);
2393
			return PTR_ERR(dentry);
2394
		}
2395 2396 2397
	}
	mutex_unlock(&dir->d_inode->i_mutex);

2398
done:
2399
	if (d_is_negative(dentry)) {
2400
		dput(dentry);
2401
		return -ENOENT;
2402
	}
2403 2404
	if (nd->depth)
		put_link(nd);
2405
	path->dentry = dentry;
2406
	path->mnt = nd->path.mnt;
2407 2408
	error = should_follow_link(nd, path, nd->flags & LOOKUP_FOLLOW,
				   d_backing_inode(dentry), 0);
2409
	if (unlikely(error))
2410
		return error;
2411
	mntget(path->mnt);
2412
	follow_mount(path);
2413
	return 0;
2414 2415 2416
}

/**
2417
 * path_mountpoint - look up a path to be umounted
2418
 * @nameidata:	lookup context
2419
 * @flags:	lookup flags
2420
 * @path:	pointer to container for result
2421 2422
 *
 * Look up the given name, but don't attempt to revalidate the last component.
2423
 * Returns 0 and "path" will be valid on success; Returns error otherwise.
2424 2425
 */
static int
2426
path_mountpoint(struct nameidata *nd, unsigned flags, struct path *path)
2427
{
2428
	const char *s = path_init(nd, flags);
2429 2430 2431
	int err;
	if (IS_ERR(s))
		return PTR_ERR(s);
2432 2433 2434 2435 2436
	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);
2437
			break;
2438
		}
2439
	}
2440
	terminate_walk(nd);
2441 2442 2443
	return err;
}

A
Al Viro 已提交
2444
static int
2445
filename_mountpoint(int dfd, struct filename *name, struct path *path,
A
Al Viro 已提交
2446 2447
			unsigned int flags)
{
2448
	struct nameidata nd, *saved;
2449
	int error;
2450 2451
	if (IS_ERR(name))
		return PTR_ERR(name);
2452 2453
	saved = set_nameidata(&nd, dfd, name);
	error = path_mountpoint(&nd, flags | LOOKUP_RCU, path);
A
Al Viro 已提交
2454
	if (unlikely(error == -ECHILD))
2455
		error = path_mountpoint(&nd, flags, path);
A
Al Viro 已提交
2456
	if (unlikely(error == -ESTALE))
2457
		error = path_mountpoint(&nd, flags | LOOKUP_REVAL, path);
A
Al Viro 已提交
2458
	if (likely(!error))
2459
		audit_inode(name, path->dentry, 0);
2460
	restore_nameidata(saved);
2461
	putname(name);
A
Al Viro 已提交
2462 2463 2464
	return error;
}

2465
/**
2466
 * user_path_mountpoint_at - lookup a path from userland in order to umount it
2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479
 * @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
2480
user_path_mountpoint_at(int dfd, const char __user *name, unsigned int flags,
2481 2482
			struct path *path)
{
2483
	return filename_mountpoint(dfd, getname(name), path, flags);
2484 2485
}

A
Al Viro 已提交
2486 2487 2488 2489
int
kern_path_mountpoint(int dfd, const char *name, struct path *path,
			unsigned int flags)
{
2490
	return filename_mountpoint(dfd, getname_kernel(name), path, flags);
A
Al Viro 已提交
2491 2492 2493
}
EXPORT_SYMBOL(kern_path_mountpoint);

M
Miklos Szeredi 已提交
2494
int __check_sticky(struct inode *dir, struct inode *inode)
L
Linus Torvalds 已提交
2495
{
2496
	kuid_t fsuid = current_fsuid();
2497

2498
	if (uid_eq(inode->i_uid, fsuid))
L
Linus Torvalds 已提交
2499
		return 0;
2500
	if (uid_eq(dir->i_uid, fsuid))
L
Linus Torvalds 已提交
2501
		return 0;
2502
	return !capable_wrt_inode_uidgid(inode, CAP_FOWNER);
L
Linus Torvalds 已提交
2503
}
M
Miklos Szeredi 已提交
2504
EXPORT_SYMBOL(__check_sticky);
L
Linus Torvalds 已提交
2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524

/*
 *	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.
 *  7. If we were asked to remove a directory and victim isn't one - ENOTDIR.
 *  8. If we were asked to remove a non-directory and victim isn't one - EISDIR.
 *  9. We can't remove a root or mountpoint.
 * 10. We don't allow removal of NFS sillyrenamed files; it's handled by
 *     nfs_async_unlink().
 */
2525
static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
L
Linus Torvalds 已提交
2526
{
2527
	struct inode *inode = d_backing_inode(victim);
L
Linus Torvalds 已提交
2528 2529
	int error;

2530
	if (d_is_negative(victim))
L
Linus Torvalds 已提交
2531
		return -ENOENT;
2532
	BUG_ON(!inode);
L
Linus Torvalds 已提交
2533 2534

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

2537
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2538 2539 2540 2541
	if (error)
		return error;
	if (IS_APPEND(dir))
		return -EPERM;
2542 2543 2544

	if (check_sticky(dir, inode) || IS_APPEND(inode) ||
	    IS_IMMUTABLE(inode) || IS_SWAPFILE(inode))
L
Linus Torvalds 已提交
2545 2546
		return -EPERM;
	if (isdir) {
M
Miklos Szeredi 已提交
2547
		if (!d_is_dir(victim))
L
Linus Torvalds 已提交
2548 2549 2550
			return -ENOTDIR;
		if (IS_ROOT(victim))
			return -EBUSY;
M
Miklos Szeredi 已提交
2551
	} else if (d_is_dir(victim))
L
Linus Torvalds 已提交
2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567
		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())
 *  3. We should have write and exec permissions on dir
 *  4. We can't do it if dir is immutable (done in permission())
 */
2568
static inline int may_create(struct inode *dir, struct dentry *child)
L
Linus Torvalds 已提交
2569
{
2570
	audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
L
Linus Torvalds 已提交
2571 2572 2573 2574
	if (child->d_inode)
		return -EEXIST;
	if (IS_DEADDIR(dir))
		return -ENOENT;
2575
	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
L
Linus Torvalds 已提交
2576 2577 2578 2579 2580 2581 2582 2583 2584 2585
}

/*
 * 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) {
I
Ingo Molnar 已提交
2586
		mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
L
Linus Torvalds 已提交
2587 2588 2589
		return NULL;
	}

2590
	mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2591

2592 2593 2594 2595 2596
	p = d_ancestor(p2, p1);
	if (p) {
		mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT);
		mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD);
		return p;
L
Linus Torvalds 已提交
2597 2598
	}

2599 2600 2601 2602 2603
	p = d_ancestor(p1, p2);
	if (p) {
		mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
		mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
		return p;
L
Linus Torvalds 已提交
2604 2605
	}

I
Ingo Molnar 已提交
2606
	mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
2607
	mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT2);
L
Linus Torvalds 已提交
2608 2609
	return NULL;
}
2610
EXPORT_SYMBOL(lock_rename);
L
Linus Torvalds 已提交
2611 2612 2613

void unlock_rename(struct dentry *p1, struct dentry *p2)
{
2614
	mutex_unlock(&p1->d_inode->i_mutex);
L
Linus Torvalds 已提交
2615
	if (p1 != p2) {
2616
		mutex_unlock(&p2->d_inode->i_mutex);
2617
		mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
L
Linus Torvalds 已提交
2618 2619
	}
}
2620
EXPORT_SYMBOL(unlock_rename);
L
Linus Torvalds 已提交
2621

A
Al Viro 已提交
2622
int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
A
Al Viro 已提交
2623
		bool want_excl)
L
Linus Torvalds 已提交
2624
{
2625
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
2626 2627 2628
	if (error)
		return error;

A
Al Viro 已提交
2629
	if (!dir->i_op->create)
L
Linus Torvalds 已提交
2630 2631 2632 2633 2634 2635
		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 已提交
2636
	error = dir->i_op->create(dir, dentry, mode, want_excl);
2637
	if (!error)
2638
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
2639 2640
	return error;
}
2641
EXPORT_SYMBOL(vfs_create);
L
Linus Torvalds 已提交
2642

A
Al Viro 已提交
2643
static int may_open(struct path *path, int acc_mode, int flag)
L
Linus Torvalds 已提交
2644
{
2645
	struct dentry *dentry = path->dentry;
L
Linus Torvalds 已提交
2646 2647 2648
	struct inode *inode = dentry->d_inode;
	int error;

A
Al Viro 已提交
2649 2650 2651 2652
	/* O_PATH? */
	if (!acc_mode)
		return 0;

L
Linus Torvalds 已提交
2653 2654 2655
	if (!inode)
		return -ENOENT;

C
Christoph Hellwig 已提交
2656 2657
	switch (inode->i_mode & S_IFMT) {
	case S_IFLNK:
L
Linus Torvalds 已提交
2658
		return -ELOOP;
C
Christoph Hellwig 已提交
2659 2660 2661 2662 2663 2664
	case S_IFDIR:
		if (acc_mode & MAY_WRITE)
			return -EISDIR;
		break;
	case S_IFBLK:
	case S_IFCHR:
2665
		if (path->mnt->mnt_flags & MNT_NODEV)
L
Linus Torvalds 已提交
2666
			return -EACCES;
C
Christoph Hellwig 已提交
2667 2668 2669
		/*FALLTHRU*/
	case S_IFIFO:
	case S_IFSOCK:
L
Linus Torvalds 已提交
2670
		flag &= ~O_TRUNC;
C
Christoph Hellwig 已提交
2671
		break;
2672
	}
2673

2674
	error = inode_permission(inode, acc_mode);
2675 2676
	if (error)
		return error;
M
Mimi Zohar 已提交
2677

L
Linus Torvalds 已提交
2678 2679 2680 2681
	/*
	 * An append-only file must be opened in append mode for writing.
	 */
	if (IS_APPEND(inode)) {
2682
		if  ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
2683
			return -EPERM;
L
Linus Torvalds 已提交
2684
		if (flag & O_TRUNC)
2685
			return -EPERM;
L
Linus Torvalds 已提交
2686 2687 2688
	}

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

2692
	return 0;
2693
}
L
Linus Torvalds 已提交
2694

2695
static int handle_truncate(struct file *filp)
2696
{
2697
	struct path *path = &filp->f_path;
2698 2699 2700 2701 2702 2703 2704
	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.
	 */
2705
	error = locks_verify_locked(filp);
2706
	if (!error)
2707
		error = security_path_truncate(path);
2708 2709 2710
	if (!error) {
		error = do_truncate(path->dentry, 0,
				    ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
2711
				    filp);
2712 2713
	}
	put_write_access(inode);
M
Mimi Zohar 已提交
2714
	return error;
L
Linus Torvalds 已提交
2715 2716
}

2717 2718
static inline int open_to_namei_flags(int flag)
{
2719 2720
	if ((flag & O_ACCMODE) == 3)
		flag--;
2721 2722 2723
	return flag;
}

M
Miklos Szeredi 已提交
2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736
static int may_o_create(struct path *dir, struct dentry *dentry, umode_t mode)
{
	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);
}

2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749
/*
 * 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.
 */
2750 2751 2752
static int atomic_open(struct nameidata *nd, struct dentry *dentry,
			struct path *path, struct file *file,
			const struct open_flags *op,
2753
			bool got_write, bool need_lookup,
2754
			int *opened)
M
Miklos Szeredi 已提交
2755 2756 2757 2758 2759 2760 2761 2762
{
	struct inode *dir =  nd->path.dentry->d_inode;
	unsigned open_flag = open_to_namei_flags(op->open_flag);
	umode_t mode;
	int error;
	int acc_mode;
	int create_error = 0;
	struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
2763
	bool excl;
M
Miklos Szeredi 已提交
2764 2765 2766 2767 2768

	BUG_ON(dentry->d_inode);

	/* Don't create child dentry for a dead directory. */
	if (unlikely(IS_DEADDIR(dir))) {
2769
		error = -ENOENT;
M
Miklos Szeredi 已提交
2770 2771 2772
		goto out;
	}

2773
	mode = op->mode;
M
Miklos Szeredi 已提交
2774 2775 2776
	if ((open_flag & O_CREAT) && !IS_POSIXACL(dir))
		mode &= ~current_umask();

2777 2778
	excl = (open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT);
	if (excl)
M
Miklos Szeredi 已提交
2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789
		open_flag &= ~O_TRUNC;

	/*
	 * 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).
	 */
2790 2791 2792
	if (((open_flag & (O_CREAT | O_TRUNC)) ||
	    (open_flag & O_ACCMODE) != O_RDONLY) && unlikely(!got_write)) {
		if (!(open_flag & O_CREAT)) {
M
Miklos Szeredi 已提交
2793 2794 2795 2796 2797 2798 2799
			/*
			 * No O_CREATE -> atomicity not a requirement -> fall
			 * back to lookup + open
			 */
			goto no_open;
		} else if (open_flag & (O_EXCL | O_TRUNC)) {
			/* Fall back and fail with the right error */
2800
			create_error = -EROFS;
M
Miklos Szeredi 已提交
2801 2802 2803
			goto no_open;
		} else {
			/* No side effects, safe to clear O_CREAT */
2804
			create_error = -EROFS;
M
Miklos Szeredi 已提交
2805 2806 2807 2808 2809
			open_flag &= ~O_CREAT;
		}
	}

	if (open_flag & O_CREAT) {
2810
		error = may_o_create(&nd->path, dentry, mode);
M
Miklos Szeredi 已提交
2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821
		if (error) {
			create_error = error;
			if (open_flag & O_EXCL)
				goto no_open;
			open_flag &= ~O_CREAT;
		}
	}

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

A
Al Viro 已提交
2822 2823 2824
	file->f_path.dentry = DENTRY_NOT_SET;
	file->f_path.mnt = nd->path.mnt;
	error = dir->i_op->atomic_open(dir, dentry, file, open_flag, mode,
2825
				      opened);
A
Al Viro 已提交
2826 2827 2828
	if (error < 0) {
		if (create_error && error == -ENOENT)
			error = create_error;
M
Miklos Szeredi 已提交
2829 2830 2831
		goto out;
	}

A
Al Viro 已提交
2832
	if (error) {	/* returned 1, that is */
A
Al Viro 已提交
2833
		if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
2834
			error = -EIO;
M
Miklos Szeredi 已提交
2835 2836
			goto out;
		}
A
Al Viro 已提交
2837
		if (file->f_path.dentry) {
M
Miklos Szeredi 已提交
2838
			dput(dentry);
A
Al Viro 已提交
2839
			dentry = file->f_path.dentry;
M
Miklos Szeredi 已提交
2840
		}
2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853
		if (*opened & FILE_CREATED)
			fsnotify_create(dir, dentry);
		if (!dentry->d_inode) {
			WARN_ON(*opened & FILE_CREATED);
			if (create_error) {
				error = create_error;
				goto out;
			}
		} else {
			if (excl && !(*opened & FILE_CREATED)) {
				error = -EEXIST;
				goto out;
			}
2854
		}
M
Miklos Szeredi 已提交
2855 2856 2857 2858 2859 2860 2861
		goto looked_up;
	}

	/*
	 * We didn't have the inode before the open, so check open permission
	 * here.
	 */
2862 2863 2864 2865 2866 2867
	acc_mode = op->acc_mode;
	if (*opened & FILE_CREATED) {
		WARN_ON(!(open_flag & O_CREAT));
		fsnotify_create(dir, dentry);
		acc_mode = MAY_OPEN;
	}
2868 2869 2870
	error = may_open(&file->f_path, acc_mode, open_flag);
	if (error)
		fput(file);
M
Miklos Szeredi 已提交
2871 2872 2873

out:
	dput(dentry);
2874
	return error;
M
Miklos Szeredi 已提交
2875 2876 2877

no_open:
	if (need_lookup) {
2878
		dentry = lookup_real(dir, dentry, nd->flags);
M
Miklos Szeredi 已提交
2879
		if (IS_ERR(dentry))
2880
			return PTR_ERR(dentry);
M
Miklos Szeredi 已提交
2881 2882 2883 2884

		if (create_error) {
			int open_flag = op->open_flag;

2885
			error = create_error;
M
Miklos Szeredi 已提交
2886 2887 2888 2889 2890 2891
			if ((open_flag & O_EXCL)) {
				if (!dentry->d_inode)
					goto out;
			} else if (!dentry->d_inode) {
				goto out;
			} else if ((open_flag & O_TRUNC) &&
2892
				   d_is_reg(dentry)) {
M
Miklos Szeredi 已提交
2893 2894 2895 2896 2897 2898 2899 2900
				goto out;
			}
			/* will fail later, go on to get the right error */
		}
	}
looked_up:
	path->dentry = dentry;
	path->mnt = nd->path.mnt;
2901
	return 1;
M
Miklos Szeredi 已提交
2902 2903
}

M
Miklos Szeredi 已提交
2904
/*
2905
 * Look up and maybe create and open the last component.
M
Miklos Szeredi 已提交
2906 2907 2908
 *
 * Must be called with i_mutex held on parent.
 *
2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920
 * 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 已提交
2921
 */
2922 2923 2924
static int lookup_open(struct nameidata *nd, struct path *path,
			struct file *file,
			const struct open_flags *op,
2925
			bool got_write, int *opened)
M
Miklos Szeredi 已提交
2926 2927
{
	struct dentry *dir = nd->path.dentry;
2928
	struct inode *dir_inode = dir->d_inode;
M
Miklos Szeredi 已提交
2929 2930
	struct dentry *dentry;
	int error;
2931
	bool need_lookup;
M
Miklos Szeredi 已提交
2932

2933
	*opened &= ~FILE_CREATED;
2934
	dentry = lookup_dcache(&nd->last, dir, nd->flags, &need_lookup);
M
Miklos Szeredi 已提交
2935
	if (IS_ERR(dentry))
2936
		return PTR_ERR(dentry);
M
Miklos Szeredi 已提交
2937

M
Miklos Szeredi 已提交
2938 2939 2940 2941 2942
	/* Cached positive dentry: will open in f_op->open */
	if (!need_lookup && dentry->d_inode)
		goto out_no_open;

	if ((nd->flags & LOOKUP_OPEN) && dir_inode->i_op->atomic_open) {
2943
		return atomic_open(nd, dentry, path, file, op, got_write,
2944
				   need_lookup, opened);
M
Miklos Szeredi 已提交
2945 2946
	}

2947 2948 2949
	if (need_lookup) {
		BUG_ON(dentry->d_inode);

2950
		dentry = lookup_real(dir_inode, dentry, nd->flags);
2951
		if (IS_ERR(dentry))
2952
			return PTR_ERR(dentry);
2953 2954
	}

M
Miklos Szeredi 已提交
2955 2956 2957 2958 2959 2960 2961 2962 2963 2964
	/* Negative dentry, just create the file */
	if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
		umode_t mode = op->mode;
		if (!IS_POSIXACL(dir->d_inode))
			mode &= ~current_umask();
		/*
		 * This write is needed to ensure that a
		 * rw->ro transition does not occur between
		 * the time when the file is created and when
		 * a permanent write count is taken through
2965
		 * the 'struct file' in finish_open().
M
Miklos Szeredi 已提交
2966
		 */
2967 2968
		if (!got_write) {
			error = -EROFS;
M
Miklos Szeredi 已提交
2969
			goto out_dput;
2970
		}
2971
		*opened |= FILE_CREATED;
M
Miklos Szeredi 已提交
2972 2973 2974
		error = security_path_mknod(&nd->path, dentry, mode, 0);
		if (error)
			goto out_dput;
A
Al Viro 已提交
2975 2976
		error = vfs_create(dir->d_inode, dentry, mode,
				   nd->flags & LOOKUP_EXCL);
M
Miklos Szeredi 已提交
2977 2978 2979
		if (error)
			goto out_dput;
	}
M
Miklos Szeredi 已提交
2980
out_no_open:
M
Miklos Szeredi 已提交
2981 2982
	path->dentry = dentry;
	path->mnt = nd->path.mnt;
2983
	return 1;
M
Miklos Szeredi 已提交
2984 2985 2986

out_dput:
	dput(dentry);
2987
	return error;
M
Miklos Szeredi 已提交
2988 2989
}

N
Nick Piggin 已提交
2990
/*
2991
 * Handle the last step of open()
N
Nick Piggin 已提交
2992
 */
2993
static int do_last(struct nameidata *nd,
2994
		   struct file *file, const struct open_flags *op,
A
Al Viro 已提交
2995
		   int *opened)
2996
{
2997
	struct dentry *dir = nd->path.dentry;
2998
	int open_flag = op->open_flag;
M
Miklos Szeredi 已提交
2999
	bool will_truncate = (open_flag & O_TRUNC) != 0;
3000
	bool got_write = false;
A
Al Viro 已提交
3001
	int acc_mode = op->acc_mode;
3002
	unsigned seq;
3003
	struct inode *inode;
3004
	struct path save_parent = { .dentry = NULL, .mnt = NULL };
3005
	struct path path;
3006
	bool retried = false;
A
Al Viro 已提交
3007
	int error;
3008

3009 3010 3011
	nd->flags &= ~LOOKUP_PARENT;
	nd->flags |= op->intent;

3012
	if (nd->last_type != LAST_NORM) {
3013
		error = handle_dots(nd, nd->last_type);
3014
		if (unlikely(error))
3015
			return error;
M
Miklos Szeredi 已提交
3016
		goto finish_open;
3017
	}
3018

3019
	if (!(open_flag & O_CREAT)) {
3020 3021 3022
		if (nd->last.name[nd->last.len])
			nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
		/* we _can_ be in RCU mode here */
3023
		error = lookup_fast(nd, &path, &inode, &seq);
3024 3025 3026 3027
		if (likely(!error))
			goto finish_lookup;

		if (error < 0)
3028
			return error;
3029 3030

		BUG_ON(nd->inode != dir->d_inode);
3031 3032 3033 3034 3035 3036 3037 3038
	} 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);
3039
		if (error)
3040
			return error;
3041

A
Al Viro 已提交
3042
		audit_inode(nd->name, dir, LOOKUP_PARENT);
3043
		/* trailing slashes? */
3044 3045
		if (unlikely(nd->last.name[nd->last.len]))
			return -EISDIR;
3046
	}
A
Al Viro 已提交
3047

3048
retry_lookup:
3049 3050 3051 3052 3053 3054 3055 3056 3057 3058
	if (op->open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
		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.
		 */
	}
3059
	mutex_lock(&dir->d_inode->i_mutex);
3060
	error = lookup_open(nd, &path, file, op, got_write, opened);
M
Miklos Szeredi 已提交
3061
	mutex_unlock(&dir->d_inode->i_mutex);
3062

3063 3064
	if (error <= 0) {
		if (error)
M
Miklos Szeredi 已提交
3065 3066
			goto out;

3067
		if ((*opened & FILE_CREATED) ||
A
Al Viro 已提交
3068
		    !S_ISREG(file_inode(file)->i_mode))
M
Miklos Szeredi 已提交
3069
			will_truncate = false;
M
Miklos Szeredi 已提交
3070

A
Al Viro 已提交
3071
		audit_inode(nd->name, file->f_path.dentry, 0);
M
Miklos Szeredi 已提交
3072 3073
		goto opened;
	}
3074

3075
	if (*opened & FILE_CREATED) {
3076
		/* Don't check for write permission, don't truncate */
3077
		open_flag &= ~O_TRUNC;
M
Miklos Szeredi 已提交
3078
		will_truncate = false;
A
Al Viro 已提交
3079
		acc_mode = MAY_OPEN;
3080
		path_to_nameidata(&path, nd);
M
Miklos Szeredi 已提交
3081
		goto finish_open_created;
3082 3083 3084
	}

	/*
3085
	 * create/update audit record if it already exists.
3086
	 */
3087
	if (d_is_positive(path.dentry))
A
Al Viro 已提交
3088
		audit_inode(nd->name, path.dentry, 0);
3089

M
Miklos Szeredi 已提交
3090 3091 3092 3093 3094
	/*
	 * If atomic_open() acquired write access it is dropped now due to
	 * possible mount and symlink following (this might be optimized away if
	 * necessary...)
	 */
3095
	if (got_write) {
M
Miklos Szeredi 已提交
3096
		mnt_drop_write(nd->path.mnt);
3097
		got_write = false;
M
Miklos Szeredi 已提交
3098 3099
	}

3100 3101 3102 3103
	if (unlikely((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))) {
		path_to_nameidata(&path, nd);
		return -EEXIST;
	}
3104

3105
	error = follow_managed(&path, nd);
3106 3107
	if (unlikely(error < 0))
		return error;
3108

3109
	BUG_ON(nd->flags & LOOKUP_RCU);
3110
	inode = d_backing_inode(path.dentry);
3111
	seq = 0;	/* out of RCU mode, so the value doesn't matter */
3112
	if (unlikely(d_is_negative(path.dentry))) {
3113
		path_to_nameidata(&path, nd);
3114
		return -ENOENT;
3115
	}
3116
finish_lookup:
3117 3118
	if (nd->depth)
		put_link(nd);
3119 3120
	error = should_follow_link(nd, &path, nd->flags & LOOKUP_FOLLOW,
				   inode, seq);
3121
	if (unlikely(error))
3122
		return error;
3123

3124 3125
	if (unlikely(d_is_symlink(path.dentry)) && !(open_flag & O_PATH)) {
		path_to_nameidata(&path, nd);
3126
		return -ELOOP;
3127 3128
	}

3129 3130
	if ((nd->flags & LOOKUP_RCU) || nd->path.mnt != path.mnt) {
		path_to_nameidata(&path, nd);
3131 3132
	} else {
		save_parent.dentry = nd->path.dentry;
3133 3134
		save_parent.mnt = mntget(path.mnt);
		nd->path.dentry = path.dentry;
3135 3136

	}
3137
	nd->inode = inode;
3138
	nd->seq = seq;
3139
	/* Why this, you ask?  _Now_ we might have grown LOOKUP_JUMPED... */
3140
finish_open:
3141
	error = complete_walk(nd);
3142 3143
	if (error) {
		path_put(&save_parent);
3144
		return error;
3145
	}
A
Al Viro 已提交
3146
	audit_inode(nd->name, nd->path.dentry, 0);
3147
	error = -EISDIR;
M
Miklos Szeredi 已提交
3148
	if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
3149
		goto out;
3150
	error = -ENOTDIR;
M
Miklos Szeredi 已提交
3151
	if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry))
3152
		goto out;
3153
	if (!d_is_reg(nd->path.dentry))
M
Miklos Szeredi 已提交
3154
		will_truncate = false;
3155

3156 3157 3158
	if (will_truncate) {
		error = mnt_want_write(nd->path.mnt);
		if (error)
3159
			goto out;
3160
		got_write = true;
3161
	}
M
Miklos Szeredi 已提交
3162
finish_open_created:
A
Al Viro 已提交
3163
	error = may_open(&nd->path, acc_mode, open_flag);
3164
	if (error)
3165
		goto out;
M
Miklos Szeredi 已提交
3166 3167 3168 3169 3170 3171

	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
	error = vfs_open(&nd->path, file, current_cred());
	if (!error) {
		*opened |= FILE_OPENED;
	} else {
A
Al Viro 已提交
3172
		if (error == -EOPENSTALE)
M
Miklos Szeredi 已提交
3173
			goto stale_open;
3174
		goto out;
M
Miklos Szeredi 已提交
3175
	}
3176
opened:
3177
	error = open_check_o_direct(file);
3178 3179
	if (error)
		goto exit_fput;
3180
	error = ima_file_check(file, op->acc_mode, *opened);
3181 3182 3183 3184
	if (error)
		goto exit_fput;

	if (will_truncate) {
3185
		error = handle_truncate(file);
3186 3187
		if (error)
			goto exit_fput;
3188
	}
3189
out:
3190
	if (got_write)
3191
		mnt_drop_write(nd->path.mnt);
3192
	path_put(&save_parent);
3193
	return error;
3194

3195
exit_fput:
3196 3197
	fput(file);
	goto out;
3198

M
Miklos Szeredi 已提交
3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209
stale_open:
	/* If no saved parent or already retried then can't retry */
	if (!save_parent.dentry || retried)
		goto out;

	BUG_ON(save_parent.dentry != dir);
	path_put(&nd->path);
	nd->path = save_parent;
	nd->inode = dir->d_inode;
	save_parent.mnt = NULL;
	save_parent.dentry = NULL;
3210
	if (got_write) {
M
Miklos Szeredi 已提交
3211
		mnt_drop_write(nd->path.mnt);
3212
		got_write = false;
M
Miklos Szeredi 已提交
3213 3214 3215
	}
	retried = true;
	goto retry_lookup;
3216 3217
}

3218
static int do_tmpfile(struct nameidata *nd, unsigned flags,
3219 3220 3221 3222
		const struct open_flags *op,
		struct file *file, int *opened)
{
	static const struct qstr name = QSTR_INIT("/", 1);
3223
	struct dentry *child;
3224
	struct inode *dir;
3225
	struct path path;
3226
	int error = path_lookupat(nd, flags | LOOKUP_DIRECTORY, &path);
3227 3228
	if (unlikely(error))
		return error;
3229
	error = mnt_want_write(path.mnt);
3230 3231
	if (unlikely(error))
		goto out;
3232
	dir = path.dentry->d_inode;
3233
	/* we want directory to be writable */
3234
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
3235 3236 3237 3238 3239 3240
	if (error)
		goto out2;
	if (!dir->i_op->tmpfile) {
		error = -EOPNOTSUPP;
		goto out2;
	}
3241
	child = d_alloc(path.dentry, &name);
3242 3243 3244 3245
	if (unlikely(!child)) {
		error = -ENOMEM;
		goto out2;
	}
3246 3247 3248
	dput(path.dentry);
	path.dentry = child;
	error = dir->i_op->tmpfile(dir, child, op->mode);
3249 3250
	if (error)
		goto out2;
3251
	audit_inode(nd->name, child, 0);
3252
	/* Don't check for other permissions, the inode was just created */
3253
	error = may_open(&path, MAY_OPEN, op->open_flag);
3254 3255
	if (error)
		goto out2;
3256 3257
	file->f_path.mnt = path.mnt;
	error = finish_open(file, child, NULL, opened);
3258 3259 3260
	if (error)
		goto out2;
	error = open_check_o_direct(file);
3261
	if (error) {
3262
		fput(file);
3263 3264 3265 3266 3267 3268
	} 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);
	}
3269
out2:
3270
	mnt_drop_write(path.mnt);
3271
out:
3272
	path_put(&path);
3273 3274 3275
	return error;
}

3276 3277
static struct file *path_openat(struct nameidata *nd,
			const struct open_flags *op, unsigned flags)
L
Linus Torvalds 已提交
3278
{
3279
	const char *s;
A
Al Viro 已提交
3280
	struct file *file;
3281
	int opened = 0;
3282
	int error;
N
Nick Piggin 已提交
3283

A
Al Viro 已提交
3284
	file = get_empty_filp();
3285 3286
	if (IS_ERR(file))
		return file;
N
Nick Piggin 已提交
3287

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

A
Al Viro 已提交
3290
	if (unlikely(file->f_flags & __O_TMPFILE)) {
3291
		error = do_tmpfile(nd, flags, op, file, &opened);
A
Al Viro 已提交
3292
		goto out2;
3293 3294
	}

3295
	s = path_init(nd, flags);
3296 3297 3298 3299
	if (IS_ERR(s)) {
		put_filp(file);
		return ERR_CAST(s);
	}
3300
	while (!(error = link_path_walk(s, nd)) &&
A
Al Viro 已提交
3301
		(error = do_last(nd, file, op, &opened)) > 0) {
A
Al Viro 已提交
3302
		nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3303 3304 3305
		s = trailing_symlink(nd);
		if (IS_ERR(s)) {
			error = PTR_ERR(s);
3306
			break;
3307
		}
3308
	}
3309
	terminate_walk(nd);
A
Al Viro 已提交
3310
out2:
3311 3312
	if (!(opened & FILE_OPENED)) {
		BUG_ON(!error);
A
Al Viro 已提交
3313
		put_filp(file);
3314
	}
3315 3316 3317 3318 3319 3320 3321 3322 3323 3324
	if (unlikely(error)) {
		if (error == -EOPENSTALE) {
			if (flags & LOOKUP_RCU)
				error = -ECHILD;
			else
				error = -ESTALE;
		}
		file = ERR_PTR(error);
	}
	return file;
L
Linus Torvalds 已提交
3325 3326
}

3327
struct file *do_filp_open(int dfd, struct filename *pathname,
3328
		const struct open_flags *op)
3329
{
3330
	struct nameidata nd, *saved_nd = set_nameidata(&nd, dfd, pathname);
3331
	int flags = op->lookup_flags;
3332 3333
	struct file *filp;

3334
	filp = path_openat(&nd, op, flags | LOOKUP_RCU);
3335
	if (unlikely(filp == ERR_PTR(-ECHILD)))
3336
		filp = path_openat(&nd, op, flags);
3337
	if (unlikely(filp == ERR_PTR(-ESTALE)))
3338
		filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3339
	restore_nameidata(saved_nd);
3340 3341 3342
	return filp;
}

A
Al Viro 已提交
3343
struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
3344
		const char *name, const struct open_flags *op)
A
Al Viro 已提交
3345
{
3346
	struct nameidata nd, *saved_nd;
A
Al Viro 已提交
3347
	struct file *file;
3348
	struct filename *filename;
3349
	int flags = op->lookup_flags | LOOKUP_ROOT;
A
Al Viro 已提交
3350 3351 3352 3353

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

3354
	if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN)
A
Al Viro 已提交
3355 3356
		return ERR_PTR(-ELOOP);

3357 3358 3359 3360
	filename = getname_kernel(name);
	if (unlikely(IS_ERR(filename)))
		return ERR_CAST(filename);

3361 3362
	saved_nd = set_nameidata(&nd, -1, filename);
	file = path_openat(&nd, op, flags | LOOKUP_RCU);
A
Al Viro 已提交
3363
	if (unlikely(file == ERR_PTR(-ECHILD)))
3364
		file = path_openat(&nd, op, flags);
A
Al Viro 已提交
3365
	if (unlikely(file == ERR_PTR(-ESTALE)))
3366
		file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3367
	restore_nameidata(saved_nd);
3368
	putname(filename);
A
Al Viro 已提交
3369 3370 3371
	return file;
}

3372
static struct dentry *filename_create(int dfd, struct filename *name,
3373
				struct path *path, unsigned int lookup_flags)
L
Linus Torvalds 已提交
3374
{
3375
	struct dentry *dentry = ERR_PTR(-EEXIST);
3376 3377
	struct qstr last;
	int type;
3378
	int err2;
3379 3380 3381 3382 3383 3384 3385 3386 3387
	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;

3388 3389 3390
	name = filename_parentat(dfd, name, lookup_flags, path, &last, &type);
	if (IS_ERR(name))
		return ERR_CAST(name);
L
Linus Torvalds 已提交
3391

3392 3393 3394 3395
	/*
	 * Yucky last component or no last component at all?
	 * (foo/., foo/.., /////)
	 */
3396
	if (unlikely(type != LAST_NORM))
A
Al Viro 已提交
3397
		goto out;
3398

3399
	/* don't fail immediately if it's r/o, at least try to report other errors */
3400
	err2 = mnt_want_write(path->mnt);
3401 3402 3403
	/*
	 * Do the final lookup.
	 */
3404 3405 3406
	lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
	mutex_lock_nested(&path->dentry->d_inode->i_mutex, I_MUTEX_PARENT);
	dentry = __lookup_hash(&last, path->dentry, lookup_flags);
L
Linus Torvalds 已提交
3407
	if (IS_ERR(dentry))
3408
		goto unlock;
3409

3410
	error = -EEXIST;
3411
	if (d_is_positive(dentry))
3412
		goto fail;
3413

3414 3415 3416 3417 3418 3419
	/*
	 * 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.
	 */
3420
	if (unlikely(!is_dir && last.name[last.len])) {
3421
		error = -ENOENT;
A
Al Viro 已提交
3422
		goto fail;
3423
	}
3424 3425
	if (unlikely(err2)) {
		error = err2;
3426
		goto fail;
3427
	}
3428
	putname(name);
L
Linus Torvalds 已提交
3429 3430
	return dentry;
fail:
3431 3432 3433
	dput(dentry);
	dentry = ERR_PTR(error);
unlock:
3434
	mutex_unlock(&path->dentry->d_inode->i_mutex);
3435
	if (!err2)
3436
		mnt_drop_write(path->mnt);
A
Al Viro 已提交
3437
out:
3438
	path_put(path);
3439
	putname(name);
L
Linus Torvalds 已提交
3440 3441
	return dentry;
}
3442 3443 3444 3445

struct dentry *kern_path_create(int dfd, const char *pathname,
				struct path *path, unsigned int lookup_flags)
{
3446 3447
	return filename_create(dfd, getname_kernel(pathname),
				path, lookup_flags);
3448
}
3449 3450
EXPORT_SYMBOL(kern_path_create);

A
Al Viro 已提交
3451 3452 3453 3454
void done_path_create(struct path *path, struct dentry *dentry)
{
	dput(dentry);
	mutex_unlock(&path->dentry->d_inode->i_mutex);
3455
	mnt_drop_write(path->mnt);
A
Al Viro 已提交
3456 3457 3458 3459
	path_put(path);
}
EXPORT_SYMBOL(done_path_create);

A
Al Viro 已提交
3460
inline struct dentry *user_path_create(int dfd, const char __user *pathname,
3461
				struct path *path, unsigned int lookup_flags)
3462
{
3463
	return filename_create(dfd, getname(pathname), path, lookup_flags);
3464 3465 3466
}
EXPORT_SYMBOL(user_path_create);

A
Al Viro 已提交
3467
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
L
Linus Torvalds 已提交
3468
{
3469
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3470 3471 3472 3473

	if (error)
		return error;

3474
	if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD))
L
Linus Torvalds 已提交
3475 3476
		return -EPERM;

A
Al Viro 已提交
3477
	if (!dir->i_op->mknod)
L
Linus Torvalds 已提交
3478 3479
		return -EPERM;

3480 3481 3482 3483
	error = devcgroup_inode_mknod(mode, dev);
	if (error)
		return error;

L
Linus Torvalds 已提交
3484 3485 3486 3487 3488
	error = security_inode_mknod(dir, dentry, mode, dev);
	if (error)
		return error;

	error = dir->i_op->mknod(dir, dentry, mode, dev);
3489
	if (!error)
3490
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3491 3492
	return error;
}
3493
EXPORT_SYMBOL(vfs_mknod);
L
Linus Torvalds 已提交
3494

A
Al Viro 已提交
3495
static int may_mknod(umode_t mode)
3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511
{
	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 已提交
3512
SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
3513
		unsigned, dev)
L
Linus Torvalds 已提交
3514
{
3515
	struct dentry *dentry;
3516 3517
	struct path path;
	int error;
3518
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3519

3520 3521 3522
	error = may_mknod(mode);
	if (error)
		return error;
3523 3524
retry:
	dentry = user_path_create(dfd, filename, &path, lookup_flags);
3525 3526
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);
3527

3528
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3529
		mode &= ~current_umask();
3530
	error = security_path_mknod(&path, dentry, mode, dev);
3531
	if (error)
3532
		goto out;
3533
	switch (mode & S_IFMT) {
L
Linus Torvalds 已提交
3534
		case 0: case S_IFREG:
A
Al Viro 已提交
3535
			error = vfs_create(path.dentry->d_inode,dentry,mode,true);
L
Linus Torvalds 已提交
3536 3537
			break;
		case S_IFCHR: case S_IFBLK:
3538
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,
L
Linus Torvalds 已提交
3539 3540 3541
					new_decode_dev(dev));
			break;
		case S_IFIFO: case S_IFSOCK:
3542
			error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
L
Linus Torvalds 已提交
3543 3544
			break;
	}
3545
out:
A
Al Viro 已提交
3546
	done_path_create(&path, dentry);
3547 3548 3549 3550
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3551 3552 3553
	return error;
}

A
Al Viro 已提交
3554
SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3555 3556 3557 3558
{
	return sys_mknodat(AT_FDCWD, filename, mode, dev);
}

3559
int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
L
Linus Torvalds 已提交
3560
{
3561
	int error = may_create(dir, dentry);
3562
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
3563 3564 3565 3566

	if (error)
		return error;

A
Al Viro 已提交
3567
	if (!dir->i_op->mkdir)
L
Linus Torvalds 已提交
3568 3569 3570 3571 3572 3573 3574
		return -EPERM;

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

3575 3576 3577
	if (max_links && dir->i_nlink >= max_links)
		return -EMLINK;

L
Linus Torvalds 已提交
3578
	error = dir->i_op->mkdir(dir, dentry, mode);
3579
	if (!error)
3580
		fsnotify_mkdir(dir, dentry);
L
Linus Torvalds 已提交
3581 3582
	return error;
}
3583
EXPORT_SYMBOL(vfs_mkdir);
L
Linus Torvalds 已提交
3584

3585
SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
L
Linus Torvalds 已提交
3586
{
3587
	struct dentry *dentry;
3588 3589
	struct path path;
	int error;
3590
	unsigned int lookup_flags = LOOKUP_DIRECTORY;
L
Linus Torvalds 已提交
3591

3592 3593
retry:
	dentry = user_path_create(dfd, pathname, &path, lookup_flags);
3594
	if (IS_ERR(dentry))
3595
		return PTR_ERR(dentry);
L
Linus Torvalds 已提交
3596

3597
	if (!IS_POSIXACL(path.dentry->d_inode))
A
Al Viro 已提交
3598
		mode &= ~current_umask();
3599
	error = security_path_mkdir(&path, dentry, mode);
3600 3601
	if (!error)
		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
A
Al Viro 已提交
3602
	done_path_create(&path, dentry);
3603 3604 3605 3606
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3607 3608 3609
	return error;
}

3610
SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
3611 3612 3613 3614
{
	return sys_mkdirat(AT_FDCWD, pathname, mode);
}

L
Linus Torvalds 已提交
3615
/*
S
Sage Weil 已提交
3616
 * The dentry_unhash() helper will try to drop the dentry early: we
3617
 * should have a usage count of 1 if we're the only user of this
S
Sage Weil 已提交
3618 3619
 * dentry, and if that is true (possibly after pruning the dcache),
 * then we drop the dentry now.
L
Linus Torvalds 已提交
3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631
 *
 * A low-level filesystem can, if it choses, legally
 * do a
 *
 *	if (!d_unhashed(dentry))
 *		return -EBUSY;
 *
 * if it cannot handle the case of removing a directory
 * that is still in use by something else..
 */
void dentry_unhash(struct dentry *dentry)
{
3632
	shrink_dcache_parent(dentry);
L
Linus Torvalds 已提交
3633
	spin_lock(&dentry->d_lock);
3634
	if (dentry->d_lockref.count == 1)
L
Linus Torvalds 已提交
3635 3636 3637
		__d_drop(dentry);
	spin_unlock(&dentry->d_lock);
}
3638
EXPORT_SYMBOL(dentry_unhash);
L
Linus Torvalds 已提交
3639 3640 3641 3642 3643 3644 3645 3646

int vfs_rmdir(struct inode *dir, struct dentry *dentry)
{
	int error = may_delete(dir, dentry, 1);

	if (error)
		return error;

A
Al Viro 已提交
3647
	if (!dir->i_op->rmdir)
L
Linus Torvalds 已提交
3648 3649
		return -EPERM;

3650
	dget(dentry);
3651
	mutex_lock(&dentry->d_inode->i_mutex);
S
Sage Weil 已提交
3652 3653

	error = -EBUSY;
3654
	if (is_local_mountpoint(dentry))
S
Sage Weil 已提交
3655 3656 3657 3658 3659 3660
		goto out;

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

3661
	shrink_dcache_parent(dentry);
S
Sage Weil 已提交
3662 3663 3664 3665 3666 3667
	error = dir->i_op->rmdir(dir, dentry);
	if (error)
		goto out;

	dentry->d_inode->i_flags |= S_DEAD;
	dont_mount(dentry);
3668
	detach_mounts(dentry);
S
Sage Weil 已提交
3669 3670

out:
3671
	mutex_unlock(&dentry->d_inode->i_mutex);
3672
	dput(dentry);
S
Sage Weil 已提交
3673
	if (!error)
L
Linus Torvalds 已提交
3674 3675 3676
		d_delete(dentry);
	return error;
}
3677
EXPORT_SYMBOL(vfs_rmdir);
L
Linus Torvalds 已提交
3678

3679
static long do_rmdir(int dfd, const char __user *pathname)
L
Linus Torvalds 已提交
3680 3681
{
	int error = 0;
3682
	struct filename *name;
L
Linus Torvalds 已提交
3683
	struct dentry *dentry;
3684 3685 3686
	struct path path;
	struct qstr last;
	int type;
3687 3688
	unsigned int lookup_flags = 0;
retry:
3689 3690
	name = user_path_parent(dfd, pathname,
				&path, &last, &type, lookup_flags);
3691 3692
	if (IS_ERR(name))
		return PTR_ERR(name);
L
Linus Torvalds 已提交
3693

3694
	switch (type) {
3695 3696 3697 3698 3699 3700 3701 3702 3703
	case LAST_DOTDOT:
		error = -ENOTEMPTY;
		goto exit1;
	case LAST_DOT:
		error = -EINVAL;
		goto exit1;
	case LAST_ROOT:
		error = -EBUSY;
		goto exit1;
L
Linus Torvalds 已提交
3704
	}
3705

3706
	error = mnt_want_write(path.mnt);
3707 3708
	if (error)
		goto exit1;
3709

3710 3711
	mutex_lock_nested(&path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
3712
	error = PTR_ERR(dentry);
3713 3714
	if (IS_ERR(dentry))
		goto exit2;
3715 3716 3717 3718
	if (!dentry->d_inode) {
		error = -ENOENT;
		goto exit3;
	}
3719
	error = security_path_rmdir(&path, dentry);
3720
	if (error)
3721
		goto exit3;
3722
	error = vfs_rmdir(path.dentry->d_inode, dentry);
3723
exit3:
3724 3725
	dput(dentry);
exit2:
3726 3727
	mutex_unlock(&path.dentry->d_inode->i_mutex);
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3728
exit1:
3729
	path_put(&path);
L
Linus Torvalds 已提交
3730
	putname(name);
3731 3732 3733 3734
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
3735 3736 3737
	return error;
}

3738
SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
3739 3740 3741 3742
{
	return do_rmdir(AT_FDCWD, pathname);
}

3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761
/**
 * 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 已提交
3762
{
J
J. Bruce Fields 已提交
3763
	struct inode *target = dentry->d_inode;
L
Linus Torvalds 已提交
3764 3765 3766 3767 3768
	int error = may_delete(dir, dentry, 0);

	if (error)
		return error;

A
Al Viro 已提交
3769
	if (!dir->i_op->unlink)
L
Linus Torvalds 已提交
3770 3771
		return -EPERM;

J
J. Bruce Fields 已提交
3772
	mutex_lock(&target->i_mutex);
3773
	if (is_local_mountpoint(dentry))
L
Linus Torvalds 已提交
3774 3775 3776
		error = -EBUSY;
	else {
		error = security_inode_unlink(dir, dentry);
3777
		if (!error) {
3778 3779
			error = try_break_deleg(target, delegated_inode);
			if (error)
3780
				goto out;
L
Linus Torvalds 已提交
3781
			error = dir->i_op->unlink(dir, dentry);
3782
			if (!error) {
3783
				dont_mount(dentry);
3784 3785
				detach_mounts(dentry);
			}
3786
		}
L
Linus Torvalds 已提交
3787
	}
3788
out:
J
J. Bruce Fields 已提交
3789
	mutex_unlock(&target->i_mutex);
L
Linus Torvalds 已提交
3790 3791 3792

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

L
Linus Torvalds 已提交
3797 3798
	return error;
}
3799
EXPORT_SYMBOL(vfs_unlink);
L
Linus Torvalds 已提交
3800 3801 3802

/*
 * Make sure that the actual truncation of the file will occur outside its
3803
 * directory's i_mutex.  Truncate can take a long time if there is a lot of
L
Linus Torvalds 已提交
3804 3805 3806
 * writeout happening, and we don't want to prevent access to the directory
 * while waiting on the I/O.
 */
3807
static long do_unlinkat(int dfd, const char __user *pathname)
L
Linus Torvalds 已提交
3808
{
3809
	int error;
3810
	struct filename *name;
L
Linus Torvalds 已提交
3811
	struct dentry *dentry;
3812 3813 3814
	struct path path;
	struct qstr last;
	int type;
L
Linus Torvalds 已提交
3815
	struct inode *inode = NULL;
3816
	struct inode *delegated_inode = NULL;
3817 3818
	unsigned int lookup_flags = 0;
retry:
3819 3820
	name = user_path_parent(dfd, pathname,
				&path, &last, &type, lookup_flags);
3821 3822
	if (IS_ERR(name))
		return PTR_ERR(name);
3823

L
Linus Torvalds 已提交
3824
	error = -EISDIR;
3825
	if (type != LAST_NORM)
L
Linus Torvalds 已提交
3826
		goto exit1;
3827

3828
	error = mnt_want_write(path.mnt);
3829 3830
	if (error)
		goto exit1;
3831
retry_deleg:
3832 3833
	mutex_lock_nested(&path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
	dentry = __lookup_hash(&last, path.dentry, lookup_flags);
L
Linus Torvalds 已提交
3834 3835 3836
	error = PTR_ERR(dentry);
	if (!IS_ERR(dentry)) {
		/* Why not before? Because we want correct error value */
3837
		if (last.name[last.len])
3838
			goto slashes;
L
Linus Torvalds 已提交
3839
		inode = dentry->d_inode;
3840
		if (d_is_negative(dentry))
3841 3842
			goto slashes;
		ihold(inode);
3843
		error = security_path_unlink(&path, dentry);
3844
		if (error)
3845
			goto exit2;
3846
		error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode);
3847
exit2:
L
Linus Torvalds 已提交
3848 3849
		dput(dentry);
	}
3850
	mutex_unlock(&path.dentry->d_inode->i_mutex);
L
Linus Torvalds 已提交
3851 3852
	if (inode)
		iput(inode);	/* truncate the inode here */
3853 3854
	inode = NULL;
	if (delegated_inode) {
3855
		error = break_deleg_wait(&delegated_inode);
3856 3857 3858
		if (!error)
			goto retry_deleg;
	}
3859
	mnt_drop_write(path.mnt);
L
Linus Torvalds 已提交
3860
exit1:
3861
	path_put(&path);
L
Linus Torvalds 已提交
3862
	putname(name);
3863 3864 3865 3866 3867
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		inode = NULL;
		goto retry;
	}
L
Linus Torvalds 已提交
3868 3869 3870
	return error;

slashes:
3871 3872
	if (d_is_negative(dentry))
		error = -ENOENT;
M
Miklos Szeredi 已提交
3873
	else if (d_is_dir(dentry))
3874 3875 3876
		error = -EISDIR;
	else
		error = -ENOTDIR;
L
Linus Torvalds 已提交
3877 3878 3879
	goto exit2;
}

3880
SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
3881 3882 3883 3884 3885 3886 3887 3888 3889 3890
{
	if ((flag & ~AT_REMOVEDIR) != 0)
		return -EINVAL;

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

	return do_unlinkat(dfd, pathname);
}

3891
SYSCALL_DEFINE1(unlink, const char __user *, pathname)
3892 3893 3894 3895
{
	return do_unlinkat(AT_FDCWD, pathname);
}

3896
int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
L
Linus Torvalds 已提交
3897
{
3898
	int error = may_create(dir, dentry);
L
Linus Torvalds 已提交
3899 3900 3901 3902

	if (error)
		return error;

A
Al Viro 已提交
3903
	if (!dir->i_op->symlink)
L
Linus Torvalds 已提交
3904 3905 3906 3907 3908 3909 3910
		return -EPERM;

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

	error = dir->i_op->symlink(dir, dentry, oldname);
3911
	if (!error)
3912
		fsnotify_create(dir, dentry);
L
Linus Torvalds 已提交
3913 3914
	return error;
}
3915
EXPORT_SYMBOL(vfs_symlink);
L
Linus Torvalds 已提交
3916

3917 3918
SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
L
Linus Torvalds 已提交
3919
{
3920
	int error;
3921
	struct filename *from;
3922
	struct dentry *dentry;
3923
	struct path path;
3924
	unsigned int lookup_flags = 0;
L
Linus Torvalds 已提交
3925 3926

	from = getname(oldname);
3927
	if (IS_ERR(from))
L
Linus Torvalds 已提交
3928
		return PTR_ERR(from);
3929 3930
retry:
	dentry = user_path_create(newdfd, newname, &path, lookup_flags);
3931 3932
	error = PTR_ERR(dentry);
	if (IS_ERR(dentry))
3933
		goto out_putname;
3934

3935
	error = security_path_symlink(&path, dentry, from->name);
3936
	if (!error)
3937
		error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
A
Al Viro 已提交
3938
	done_path_create(&path, dentry);
3939 3940 3941 3942
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
3943
out_putname:
L
Linus Torvalds 已提交
3944 3945 3946 3947
	putname(from);
	return error;
}

3948
SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
3949 3950 3951 3952
{
	return sys_symlinkat(oldname, AT_FDCWD, newname);
}

J
J. Bruce Fields 已提交
3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972
/**
 * 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 已提交
3973 3974
{
	struct inode *inode = old_dentry->d_inode;
3975
	unsigned max_links = dir->i_sb->s_max_links;
L
Linus Torvalds 已提交
3976 3977 3978 3979 3980
	int error;

	if (!inode)
		return -ENOENT;

3981
	error = may_create(dir, new_dentry);
L
Linus Torvalds 已提交
3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992
	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;
A
Al Viro 已提交
3993
	if (!dir->i_op->link)
L
Linus Torvalds 已提交
3994
		return -EPERM;
3995
	if (S_ISDIR(inode->i_mode))
L
Linus Torvalds 已提交
3996 3997 3998 3999 4000 4001
		return -EPERM;

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

4002
	mutex_lock(&inode->i_mutex);
4003
	/* Make sure we don't allow creating hardlink to an unlinked file */
4004
	if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
4005
		error =  -ENOENT;
4006 4007
	else if (max_links && inode->i_nlink >= max_links)
		error = -EMLINK;
J
J. Bruce Fields 已提交
4008 4009 4010 4011 4012
	else {
		error = try_break_deleg(inode, delegated_inode);
		if (!error)
			error = dir->i_op->link(old_dentry, dir, new_dentry);
	}
4013 4014 4015 4016 4017 4018

	if (!error && (inode->i_state & I_LINKABLE)) {
		spin_lock(&inode->i_lock);
		inode->i_state &= ~I_LINKABLE;
		spin_unlock(&inode->i_lock);
	}
4019
	mutex_unlock(&inode->i_mutex);
4020
	if (!error)
4021
		fsnotify_link(dir, inode, new_dentry);
L
Linus Torvalds 已提交
4022 4023
	return error;
}
4024
EXPORT_SYMBOL(vfs_link);
L
Linus Torvalds 已提交
4025 4026 4027 4028 4029 4030 4031 4032 4033 4034

/*
 * 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
 */
4035 4036
SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, int, flags)
L
Linus Torvalds 已提交
4037 4038
{
	struct dentry *new_dentry;
4039
	struct path old_path, new_path;
J
J. Bruce Fields 已提交
4040
	struct inode *delegated_inode = NULL;
4041
	int how = 0;
L
Linus Torvalds 已提交
4042 4043
	int error;

4044
	if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0)
4045
		return -EINVAL;
4046
	/*
4047 4048 4049
	 * 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.
4050
	 */
4051 4052 4053
	if (flags & AT_EMPTY_PATH) {
		if (!capable(CAP_DAC_READ_SEARCH))
			return -ENOENT;
4054
		how = LOOKUP_EMPTY;
4055
	}
4056 4057 4058

	if (flags & AT_SYMLINK_FOLLOW)
		how |= LOOKUP_FOLLOW;
4059
retry:
4060
	error = user_path_at(olddfd, oldname, how, &old_path);
L
Linus Torvalds 已提交
4061
	if (error)
4062 4063
		return error;

4064 4065
	new_dentry = user_path_create(newdfd, newname, &new_path,
					(how & LOOKUP_REVAL));
L
Linus Torvalds 已提交
4066
	error = PTR_ERR(new_dentry);
4067
	if (IS_ERR(new_dentry))
4068 4069 4070 4071 4072
		goto out;

	error = -EXDEV;
	if (old_path.mnt != new_path.mnt)
		goto out_dput;
K
Kees Cook 已提交
4073 4074 4075
	error = may_linkat(&old_path);
	if (unlikely(error))
		goto out_dput;
4076
	error = security_path_link(old_path.dentry, &new_path, new_dentry);
4077
	if (error)
4078
		goto out_dput;
J
J. Bruce Fields 已提交
4079
	error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
4080
out_dput:
A
Al Viro 已提交
4081
	done_path_create(&new_path, new_dentry);
J
J. Bruce Fields 已提交
4082 4083
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
4084 4085
		if (!error) {
			path_put(&old_path);
J
J. Bruce Fields 已提交
4086
			goto retry;
4087
		}
J
J. Bruce Fields 已提交
4088
	}
4089
	if (retry_estale(error, how)) {
4090
		path_put(&old_path);
4091 4092 4093
		how |= LOOKUP_REVAL;
		goto retry;
	}
L
Linus Torvalds 已提交
4094
out:
4095
	path_put(&old_path);
L
Linus Torvalds 已提交
4096 4097 4098 4099

	return error;
}

4100
SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
4101
{
4102
	return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4103 4104
}

4105 4106 4107 4108 4109 4110 4111
/**
 * 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 已提交
4112
 * @flags:	rename flags
4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126
 *
 * 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 已提交
4127 4128 4129
 * 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:
4130
 *	a) we can get into loop creation.
L
Linus Torvalds 已提交
4131 4132
 *	b) race potential - two innocent renames can create a loop together.
 *	   That's where 4.4 screws up. Current fix: serialization on
4133
 *	   sb->s_vfs_rename_mutex. We might be more accurate, but that's another
L
Linus Torvalds 已提交
4134
 *	   story.
4135 4136
 *	c) we have to lock _four_ objects - parents and victim (if it exists),
 *	   and source (if it is not a directory).
4137
 *	   And that - after we got ->i_mutex on parents (until then we don't know
L
Linus Torvalds 已提交
4138 4139
 *	   whether the target exists).  Solution: try to be smart with locking
 *	   order for inodes.  We rely on the fact that tree topology may change
4140
 *	   only under ->s_vfs_rename_mutex _and_ that parent of the object we
L
Linus Torvalds 已提交
4141 4142 4143
 *	   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,
4144
 *	   lock child" and rename is under ->s_vfs_rename_mutex.
L
Linus Torvalds 已提交
4145 4146 4147
 *	   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.
4148
 *	d) conversion from fhandle to dentry may come in the wrong moment - when
4149
 *	   we are removing the target. Solution: we will have to grab ->i_mutex
L
Linus Torvalds 已提交
4150
 *	   in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
4151
 *	   ->i_mutex on parents, which works but leads to some truly excessive
L
Linus Torvalds 已提交
4152 4153
 *	   locking].
 */
4154 4155
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	       struct inode *new_dir, struct dentry *new_dentry,
M
Miklos Szeredi 已提交
4156
	       struct inode **delegated_inode, unsigned int flags)
L
Linus Torvalds 已提交
4157
{
4158 4159 4160 4161
	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 已提交
4162
	struct inode *target = new_dentry->d_inode;
M
Miklos Szeredi 已提交
4163 4164
	bool new_is_dir = false;
	unsigned max_links = new_dir->i_sb->s_max_links;
4165 4166 4167 4168 4169 4170 4171 4172

	if (source == target)
		return 0;

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

M
Miklos Szeredi 已提交
4173
	if (!target) {
4174
		error = may_create(new_dir, new_dentry);
M
Miklos Szeredi 已提交
4175 4176 4177 4178 4179 4180 4181 4182
	} 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);
	}
4183 4184 4185
	if (error)
		return error;

M
Miklos Szeredi 已提交
4186
	if (!old_dir->i_op->rename && !old_dir->i_op->rename2)
4187
		return -EPERM;
L
Linus Torvalds 已提交
4188

M
Miklos Szeredi 已提交
4189 4190 4191
	if (flags && !old_dir->i_op->rename2)
		return -EINVAL;

L
Linus Torvalds 已提交
4192 4193 4194 4195
	/*
	 * If we are going to change the parent - check write permissions,
	 * we'll need to flip '..'.
	 */
M
Miklos Szeredi 已提交
4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206
	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 已提交
4207 4208
	}

4209 4210
	error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
				      flags);
L
Linus Torvalds 已提交
4211 4212 4213
	if (error)
		return error;

4214
	old_name = fsnotify_oldname_init(old_dentry->d_name.name);
4215
	dget(new_dentry);
M
Miklos Szeredi 已提交
4216
	if (!is_dir || (flags & RENAME_EXCHANGE))
4217 4218
		lock_two_nondirectories(source, target);
	else if (target)
4219
		mutex_lock(&target->i_mutex);
S
Sage Weil 已提交
4220 4221

	error = -EBUSY;
4222
	if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry))
S
Sage Weil 已提交
4223 4224
		goto out;

M
Miklos Szeredi 已提交
4225
	if (max_links && new_dir != old_dir) {
4226
		error = -EMLINK;
M
Miklos Szeredi 已提交
4227
		if (is_dir && !new_is_dir && new_dir->i_nlink >= max_links)
4228
			goto out;
M
Miklos Szeredi 已提交
4229 4230 4231 4232 4233 4234 4235
		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) {
4236
		error = try_break_deleg(source, delegated_inode);
4237 4238
		if (error)
			goto out;
M
Miklos Szeredi 已提交
4239 4240 4241 4242 4243
	}
	if (target && !new_is_dir) {
		error = try_break_deleg(target, delegated_inode);
		if (error)
			goto out;
4244
	}
M
Miklos Szeredi 已提交
4245
	if (!old_dir->i_op->rename2) {
M
Miklos Szeredi 已提交
4246 4247 4248
		error = old_dir->i_op->rename(old_dir, old_dentry,
					      new_dir, new_dentry);
	} else {
M
Miklos Szeredi 已提交
4249
		WARN_ON(old_dir->i_op->rename != NULL);
M
Miklos Szeredi 已提交
4250 4251 4252
		error = old_dir->i_op->rename2(old_dir, old_dentry,
					       new_dir, new_dentry, flags);
	}
S
Sage Weil 已提交
4253 4254 4255
	if (error)
		goto out;

M
Miklos Szeredi 已提交
4256
	if (!(flags & RENAME_EXCHANGE) && target) {
4257 4258
		if (is_dir)
			target->i_flags |= S_DEAD;
S
Sage Weil 已提交
4259
		dont_mount(new_dentry);
4260
		detach_mounts(new_dentry);
4261
	}
M
Miklos Szeredi 已提交
4262 4263 4264 4265 4266 4267
	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 已提交
4268
out:
M
Miklos Szeredi 已提交
4269
	if (!is_dir || (flags & RENAME_EXCHANGE))
4270 4271 4272
		unlock_two_nondirectories(source, target);
	else if (target)
		mutex_unlock(&target->i_mutex);
L
Linus Torvalds 已提交
4273
	dput(new_dentry);
M
Miklos Szeredi 已提交
4274
	if (!error) {
4275
		fsnotify_move(old_dir, new_dir, old_name, is_dir,
M
Miklos Szeredi 已提交
4276 4277 4278 4279 4280 4281
			      !(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 已提交
4282 4283
	fsnotify_oldname_free(old_name);

L
Linus Torvalds 已提交
4284 4285
	return error;
}
4286
EXPORT_SYMBOL(vfs_rename);
L
Linus Torvalds 已提交
4287

M
Miklos Szeredi 已提交
4288 4289
SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname, unsigned int, flags)
L
Linus Torvalds 已提交
4290
{
4291 4292
	struct dentry *old_dentry, *new_dentry;
	struct dentry *trap;
4293 4294 4295
	struct path old_path, new_path;
	struct qstr old_last, new_last;
	int old_type, new_type;
4296
	struct inode *delegated_inode = NULL;
4297 4298
	struct filename *from;
	struct filename *to;
4299
	unsigned int lookup_flags = 0, target_flags = LOOKUP_RENAME_TARGET;
4300
	bool should_retry = false;
4301
	int error;
M
Miklos Szeredi 已提交
4302

M
Miklos Szeredi 已提交
4303
	if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
M
Miklos Szeredi 已提交
4304 4305
		return -EINVAL;

M
Miklos Szeredi 已提交
4306 4307
	if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) &&
	    (flags & RENAME_EXCHANGE))
M
Miklos Szeredi 已提交
4308 4309
		return -EINVAL;

M
Miklos Szeredi 已提交
4310 4311 4312
	if ((flags & RENAME_WHITEOUT) && !capable(CAP_MKNOD))
		return -EPERM;

4313 4314 4315
	if (flags & RENAME_EXCHANGE)
		target_flags = 0;

4316
retry:
4317 4318
	from = user_path_parent(olddfd, oldname,
				&old_path, &old_last, &old_type, lookup_flags);
4319 4320
	if (IS_ERR(from)) {
		error = PTR_ERR(from);
L
Linus Torvalds 已提交
4321
		goto exit;
4322
	}
L
Linus Torvalds 已提交
4323

4324 4325
	to = user_path_parent(newdfd, newname,
				&new_path, &new_last, &new_type, lookup_flags);
4326 4327
	if (IS_ERR(to)) {
		error = PTR_ERR(to);
L
Linus Torvalds 已提交
4328
		goto exit1;
4329
	}
L
Linus Torvalds 已提交
4330 4331

	error = -EXDEV;
4332
	if (old_path.mnt != new_path.mnt)
L
Linus Torvalds 已提交
4333 4334 4335
		goto exit2;

	error = -EBUSY;
4336
	if (old_type != LAST_NORM)
L
Linus Torvalds 已提交
4337 4338
		goto exit2;

M
Miklos Szeredi 已提交
4339 4340
	if (flags & RENAME_NOREPLACE)
		error = -EEXIST;
4341
	if (new_type != LAST_NORM)
L
Linus Torvalds 已提交
4342 4343
		goto exit2;

4344
	error = mnt_want_write(old_path.mnt);
4345 4346 4347
	if (error)
		goto exit2;

4348
retry_deleg:
4349
	trap = lock_rename(new_path.dentry, old_path.dentry);
L
Linus Torvalds 已提交
4350

4351
	old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags);
L
Linus Torvalds 已提交
4352 4353 4354 4355 4356
	error = PTR_ERR(old_dentry);
	if (IS_ERR(old_dentry))
		goto exit3;
	/* source must exist */
	error = -ENOENT;
4357
	if (d_is_negative(old_dentry))
L
Linus Torvalds 已提交
4358
		goto exit4;
4359
	new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags);
M
Miklos Szeredi 已提交
4360 4361 4362 4363 4364 4365
	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 已提交
4366 4367 4368 4369 4370 4371 4372
	if (flags & RENAME_EXCHANGE) {
		error = -ENOENT;
		if (d_is_negative(new_dentry))
			goto exit5;

		if (!d_is_dir(new_dentry)) {
			error = -ENOTDIR;
4373
			if (new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4374 4375 4376
				goto exit5;
		}
	}
L
Linus Torvalds 已提交
4377
	/* unless the source is a directory trailing slashes give -ENOTDIR */
M
Miklos Szeredi 已提交
4378
	if (!d_is_dir(old_dentry)) {
L
Linus Torvalds 已提交
4379
		error = -ENOTDIR;
4380
		if (old_last.name[old_last.len])
M
Miklos Szeredi 已提交
4381
			goto exit5;
4382
		if (!(flags & RENAME_EXCHANGE) && new_last.name[new_last.len])
M
Miklos Szeredi 已提交
4383
			goto exit5;
L
Linus Torvalds 已提交
4384 4385 4386 4387
	}
	/* source should not be ancestor of target */
	error = -EINVAL;
	if (old_dentry == trap)
M
Miklos Szeredi 已提交
4388
		goto exit5;
L
Linus Torvalds 已提交
4389
	/* target should not be an ancestor of source */
M
Miklos Szeredi 已提交
4390 4391
	if (!(flags & RENAME_EXCHANGE))
		error = -ENOTEMPTY;
L
Linus Torvalds 已提交
4392 4393 4394
	if (new_dentry == trap)
		goto exit5;

4395 4396
	error = security_path_rename(&old_path, old_dentry,
				     &new_path, new_dentry, flags);
4397
	if (error)
4398
		goto exit5;
4399 4400
	error = vfs_rename(old_path.dentry->d_inode, old_dentry,
			   new_path.dentry->d_inode, new_dentry,
M
Miklos Szeredi 已提交
4401
			   &delegated_inode, flags);
L
Linus Torvalds 已提交
4402 4403 4404 4405 4406
exit5:
	dput(new_dentry);
exit4:
	dput(old_dentry);
exit3:
4407
	unlock_rename(new_path.dentry, old_path.dentry);
4408 4409 4410 4411 4412
	if (delegated_inode) {
		error = break_deleg_wait(&delegated_inode);
		if (!error)
			goto retry_deleg;
	}
4413
	mnt_drop_write(old_path.mnt);
L
Linus Torvalds 已提交
4414
exit2:
4415 4416
	if (retry_estale(error, lookup_flags))
		should_retry = true;
4417
	path_put(&new_path);
4418
	putname(to);
L
Linus Torvalds 已提交
4419
exit1:
4420
	path_put(&old_path);
L
Linus Torvalds 已提交
4421
	putname(from);
4422 4423 4424 4425 4426
	if (should_retry) {
		should_retry = false;
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
4427
exit:
L
Linus Torvalds 已提交
4428 4429 4430
	return error;
}

M
Miklos Szeredi 已提交
4431 4432 4433 4434 4435 4436
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
		int, newdfd, const char __user *, newname)
{
	return sys_renameat2(olddfd, oldname, newdfd, newname, 0);
}

4437
SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4438
{
M
Miklos Szeredi 已提交
4439
	return sys_renameat2(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
4440 4441
}

M
Miklos Szeredi 已提交
4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455
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 已提交
4456
int readlink_copy(char __user *buffer, int buflen, const char *link)
L
Linus Torvalds 已提交
4457
{
A
Al Viro 已提交
4458
	int len = PTR_ERR(link);
L
Linus Torvalds 已提交
4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469
	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
Al Viro 已提交
4470
EXPORT_SYMBOL(readlink_copy);
L
Linus Torvalds 已提交
4471 4472 4473 4474 4475 4476 4477 4478

/*
 * A helper for ->readlink().  This should be used *ONLY* for symlinks that
 * have ->follow_link() touching nd only in nd_set_link().  Using (or not
 * using) it for any given inode is up to filesystem.
 */
int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
4479
	void *cookie;
4480 4481
	struct inode *inode = d_inode(dentry);
	const char *link = inode->i_link;
4482
	int res;
4483

4484
	if (!link) {
4485
		link = inode->i_op->follow_link(dentry, &cookie);
4486 4487 4488
		if (IS_ERR(link))
			return PTR_ERR(link);
	}
4489
	res = readlink_copy(buffer, buflen, link);
4490 4491
	if (inode->i_op->put_link)
		inode->i_op->put_link(inode, cookie);
4492
	return res;
L
Linus Torvalds 已提交
4493
}
4494
EXPORT_SYMBOL(generic_readlink);
L
Linus Torvalds 已提交
4495 4496 4497 4498

/* get the link contents into pagecache */
static char *page_getlink(struct dentry * dentry, struct page **ppage)
{
4499 4500
	char *kaddr;
	struct page *page;
L
Linus Torvalds 已提交
4501
	struct address_space *mapping = dentry->d_inode->i_mapping;
4502
	page = read_mapping_page(mapping, 0, NULL);
L
Linus Torvalds 已提交
4503
	if (IS_ERR(page))
4504
		return (char*)page;
L
Linus Torvalds 已提交
4505
	*ppage = page;
4506 4507 4508
	kaddr = kmap(page);
	nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
	return kaddr;
L
Linus Torvalds 已提交
4509 4510 4511 4512 4513
}

int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
	struct page *page = NULL;
A
Al Viro 已提交
4514
	int res = readlink_copy(buffer, buflen, page_getlink(dentry, &page));
L
Linus Torvalds 已提交
4515 4516 4517 4518 4519 4520
	if (page) {
		kunmap(page);
		page_cache_release(page);
	}
	return res;
}
4521
EXPORT_SYMBOL(page_readlink);
L
Linus Torvalds 已提交
4522

4523
const char *page_follow_link_light(struct dentry *dentry, void **cookie)
L
Linus Torvalds 已提交
4524
{
4525
	struct page *page = NULL;
4526 4527 4528 4529
	char *res = page_getlink(dentry, &page);
	if (!IS_ERR(res))
		*cookie = page;
	return res;
L
Linus Torvalds 已提交
4530
}
4531
EXPORT_SYMBOL(page_follow_link_light);
L
Linus Torvalds 已提交
4532

4533
void page_put_link(struct inode *unused, void *cookie)
L
Linus Torvalds 已提交
4534
{
4535
	struct page *page = cookie;
4536 4537
	kunmap(page);
	page_cache_release(page);
L
Linus Torvalds 已提交
4538
}
4539
EXPORT_SYMBOL(page_put_link);
L
Linus Torvalds 已提交
4540

4541 4542 4543 4544
/*
 * 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 已提交
4545 4546
{
	struct address_space *mapping = inode->i_mapping;
4547
	struct page *page;
4548
	void *fsdata;
4549
	int err;
L
Linus Torvalds 已提交
4550
	char *kaddr;
4551 4552 4553
	unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
	if (nofs)
		flags |= AOP_FLAG_NOFS;
L
Linus Torvalds 已提交
4554

4555
retry:
4556
	err = pagecache_write_begin(NULL, mapping, 0, len-1,
4557
				flags, &page, &fsdata);
L
Linus Torvalds 已提交
4558
	if (err)
4559 4560
		goto fail;

4561
	kaddr = kmap_atomic(page);
L
Linus Torvalds 已提交
4562
	memcpy(kaddr, symname, len-1);
4563
	kunmap_atomic(kaddr);
4564 4565 4566

	err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
							page, fsdata);
L
Linus Torvalds 已提交
4567 4568
	if (err < 0)
		goto fail;
4569 4570 4571
	if (err < len-1)
		goto retry;

L
Linus Torvalds 已提交
4572 4573 4574 4575 4576
	mark_inode_dirty(inode);
	return 0;
fail:
	return err;
}
4577
EXPORT_SYMBOL(__page_symlink);
L
Linus Torvalds 已提交
4578

4579 4580 4581
int page_symlink(struct inode *inode, const char *symname, int len)
{
	return __page_symlink(inode, symname, len,
4582
			!(mapping_gfp_mask(inode->i_mapping) & __GFP_FS));
4583
}
4584
EXPORT_SYMBOL(page_symlink);
4585

4586
const struct inode_operations page_symlink_inode_operations = {
L
Linus Torvalds 已提交
4587 4588 4589 4590 4591
	.readlink	= generic_readlink,
	.follow_link	= page_follow_link_light,
	.put_link	= page_put_link,
};
EXPORT_SYMBOL(page_symlink_inode_operations);