namei.c 27.2 KB
Newer Older
M
Miklos Szeredi 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * Copyright (C) 2011 Novell Inc.
 * Copyright (C) 2016 Red Hat, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */

#include <linux/fs.h>
11
#include <linux/cred.h>
A
Amir Goldstein 已提交
12
#include <linux/ctype.h>
M
Miklos Szeredi 已提交
13 14
#include <linux/namei.h>
#include <linux/xattr.h>
M
Miklos Szeredi 已提交
15
#include <linux/ratelimit.h>
16 17
#include <linux/mount.h>
#include <linux/exportfs.h>
M
Miklos Szeredi 已提交
18 19
#include "overlayfs.h"

20
struct ovl_lookup_data {
A
Amir Goldstein 已提交
21
	struct super_block *sb;
22 23 24 25 26
	struct qstr name;
	bool is_dir;
	bool opaque;
	bool stop;
	bool last;
M
Miklos Szeredi 已提交
27
	char *redirect;
28
	bool metacopy;
29
};
M
Miklos Szeredi 已提交
30

M
Miklos Szeredi 已提交
31 32 33 34
static int ovl_check_redirect(struct dentry *dentry, struct ovl_lookup_data *d,
			      size_t prelen, const char *post)
{
	int res;
35
	char *buf;
M
Miklos Szeredi 已提交
36

37 38 39
	buf = ovl_get_redirect_xattr(dentry, prelen + strlen(post));
	if (IS_ERR_OR_NULL(buf))
		return PTR_ERR(buf);
M
Miklos Szeredi 已提交
40 41

	if (buf[0] == '/') {
42 43 44 45 46 47 48 49 50
		/*
		 * One of the ancestor path elements in an absolute path
		 * lookup in ovl_lookup_layer() could have been opaque and
		 * that will stop further lookup in lower layers (d->stop=true)
		 * But we have found an absolute redirect in decendant path
		 * element and that should force continue lookup in lower
		 * layers (reset d->stop).
		 */
		d->stop = false;
M
Miklos Szeredi 已提交
51
	} else {
52
		res = strlen(buf) + 1;
M
Miklos Szeredi 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65
		memmove(buf + prelen, buf, res);
		memcpy(buf, d->name.name, prelen);
	}

	strcat(buf, post);
	kfree(d->redirect);
	d->redirect = buf;
	d->name.name = d->redirect;
	d->name.len = strlen(d->redirect);

	return 0;
}

66 67
static int ovl_acceptable(void *ctx, struct dentry *dentry)
{
68 69 70 71 72 73 74 75 76 77 78 79 80
	/*
	 * A non-dir origin may be disconnected, which is fine, because
	 * we only need it for its unique inode number.
	 */
	if (!d_is_dir(dentry))
		return 1;

	/* Don't decode a deleted empty directory */
	if (d_unhashed(dentry))
		return 0;

	/* Check if directory belongs to the layer we are decoding from */
	return is_subdir(dentry, ((struct vfsmount *)ctx)->mnt_root);
81 82
}

83 84 85 86 87 88 89
/*
 * Check validity of an overlay file handle buffer.
 *
 * Return 0 for a valid file handle.
 * Return -ENODATA for "origin unknown".
 * Return <0 for an invalid file handle.
 */
90
int ovl_check_fh_len(struct ovl_fh *fh, int fh_len)
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
{
	if (fh_len < sizeof(struct ovl_fh) || fh_len < fh->len)
		return -EINVAL;

	if (fh->magic != OVL_FH_MAGIC)
		return -EINVAL;

	/* Treat larger version and unknown flags as "origin unknown" */
	if (fh->version > OVL_FH_VERSION || fh->flags & ~OVL_FH_FLAG_ALL)
		return -ENODATA;

	/* Treat endianness mismatch as "origin unknown" */
	if (!(fh->flags & OVL_FH_FLAG_ANY_ENDIAN) &&
	    (fh->flags & OVL_FH_FLAG_BIG_ENDIAN) != OVL_FH_FLAG_CPU_ENDIAN)
		return -ENODATA;

	return 0;
}

110
static struct ovl_fh *ovl_get_fh(struct dentry *dentry, const char *name)
111
{
112
	int res, err;
113 114
	struct ovl_fh *fh = NULL;

115
	res = vfs_getxattr(dentry, name, NULL, 0);
116 117 118 119 120 121 122 123 124
	if (res < 0) {
		if (res == -ENODATA || res == -EOPNOTSUPP)
			return NULL;
		goto fail;
	}
	/* Zero size value means "copied up but origin unknown" */
	if (res == 0)
		return NULL;

125
	fh = kzalloc(res, GFP_KERNEL);
126 127 128
	if (!fh)
		return ERR_PTR(-ENOMEM);

129
	res = vfs_getxattr(dentry, name, fh, res);
130 131 132
	if (res < 0)
		goto fail;

133 134 135 136
	err = ovl_check_fh_len(fh, res);
	if (err < 0) {
		if (err == -ENODATA)
			goto out;
137
		goto invalid;
138
	}
139

140 141 142 143 144 145 146 147 148 149 150 151 152 153
	return fh;

out:
	kfree(fh);
	return NULL;

fail:
	pr_warn_ratelimited("overlayfs: failed to get origin (%i)\n", res);
	goto out;
invalid:
	pr_warn_ratelimited("overlayfs: invalid origin (%*phN)\n", res, fh);
	goto out;
}

154 155
struct dentry *ovl_decode_real_fh(struct ovl_fh *fh, struct vfsmount *mnt,
				  bool connected)
156
{
157
	struct dentry *real;
158 159
	int bytes;

160 161 162 163
	/*
	 * Make sure that the stored uuid matches the uuid of the lower
	 * layer where file handle will be decoded.
	 */
164
	if (!uuid_equal(&fh->uuid, &mnt->mnt_sb->s_uuid))
165
		return NULL;
166

167
	bytes = (fh->len - offsetof(struct ovl_fh, fid));
168 169
	real = exportfs_decode_fh(mnt, (struct fid *)fh->fid,
				  bytes >> 2, (int)fh->type,
170
				  connected ? ovl_acceptable : NULL, mnt);
171 172 173 174 175 176 177 178 179 180 181
	if (IS_ERR(real)) {
		/*
		 * Treat stale file handle to lower file as "origin unknown".
		 * upper file handle could become stale when upper file is
		 * unlinked and this information is needed to handle stale
		 * index entries correctly.
		 */
		if (real == ERR_PTR(-ESTALE) &&
		    !(fh->flags & OVL_FH_FLAG_PATH_UPPER))
			real = NULL;
		return real;
182 183
	}

184 185
	if (ovl_dentry_weird(real)) {
		dput(real);
186 187
		return NULL;
	}
188

189
	return real;
190 191
}

192 193 194 195 196
static bool ovl_is_opaquedir(struct dentry *dentry)
{
	return ovl_check_dir_xattr(dentry, OVL_XATTR_OPAQUE);
}

197 198
static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
			     const char *name, unsigned int namelen,
M
Miklos Szeredi 已提交
199
			     size_t prelen, const char *post,
200 201 202 203
			     struct dentry **ret)
{
	struct dentry *this;
	int err;
204
	bool last_element = !post[0];
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

	this = lookup_one_len_unlocked(name, base, namelen);
	if (IS_ERR(this)) {
		err = PTR_ERR(this);
		this = NULL;
		if (err == -ENOENT || err == -ENAMETOOLONG)
			goto out;
		goto out_err;
	}
	if (!this->d_inode)
		goto put_and_out;

	if (ovl_dentry_weird(this)) {
		/* Don't support traversing automounts and other weirdness */
		err = -EREMOTE;
		goto out_err;
	}
	if (ovl_is_whiteout(this)) {
		d->stop = d->opaque = true;
		goto put_and_out;
	}
226 227 228 229 230
	/*
	 * This dentry should be a regular file if previous layer lookup
	 * found a metacopy dentry.
	 */
	if (last_element && d->metacopy && !d_is_reg(this)) {
231
		d->stop = true;
232 233 234 235 236
		goto put_and_out;
	}
	if (!d_can_lookup(this)) {
		if (d->is_dir || !last_element) {
			d->stop = true;
237
			goto put_and_out;
238 239 240 241
		}
		err = ovl_check_metacopy_xattr(this);
		if (err < 0)
			goto out_err;
242

243 244
		d->metacopy = err;
		d->stop = !d->metacopy;
245 246
		if (!d->metacopy || d->last)
			goto out;
247
	} else {
A
Amir Goldstein 已提交
248 249 250 251 252 253
		if (ovl_lookup_trap_inode(d->sb, this)) {
			/* Caught in a trap of overlapping layers */
			err = -ELOOP;
			goto out_err;
		}

254
		if (last_element)
255 256 257 258 259 260 261 262 263 264
			d->is_dir = true;
		if (d->last)
			goto out;

		if (ovl_is_opaquedir(this)) {
			d->stop = true;
			if (last_element)
				d->opaque = true;
			goto out;
		}
265
	}
M
Miklos Szeredi 已提交
266 267 268
	err = ovl_check_redirect(this, d, prelen, post);
	if (err)
		goto out_err;
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
out:
	*ret = this;
	return 0;

put_and_out:
	dput(this);
	this = NULL;
	goto out;

out_err:
	dput(this);
	return err;
}

static int ovl_lookup_layer(struct dentry *base, struct ovl_lookup_data *d,
			    struct dentry **ret)
{
286 287
	/* Counting down from the end, since the prefix can change */
	size_t rem = d->name.len - 1;
M
Miklos Szeredi 已提交
288 289 290
	struct dentry *dentry = NULL;
	int err;

291
	if (d->name.name[0] != '/')
M
Miklos Szeredi 已提交
292 293 294
		return ovl_lookup_single(base, d, d->name.name, d->name.len,
					 0, "", ret);

295 296
	while (!IS_ERR_OR_NULL(base) && d_can_lookup(base)) {
		const char *s = d->name.name + d->name.len - rem;
M
Miklos Szeredi 已提交
297
		const char *next = strchrnul(s, '/');
298 299
		size_t thislen = next - s;
		bool end = !next[0];
M
Miklos Szeredi 已提交
300

301 302
		/* Verify we did not go off the rails */
		if (WARN_ON(s[-1] != '/'))
M
Miklos Szeredi 已提交
303 304
			return -EIO;

305 306
		err = ovl_lookup_single(base, d, s, thislen,
					d->name.len - rem, next, &base);
M
Miklos Szeredi 已提交
307 308 309 310
		dput(dentry);
		if (err)
			return err;
		dentry = base;
311 312 313 314 315 316 317
		if (end)
			break;

		rem -= thislen + 1;

		if (WARN_ON(rem >= d->name.len))
			return -EIO;
M
Miklos Szeredi 已提交
318 319 320
	}
	*ret = dentry;
	return 0;
321 322
}

323

324
int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
325
			struct dentry *upperdentry, struct ovl_path **stackp)
326
{
327 328
	struct dentry *origin = NULL;
	int i;
329

330
	for (i = 0; i < ofs->numlower; i++) {
331 332
		origin = ovl_decode_real_fh(fh, ofs->lower_layers[i].mnt,
					    connected);
333 334 335 336 337
		if (origin)
			break;
	}

	if (!origin)
338 339 340 341
		return -ESTALE;
	else if (IS_ERR(origin))
		return PTR_ERR(origin);

342
	if (upperdentry && !ovl_is_whiteout(upperdentry) &&
343 344
	    ((d_inode(origin)->i_mode ^ d_inode(upperdentry)->i_mode) & S_IFMT))
		goto invalid;
345

346
	if (!*stackp)
347
		*stackp = kmalloc(sizeof(struct ovl_path), GFP_KERNEL);
348 349 350 351
	if (!*stackp) {
		dput(origin);
		return -ENOMEM;
	}
352 353 354 355
	**stackp = (struct ovl_path){
		.dentry = origin,
		.layer = &ofs->lower_layers[i]
	};
356 357

	return 0;
358 359 360 361 362 363 364 365 366

invalid:
	pr_warn_ratelimited("overlayfs: invalid origin (%pd2, ftype=%x, origin ftype=%x).\n",
			    upperdentry, d_inode(upperdentry)->i_mode & S_IFMT,
			    d_inode(origin)->i_mode & S_IFMT);
	dput(origin);
	return -EIO;
}

367
static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry,
368 369
			    struct ovl_path **stackp, unsigned int *ctrp)
{
370
	struct ovl_fh *fh = ovl_get_fh(upperdentry, OVL_XATTR_ORIGIN);
371 372 373 374 375
	int err;

	if (IS_ERR_OR_NULL(fh))
		return PTR_ERR(fh);

376
	err = ovl_check_origin_fh(ofs, fh, false, upperdentry, stackp);
377 378 379 380 381 382 383 384 385 386 387 388 389
	kfree(fh);

	if (err) {
		if (err == -ESTALE)
			return 0;
		return err;
	}

	if (WARN_ON(*ctrp))
		return -EIO;

	*ctrp = 1;
	return 0;
390 391
}

392
/*
393
 * Verify that @fh matches the file handle stored in xattr @name.
394 395
 * Return 0 on match, -ESTALE on mismatch, < 0 on error.
 */
396 397
static int ovl_verify_fh(struct dentry *dentry, const char *name,
			 const struct ovl_fh *fh)
398
{
399
	struct ovl_fh *ofh = ovl_get_fh(dentry, name);
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415
	int err = 0;

	if (!ofh)
		return -ENODATA;

	if (IS_ERR(ofh))
		return PTR_ERR(ofh);

	if (fh->len != ofh->len || memcmp(fh, ofh, fh->len))
		err = -ESTALE;

	kfree(ofh);
	return err;
}

/*
416
 * Verify that @real dentry matches the file handle stored in xattr @name.
417
 *
418 419
 * If @set is true and there is no stored file handle, encode @real and store
 * file handle in xattr @name.
420
 *
421
 * Return 0 on match, -ESTALE on mismatch, -ENODATA on no xattr, < 0 on error.
422
 */
423 424
int ovl_verify_set_fh(struct dentry *dentry, const char *name,
		      struct dentry *real, bool is_upper, bool set)
425 426 427 428 429
{
	struct inode *inode;
	struct ovl_fh *fh;
	int err;

430
	fh = ovl_encode_real_fh(real, is_upper);
431
	err = PTR_ERR(fh);
432 433
	if (IS_ERR(fh)) {
		fh = NULL;
434
		goto fail;
435
	}
436

437
	err = ovl_verify_fh(dentry, name, fh);
438
	if (set && err == -ENODATA)
439
		err = ovl_do_setxattr(dentry, name, fh, fh->len, 0);
440 441 442 443 444 445 446 447
	if (err)
		goto fail;

out:
	kfree(fh);
	return err;

fail:
448 449 450 451
	inode = d_inode(real);
	pr_warn_ratelimited("overlayfs: failed to verify %s (%pd2, ino=%lu, err=%i)\n",
			    is_upper ? "upper" : "origin", real,
			    inode ? inode->i_ino : 0, err);
452 453 454
	goto out;
}

455
/* Get upper dentry from index */
456
struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index)
457 458 459 460 461 462 463 464 465 466 467
{
	struct ovl_fh *fh;
	struct dentry *upper;

	if (!d_is_dir(index))
		return dget(index);

	fh = ovl_get_fh(index, OVL_XATTR_UPPER);
	if (IS_ERR_OR_NULL(fh))
		return ERR_CAST(fh);

468
	upper = ovl_decode_real_fh(fh, ofs->upper_mnt, true);
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483
	kfree(fh);

	if (IS_ERR_OR_NULL(upper))
		return upper ?: ERR_PTR(-ESTALE);

	if (!d_is_dir(upper)) {
		pr_warn_ratelimited("overlayfs: invalid index upper (%pd2, upper=%pd2).\n",
				    index, upper);
		dput(upper);
		return ERR_PTR(-EIO);
	}

	return upper;
}

A
Amir Goldstein 已提交
484 485 486 487 488 489
/* Is this a leftover from create/whiteout of directory index entry? */
static bool ovl_is_temp_index(struct dentry *index)
{
	return index->d_name.name[0] == '#';
}

490 491 492 493 494
/*
 * Verify that an index entry name matches the origin file handle stored in
 * OVL_XATTR_ORIGIN and that origin file handle can be decoded to lower path.
 * Return 0 on match, -ESTALE on mismatch or stale origin, < 0 on error.
 */
495
int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index)
496 497 498
{
	struct ovl_fh *fh = NULL;
	size_t len;
499 500
	struct ovl_path origin = { };
	struct ovl_path *stack = &origin;
501
	struct dentry *upper = NULL;
502 503 504 505 506
	int err;

	if (!d_inode(index))
		return 0;

A
Amir Goldstein 已提交
507 508 509 510 511
	/* Cleanup leftover from index create/cleanup attempt */
	err = -ESTALE;
	if (ovl_is_temp_index(index))
		goto fail;

512
	err = -EINVAL;
513 514 515 516 517
	if (index->d_name.len < sizeof(struct ovl_fh)*2)
		goto fail;

	err = -ENOMEM;
	len = index->d_name.len / 2;
518
	fh = kzalloc(len, GFP_KERNEL);
519 520 521 522
	if (!fh)
		goto fail;

	err = -EINVAL;
523 524 525 526 527
	if (hex2bin((u8 *)fh, index->d_name.name, len))
		goto fail;

	err = ovl_check_fh_len(fh, len);
	if (err)
528 529
		goto fail;

530 531 532 533 534 535 536 537
	/*
	 * Whiteout index entries are used as an indication that an exported
	 * overlay file handle should be treated as stale (i.e. after unlink
	 * of the overlay inode). These entries contain no origin xattr.
	 */
	if (ovl_is_whiteout(index))
		goto out;

538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
	/*
	 * Verifying directory index entries are not stale is expensive, so
	 * only verify stale dir index if NFS export is enabled.
	 */
	if (d_is_dir(index) && !ofs->config.nfs_export)
		goto out;

	/*
	 * Directory index entries should have 'upper' xattr pointing to the
	 * real upper dir. Non-dir index entries are hardlinks to the upper
	 * real inode. For non-dir index, we can read the copy up origin xattr
	 * directly from the index dentry, but for dir index we first need to
	 * decode the upper directory.
	 */
	upper = ovl_index_upper(ofs, index);
	if (IS_ERR_OR_NULL(upper)) {
		err = PTR_ERR(upper);
555 556 557 558 559 560 561 562 563
		/*
		 * Directory index entries with no 'upper' xattr need to be
		 * removed. When dir index entry has a stale 'upper' xattr,
		 * we assume that upper dir was removed and we treat the dir
		 * index as orphan entry that needs to be whited out.
		 */
		if (err == -ESTALE)
			goto orphan;
		else if (!err)
564
			err = -ESTALE;
565
		goto fail;
566
	}
567

568 569
	err = ovl_verify_fh(upper, OVL_XATTR_ORIGIN, fh);
	dput(upper);
570 571 572
	if (err)
		goto fail;

573 574
	/* Check if non-dir index is orphan and don't warn before cleaning it */
	if (!d_is_dir(index) && d_inode(index)->i_nlink == 1) {
575
		err = ovl_check_origin_fh(ofs, fh, false, index, &stack);
576 577 578 579
		if (err)
			goto fail;

		if (ovl_get_nlink(origin.dentry, index, 0) == 0)
580
			goto orphan;
581
	}
582

583
out:
584
	dput(origin.dentry);
585 586 587 588
	kfree(fh);
	return err;

fail:
589 590
	pr_warn_ratelimited("overlayfs: failed to verify index (%pd2, ftype=%x, err=%i)\n",
			    index, d_inode(index)->i_mode & S_IFMT, err);
591
	goto out;
592 593 594 595 596 597 598

orphan:
	pr_warn_ratelimited("overlayfs: orphan index entry (%pd2, ftype=%x, nlink=%u)\n",
			    index, d_inode(index)->i_mode & S_IFMT,
			    d_inode(index)->i_nlink);
	err = -ENOENT;
	goto out;
599 600
}

601 602 603 604
static int ovl_get_index_name_fh(struct ovl_fh *fh, struct qstr *name)
{
	char *n, *s;

K
Kees Cook 已提交
605
	n = kcalloc(fh->len, 2, GFP_KERNEL);
606 607 608 609 610 611 612 613 614 615
	if (!n)
		return -ENOMEM;

	s  = bin2hex(n, fh, fh->len);
	*name = (struct qstr) QSTR_INIT(n, s - n);

	return 0;

}

616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
/*
 * Lookup in indexdir for the index entry of a lower real inode or a copy up
 * origin inode. The index entry name is the hex representation of the lower
 * inode file handle.
 *
 * If the index dentry in negative, then either no lower aliases have been
 * copied up yet, or aliases have been copied up in older kernels and are
 * not indexed.
 *
 * If the index dentry for a copy up origin inode is positive, but points
 * to an inode different than the upper inode, then either the upper inode
 * has been copied up and not indexed or it was indexed, but since then
 * index dir was cleared. Either way, that index cannot be used to indentify
 * the overlay inode.
 */
int ovl_get_index_name(struct dentry *origin, struct qstr *name)
{
	struct ovl_fh *fh;
634
	int err;
635

636
	fh = ovl_encode_real_fh(origin, false);
637 638 639
	if (IS_ERR(fh))
		return PTR_ERR(fh);

640
	err = ovl_get_index_name_fh(fh, name);
641

642
	kfree(fh);
643
	return err;
644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672
}

/* Lookup index by file handle for NFS export */
struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh)
{
	struct dentry *index;
	struct qstr name;
	int err;

	err = ovl_get_index_name_fh(fh, &name);
	if (err)
		return ERR_PTR(err);

	index = lookup_one_len_unlocked(name.name, ofs->indexdir, name.len);
	kfree(name.name);
	if (IS_ERR(index)) {
		if (PTR_ERR(index) == -ENOENT)
			index = NULL;
		return index;
	}

	if (d_is_negative(index))
		err = 0;
	else if (ovl_is_whiteout(index))
		err = -ESTALE;
	else if (ovl_dentry_weird(index))
		err = -EIO;
	else
		return index;
673

674 675
	dput(index);
	return ERR_PTR(err);
676 677
}

678 679
struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper,
				struct dentry *origin, bool verify)
680 681 682 683
{
	struct dentry *index;
	struct inode *inode;
	struct qstr name;
684
	bool is_dir = d_is_dir(origin);
685 686 687 688 689 690 691 692
	int err;

	err = ovl_get_index_name(origin, &name);
	if (err)
		return ERR_PTR(err);

	index = lookup_one_len_unlocked(name.name, ofs->indexdir, name.len);
	if (IS_ERR(index)) {
693
		err = PTR_ERR(index);
694 695 696 697
		if (err == -ENOENT) {
			index = NULL;
			goto out;
		}
698
		pr_warn_ratelimited("overlayfs: failed inode index lookup (ino=%lu, key=%.*s, err=%i);\n"
699 700 701 702 703 704
				    "overlayfs: mount with '-o index=off' to disable inodes index.\n",
				    d_inode(origin)->i_ino, name.len, name.name,
				    err);
		goto out;
	}

705
	inode = d_inode(index);
706
	if (d_is_negative(index)) {
707
		goto out_dput;
708 709 710 711 712 713 714 715 716 717
	} else if (ovl_is_whiteout(index) && !verify) {
		/*
		 * When index lookup is called with !verify for decoding an
		 * overlay file handle, a whiteout index implies that decode
		 * should treat file handle as stale and no need to print a
		 * warning about it.
		 */
		dput(index);
		index = ERR_PTR(-ESTALE);
		goto out;
718 719 720 721 722 723 724 725 726 727 728 729
	} else if (ovl_dentry_weird(index) || ovl_is_whiteout(index) ||
		   ((inode->i_mode ^ d_inode(origin)->i_mode) & S_IFMT)) {
		/*
		 * Index should always be of the same file type as origin
		 * except for the case of a whiteout index. A whiteout
		 * index should only exist if all lower aliases have been
		 * unlinked, which means that finding a lower origin on lookup
		 * whose index is a whiteout should be treated as an error.
		 */
		pr_warn_ratelimited("overlayfs: bad index found (index=%pd2, ftype=%x, origin ftype=%x).\n",
				    index, d_inode(index)->i_mode & S_IFMT,
				    d_inode(origin)->i_mode & S_IFMT);
730
		goto fail;
731
	} else if (is_dir && verify) {
732 733 734 735 736
		if (!upper) {
			pr_warn_ratelimited("overlayfs: suspected uncovered redirected dir found (origin=%pd2, index=%pd2).\n",
					    origin, index);
			goto fail;
		}
737

738 739 740 741 742 743 744 745 746 747 748 749
		/* Verify that dir index 'upper' xattr points to upper dir */
		err = ovl_verify_upper(index, upper, false);
		if (err) {
			if (err == -ESTALE) {
				pr_warn_ratelimited("overlayfs: suspected multiply redirected dir found (upper=%pd2, origin=%pd2, index=%pd2).\n",
						    upper, origin, index);
			}
			goto fail;
		}
	} else if (upper && d_inode(upper) != inode) {
		goto out_dput;
	}
750 751 752 753
out:
	kfree(name.name);
	return index;

754 755 756 757 758
out_dput:
	dput(index);
	index = NULL;
	goto out;

759 760 761 762 763 764
fail:
	dput(index);
	index = ERR_PTR(-EIO);
	goto out;
}

M
Miklos Szeredi 已提交
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780
/*
 * Returns next layer in stack starting from top.
 * Returns -1 if this is the last layer.
 */
int ovl_path_next(int idx, struct dentry *dentry, struct path *path)
{
	struct ovl_entry *oe = dentry->d_fsdata;

	BUG_ON(idx < 0);
	if (idx == 0) {
		ovl_path_upper(dentry, path);
		if (path->dentry)
			return oe->numlower ? 1 : -1;
		idx++;
	}
	BUG_ON(idx > oe->numlower);
781 782
	path->dentry = oe->lowerstack[idx - 1].dentry;
	path->mnt = oe->lowerstack[idx - 1].layer->mnt;
M
Miklos Szeredi 已提交
783 784 785 786

	return (idx < oe->numlower) ? idx + 1 : -1;
}

787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807
/* Fix missing 'origin' xattr */
static int ovl_fix_origin(struct dentry *dentry, struct dentry *lower,
			  struct dentry *upper)
{
	int err;

	if (ovl_check_origin_xattr(upper))
		return 0;

	err = ovl_want_write(dentry);
	if (err)
		return err;

	err = ovl_set_origin(dentry, lower, upper);
	if (!err)
		err = ovl_set_impure(dentry->d_parent, upper->d_parent);

	ovl_drop_write(dentry);
	return err;
}

M
Miklos Szeredi 已提交
808 809 810 811 812
struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
			  unsigned int flags)
{
	struct ovl_entry *oe;
	const struct cred *old_cred;
M
Miklos Szeredi 已提交
813
	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
M
Miklos Szeredi 已提交
814
	struct ovl_entry *poe = dentry->d_parent->d_fsdata;
815
	struct ovl_entry *roe = dentry->d_sb->s_root->d_fsdata;
816
	struct ovl_path *stack = NULL, *origin_path = NULL;
M
Miklos Szeredi 已提交
817
	struct dentry *upperdir, *upperdentry = NULL;
818
	struct dentry *origin = NULL;
819
	struct dentry *index = NULL;
M
Miklos Szeredi 已提交
820 821 822
	unsigned int ctr = 0;
	struct inode *inode = NULL;
	bool upperopaque = false;
M
Miklos Szeredi 已提交
823
	char *upperredirect = NULL;
M
Miklos Szeredi 已提交
824 825 826
	struct dentry *this;
	unsigned int i;
	int err;
827
	bool metacopy = false;
828
	struct ovl_lookup_data d = {
A
Amir Goldstein 已提交
829
		.sb = dentry->d_sb,
830 831 832 833
		.name = dentry->d_name,
		.is_dir = false,
		.opaque = false,
		.stop = false,
834
		.last = ofs->config.redirect_follow ? false : !poe->numlower,
M
Miklos Szeredi 已提交
835
		.redirect = NULL,
836
		.metacopy = false,
837
	};
M
Miklos Szeredi 已提交
838

M
Miklos Szeredi 已提交
839 840 841
	if (dentry->d_name.len > ofs->namelen)
		return ERR_PTR(-ENAMETOOLONG);

M
Miklos Szeredi 已提交
842
	old_cred = ovl_override_creds(dentry->d_sb);
843
	upperdir = ovl_dentry_upper(dentry->d_parent);
M
Miklos Szeredi 已提交
844
	if (upperdir) {
845 846
		err = ovl_lookup_layer(upperdir, &d, &upperdentry);
		if (err)
M
Miklos Szeredi 已提交
847 848
			goto out;

849 850 851 852
		if (upperdentry && unlikely(ovl_dentry_remote(upperdentry))) {
			dput(upperdentry);
			err = -EREMOTE;
			goto out;
M
Miklos Szeredi 已提交
853
		}
854
		if (upperdentry && !d.is_dir) {
855 856
			unsigned int origin_ctr = 0;

857 858 859 860 861 862 863 864 865 866
			/*
			 * Lookup copy up origin by decoding origin file handle.
			 * We may get a disconnected dentry, which is fine,
			 * because we only need to hold the origin inode in
			 * cache and use its inode number.  We may even get a
			 * connected dentry, that is not under any of the lower
			 * layers root.  That is also fine for using it's inode
			 * number - it's the same as if we held a reference
			 * to a dentry in lower layer that was moved under us.
			 */
867 868
			err = ovl_check_origin(ofs, upperdentry, &origin_path,
					       &origin_ctr);
869
			if (err)
870
				goto out_put_upper;
871 872 873

			if (d.metacopy)
				metacopy = true;
874
		}
M
Miklos Szeredi 已提交
875 876

		if (d.redirect) {
877
			err = -ENOMEM;
M
Miklos Szeredi 已提交
878 879 880 881
			upperredirect = kstrdup(d.redirect, GFP_KERNEL);
			if (!upperredirect)
				goto out_put_upper;
			if (d.redirect[0] == '/')
882
				poe = roe;
M
Miklos Szeredi 已提交
883
		}
884
		upperopaque = d.opaque;
M
Miklos Szeredi 已提交
885 886
	}

887
	if (!d.stop && poe->numlower) {
M
Miklos Szeredi 已提交
888
		err = -ENOMEM;
889
		stack = kcalloc(ofs->numlower, sizeof(struct ovl_path),
890
				GFP_KERNEL);
M
Miklos Szeredi 已提交
891 892 893 894
		if (!stack)
			goto out_put_upper;
	}

895
	for (i = 0; !d.stop && i < poe->numlower; i++) {
896
		struct ovl_path lower = poe->lowerstack[i];
M
Miklos Szeredi 已提交
897

898 899 900 901 902
		if (!ofs->config.redirect_follow)
			d.last = i == poe->numlower - 1;
		else
			d.last = lower.layer->idx == roe->numlower;

903
		err = ovl_lookup_layer(lower.dentry, &d, &this);
904
		if (err)
M
Miklos Szeredi 已提交
905
			goto out_put;
M
Miklos Szeredi 已提交
906

M
Miklos Szeredi 已提交
907 908 909
		if (!this)
			continue;

910 911 912 913
		/*
		 * If no origin fh is stored in upper of a merge dir, store fh
		 * of lower dir and set upper parent "impure".
		 */
914
		if (upperdentry && !ctr && !ofs->noxattr && d.is_dir) {
915 916 917 918 919 920 921
			err = ovl_fix_origin(dentry, this, upperdentry);
			if (err) {
				dput(this);
				goto out_put;
			}
		}

922 923
		/*
		 * When "verify_lower" feature is enabled, do not merge with a
924 925
		 * lower dir that does not match a stored origin xattr. In any
		 * case, only verified origin is used for index lookup.
926 927 928 929
		 *
		 * For non-dir dentry, if index=on, then ensure origin
		 * matches the dentry found using path based lookup,
		 * otherwise error out.
930
		 */
931 932 933
		if (upperdentry && !ctr &&
		    ((d.is_dir && ovl_verify_lower(dentry->d_sb)) ||
		     (!d.is_dir && ofs->config.index && origin_path))) {
934 935 936
			err = ovl_verify_origin(upperdentry, this, false);
			if (err) {
				dput(this);
937 938 939
				if (d.is_dir)
					break;
				goto out_put;
940
			}
941
			origin = this;
942 943
		}

944 945 946 947 948 949 950 951 952 953 954
		if (d.metacopy)
			metacopy = true;
		/*
		 * Do not store intermediate metacopy dentries in chain,
		 * except top most lower metacopy dentry
		 */
		if (d.metacopy && ctr) {
			dput(this);
			continue;
		}

M
Miklos Szeredi 已提交
955
		stack[ctr].dentry = this;
956
		stack[ctr].layer = lower.layer;
M
Miklos Szeredi 已提交
957
		ctr++;
M
Miklos Szeredi 已提交
958

959 960 961 962 963 964 965 966 967 968 969 970
		/*
		 * Following redirects can have security consequences: it's like
		 * a symlink into the lower layer without the permission checks.
		 * This is only a problem if the upper layer is untrusted (e.g
		 * comes from an USB drive).  This can allow a non-readable file
		 * or directory to become readable.
		 *
		 * Only following redirects when redirects are enabled disables
		 * this attack vector when not necessary.
		 */
		err = -EPERM;
		if (d.redirect && !ofs->config.redirect_follow) {
971 972
			pr_warn_ratelimited("overlayfs: refusing to follow redirect for (%pd2)\n",
					    dentry);
973 974 975
			goto out_put;
		}

976 977 978
		if (d.stop)
			break;

979 980
		if (d.redirect && d.redirect[0] == '/' && poe != roe) {
			poe = roe;
M
Miklos Szeredi 已提交
981
			/* Find the current layer on the root dentry */
982
			i = lower.layer->idx - 1;
M
Miklos Szeredi 已提交
983
		}
M
Miklos Szeredi 已提交
984 985
	}

986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011
	if (metacopy) {
		/*
		 * Found a metacopy dentry but did not find corresponding
		 * data dentry
		 */
		if (d.metacopy) {
			err = -EIO;
			goto out_put;
		}

		err = -EPERM;
		if (!ofs->config.metacopy) {
			pr_warn_ratelimited("overlay: refusing to follow metacopy origin for (%pd2)\n",
					    dentry);
			goto out_put;
		}
	} else if (!d.is_dir && upperdentry && !ctr && origin_path) {
		if (WARN_ON(stack != NULL)) {
			err = -EIO;
			goto out_put;
		}
		stack = origin_path;
		ctr = 1;
		origin_path = NULL;
	}

1012 1013 1014 1015
	/*
	 * Lookup index by lower inode and verify it matches upper inode.
	 * We only trust dir index if we verified that lower dir matches
	 * origin, otherwise dir index entries may be inconsistent and we
1016 1017 1018 1019 1020 1021 1022 1023 1024 1025
	 * ignore them.
	 *
	 * For non-dir upper metacopy dentry, we already set "origin" if we
	 * verified that lower matched upper origin. If upper origin was
	 * not present (because lower layer did not support fh encode/decode),
	 * or indexing is not enabled, do not set "origin" and skip looking up
	 * index. This case should be handled in same way as a non-dir upper
	 * without ORIGIN is handled.
	 *
	 * Always lookup index of non-dir non-metacopy and non-upper.
1026
	 */
1027
	if (ctr && (!upperdentry || (!d.is_dir && !metacopy)))
1028
		origin = stack[0].dentry;
1029

1030 1031
	if (origin && ovl_indexdir(dentry->d_sb) &&
	    (!d.is_dir || ovl_index_all(dentry->d_sb))) {
1032
		index = ovl_lookup_index(ofs, upperdentry, origin, true);
1033 1034 1035 1036 1037 1038 1039
		if (IS_ERR(index)) {
			err = PTR_ERR(index);
			index = NULL;
			goto out_put;
		}
	}

M
Miklos Szeredi 已提交
1040 1041 1042 1043 1044
	oe = ovl_alloc_entry(ctr);
	err = -ENOMEM;
	if (!oe)
		goto out_put;

1045
	memcpy(oe->lowerstack, stack, sizeof(struct ovl_path) * ctr);
M
Miklos Szeredi 已提交
1046
	dentry->d_fsdata = oe;
M
Miklos Szeredi 已提交
1047

1048 1049 1050
	if (upperopaque)
		ovl_dentry_set_opaque(dentry);

1051 1052
	if (upperdentry)
		ovl_dentry_set_upper_alias(dentry);
1053
	else if (index) {
1054
		upperdentry = dget(index);
1055 1056 1057 1058 1059 1060 1061
		upperredirect = ovl_get_redirect_xattr(upperdentry, 0);
		if (IS_ERR(upperredirect)) {
			err = PTR_ERR(upperredirect);
			upperredirect = NULL;
			goto out_free_oe;
		}
	}
1062

M
Miklos Szeredi 已提交
1063
	if (upperdentry || ctr) {
1064 1065 1066 1067 1068
		struct ovl_inode_params oip = {
			.upperdentry = upperdentry,
			.lowerpath = stack,
			.index = index,
			.numlower = ctr,
1069
			.redirect = upperredirect,
1070 1071
			.lowerdata = (ctr > 1 && !d.is_dir) ?
				      stack[ctr - 1].dentry : NULL,
1072 1073 1074
		};

		inode = ovl_get_inode(dentry->d_sb, &oip);
1075 1076
		err = PTR_ERR(inode);
		if (IS_ERR(inode))
M
Miklos Szeredi 已提交
1077 1078 1079 1080
			goto out_free_oe;
	}

	revert_creds(old_cred);
1081 1082 1083 1084
	if (origin_path) {
		dput(origin_path->dentry);
		kfree(origin_path);
	}
1085
	dput(index);
M
Miklos Szeredi 已提交
1086
	kfree(stack);
M
Miklos Szeredi 已提交
1087
	kfree(d.redirect);
1088
	return d_splice_alias(inode, dentry);
M
Miklos Szeredi 已提交
1089 1090

out_free_oe:
M
Miklos Szeredi 已提交
1091
	dentry->d_fsdata = NULL;
M
Miklos Szeredi 已提交
1092 1093
	kfree(oe);
out_put:
1094
	dput(index);
M
Miklos Szeredi 已提交
1095 1096 1097 1098
	for (i = 0; i < ctr; i++)
		dput(stack[i].dentry);
	kfree(stack);
out_put_upper:
1099 1100 1101 1102
	if (origin_path) {
		dput(origin_path->dentry);
		kfree(origin_path);
	}
M
Miklos Szeredi 已提交
1103
	dput(upperdentry);
M
Miklos Szeredi 已提交
1104
	kfree(upperredirect);
M
Miklos Szeredi 已提交
1105
out:
M
Miklos Szeredi 已提交
1106
	kfree(d.redirect);
M
Miklos Szeredi 已提交
1107 1108 1109 1110 1111 1112 1113 1114
	revert_creds(old_cred);
	return ERR_PTR(err);
}

bool ovl_lower_positive(struct dentry *dentry)
{
	struct ovl_entry *poe = dentry->d_parent->d_fsdata;
	const struct qstr *name = &dentry->d_name;
1115
	const struct cred *old_cred;
M
Miklos Szeredi 已提交
1116 1117 1118 1119 1120 1121 1122 1123 1124
	unsigned int i;
	bool positive = false;
	bool done = false;

	/*
	 * If dentry is negative, then lower is positive iff this is a
	 * whiteout.
	 */
	if (!dentry->d_inode)
1125
		return ovl_dentry_is_opaque(dentry);
M
Miklos Szeredi 已提交
1126 1127

	/* Negative upper -> positive lower */
1128
	if (!ovl_dentry_upper(dentry))
M
Miklos Szeredi 已提交
1129 1130
		return true;

1131
	old_cred = ovl_override_creds(dentry->d_sb);
M
Miklos Szeredi 已提交
1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160
	/* Positive upper -> have to look up lower to see whether it exists */
	for (i = 0; !done && !positive && i < poe->numlower; i++) {
		struct dentry *this;
		struct dentry *lowerdir = poe->lowerstack[i].dentry;

		this = lookup_one_len_unlocked(name->name, lowerdir,
					       name->len);
		if (IS_ERR(this)) {
			switch (PTR_ERR(this)) {
			case -ENOENT:
			case -ENAMETOOLONG:
				break;

			default:
				/*
				 * Assume something is there, we just couldn't
				 * access it.
				 */
				positive = true;
				break;
			}
		} else {
			if (this->d_inode) {
				positive = !ovl_is_whiteout(this);
				done = true;
			}
			dput(this);
		}
	}
1161
	revert_creds(old_cred);
M
Miklos Szeredi 已提交
1162 1163 1164

	return positive;
}