xref: /openbmc/linux/fs/overlayfs/util.c (revision 01a6e126)
1 /*
2  * Copyright (C) 2011 Novell Inc.
3  * Copyright (C) 2016 Red Hat, Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published by
7  * the Free Software Foundation.
8  */
9 
10 #include <linux/fs.h>
11 #include <linux/mount.h>
12 #include <linux/slab.h>
13 #include <linux/cred.h>
14 #include <linux/xattr.h>
15 #include <linux/exportfs.h>
16 #include <linux/uuid.h>
17 #include <linux/namei.h>
18 #include <linux/ratelimit.h>
19 #include "overlayfs.h"
20 
21 int ovl_want_write(struct dentry *dentry)
22 {
23 	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
24 	return mnt_want_write(ofs->upper_mnt);
25 }
26 
27 void ovl_drop_write(struct dentry *dentry)
28 {
29 	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
30 	mnt_drop_write(ofs->upper_mnt);
31 }
32 
33 struct dentry *ovl_workdir(struct dentry *dentry)
34 {
35 	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
36 	return ofs->workdir;
37 }
38 
39 const struct cred *ovl_override_creds(struct super_block *sb)
40 {
41 	struct ovl_fs *ofs = sb->s_fs_info;
42 
43 	return override_creds(ofs->creator_cred);
44 }
45 
46 struct super_block *ovl_same_sb(struct super_block *sb)
47 {
48 	struct ovl_fs *ofs = sb->s_fs_info;
49 
50 	return ofs->same_sb;
51 }
52 
53 bool ovl_can_decode_fh(struct super_block *sb)
54 {
55 	return (sb->s_export_op && sb->s_export_op->fh_to_dentry &&
56 		!uuid_is_null(&sb->s_uuid));
57 }
58 
59 struct dentry *ovl_indexdir(struct super_block *sb)
60 {
61 	struct ovl_fs *ofs = sb->s_fs_info;
62 
63 	return ofs->indexdir;
64 }
65 
66 /* Index all files on copy up. For now only enabled for NFS export */
67 bool ovl_index_all(struct super_block *sb)
68 {
69 	struct ovl_fs *ofs = sb->s_fs_info;
70 
71 	return ofs->config.nfs_export && ofs->config.index;
72 }
73 
74 /* Verify lower origin on lookup. For now only enabled for NFS export */
75 bool ovl_verify_lower(struct super_block *sb)
76 {
77 	struct ovl_fs *ofs = sb->s_fs_info;
78 
79 	return ofs->config.nfs_export && ofs->config.index;
80 }
81 
82 struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
83 {
84 	size_t size = offsetof(struct ovl_entry, lowerstack[numlower]);
85 	struct ovl_entry *oe = kzalloc(size, GFP_KERNEL);
86 
87 	if (oe)
88 		oe->numlower = numlower;
89 
90 	return oe;
91 }
92 
93 bool ovl_dentry_remote(struct dentry *dentry)
94 {
95 	return dentry->d_flags &
96 		(DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE |
97 		 DCACHE_OP_REAL);
98 }
99 
100 bool ovl_dentry_weird(struct dentry *dentry)
101 {
102 	return dentry->d_flags & (DCACHE_NEED_AUTOMOUNT |
103 				  DCACHE_MANAGE_TRANSIT |
104 				  DCACHE_OP_HASH |
105 				  DCACHE_OP_COMPARE);
106 }
107 
108 enum ovl_path_type ovl_path_type(struct dentry *dentry)
109 {
110 	struct ovl_entry *oe = dentry->d_fsdata;
111 	enum ovl_path_type type = 0;
112 
113 	if (ovl_dentry_upper(dentry)) {
114 		type = __OVL_PATH_UPPER;
115 
116 		/*
117 		 * Non-dir dentry can hold lower dentry of its copy up origin.
118 		 */
119 		if (oe->numlower) {
120 			type |= __OVL_PATH_ORIGIN;
121 			if (d_is_dir(dentry))
122 				type |= __OVL_PATH_MERGE;
123 		}
124 	} else {
125 		if (oe->numlower > 1)
126 			type |= __OVL_PATH_MERGE;
127 	}
128 	return type;
129 }
130 
131 void ovl_path_upper(struct dentry *dentry, struct path *path)
132 {
133 	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
134 
135 	path->mnt = ofs->upper_mnt;
136 	path->dentry = ovl_dentry_upper(dentry);
137 }
138 
139 void ovl_path_lower(struct dentry *dentry, struct path *path)
140 {
141 	struct ovl_entry *oe = dentry->d_fsdata;
142 
143 	if (oe->numlower) {
144 		path->mnt = oe->lowerstack[0].layer->mnt;
145 		path->dentry = oe->lowerstack[0].dentry;
146 	} else {
147 		*path = (struct path) { };
148 	}
149 }
150 
151 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path)
152 {
153 	enum ovl_path_type type = ovl_path_type(dentry);
154 
155 	if (!OVL_TYPE_UPPER(type))
156 		ovl_path_lower(dentry, path);
157 	else
158 		ovl_path_upper(dentry, path);
159 
160 	return type;
161 }
162 
163 struct dentry *ovl_dentry_upper(struct dentry *dentry)
164 {
165 	return ovl_upperdentry_dereference(OVL_I(d_inode(dentry)));
166 }
167 
168 struct dentry *ovl_dentry_lower(struct dentry *dentry)
169 {
170 	struct ovl_entry *oe = dentry->d_fsdata;
171 
172 	return oe->numlower ? oe->lowerstack[0].dentry : NULL;
173 }
174 
175 struct dentry *ovl_dentry_real(struct dentry *dentry)
176 {
177 	return ovl_dentry_upper(dentry) ?: ovl_dentry_lower(dentry);
178 }
179 
180 struct dentry *ovl_i_dentry_upper(struct inode *inode)
181 {
182 	return ovl_upperdentry_dereference(OVL_I(inode));
183 }
184 
185 struct inode *ovl_inode_upper(struct inode *inode)
186 {
187 	struct dentry *upperdentry = ovl_i_dentry_upper(inode);
188 
189 	return upperdentry ? d_inode(upperdentry) : NULL;
190 }
191 
192 struct inode *ovl_inode_lower(struct inode *inode)
193 {
194 	return OVL_I(inode)->lower;
195 }
196 
197 struct inode *ovl_inode_real(struct inode *inode)
198 {
199 	return ovl_inode_upper(inode) ?: ovl_inode_lower(inode);
200 }
201 
202 
203 struct ovl_dir_cache *ovl_dir_cache(struct inode *inode)
204 {
205 	return OVL_I(inode)->cache;
206 }
207 
208 void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache)
209 {
210 	OVL_I(inode)->cache = cache;
211 }
212 
213 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry)
214 {
215 	set_bit(flag, &OVL_E(dentry)->flags);
216 }
217 
218 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry)
219 {
220 	clear_bit(flag, &OVL_E(dentry)->flags);
221 }
222 
223 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry)
224 {
225 	return test_bit(flag, &OVL_E(dentry)->flags);
226 }
227 
228 bool ovl_dentry_is_opaque(struct dentry *dentry)
229 {
230 	return ovl_dentry_test_flag(OVL_E_OPAQUE, dentry);
231 }
232 
233 bool ovl_dentry_is_whiteout(struct dentry *dentry)
234 {
235 	return !dentry->d_inode && ovl_dentry_is_opaque(dentry);
236 }
237 
238 void ovl_dentry_set_opaque(struct dentry *dentry)
239 {
240 	ovl_dentry_set_flag(OVL_E_OPAQUE, dentry);
241 }
242 
243 /*
244  * For hard links and decoded file handles, it's possible for ovl_dentry_upper()
245  * to return positive, while there's no actual upper alias for the inode.
246  * Copy up code needs to know about the existence of the upper alias, so it
247  * can't use ovl_dentry_upper().
248  */
249 bool ovl_dentry_has_upper_alias(struct dentry *dentry)
250 {
251 	return ovl_dentry_test_flag(OVL_E_UPPER_ALIAS, dentry);
252 }
253 
254 void ovl_dentry_set_upper_alias(struct dentry *dentry)
255 {
256 	ovl_dentry_set_flag(OVL_E_UPPER_ALIAS, dentry);
257 }
258 
259 bool ovl_redirect_dir(struct super_block *sb)
260 {
261 	struct ovl_fs *ofs = sb->s_fs_info;
262 
263 	return ofs->config.redirect_dir && !ofs->noxattr;
264 }
265 
266 const char *ovl_dentry_get_redirect(struct dentry *dentry)
267 {
268 	return OVL_I(d_inode(dentry))->redirect;
269 }
270 
271 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect)
272 {
273 	struct ovl_inode *oi = OVL_I(d_inode(dentry));
274 
275 	kfree(oi->redirect);
276 	oi->redirect = redirect;
277 }
278 
279 void ovl_inode_init(struct inode *inode, struct dentry *upperdentry,
280 		    struct dentry *lowerdentry)
281 {
282 	if (upperdentry)
283 		OVL_I(inode)->__upperdentry = upperdentry;
284 	if (lowerdentry)
285 		OVL_I(inode)->lower = igrab(d_inode(lowerdentry));
286 
287 	ovl_copyattr(d_inode(upperdentry ?: lowerdentry), inode);
288 }
289 
290 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)
291 {
292 	struct inode *upperinode = d_inode(upperdentry);
293 
294 	WARN_ON(OVL_I(inode)->__upperdentry);
295 
296 	/*
297 	 * Make sure upperdentry is consistent before making it visible
298 	 */
299 	smp_wmb();
300 	OVL_I(inode)->__upperdentry = upperdentry;
301 	if (inode_unhashed(inode)) {
302 		inode->i_private = upperinode;
303 		__insert_inode_hash(inode, (unsigned long) upperinode);
304 	}
305 }
306 
307 void ovl_dentry_version_inc(struct dentry *dentry, bool impurity)
308 {
309 	struct inode *inode = d_inode(dentry);
310 
311 	WARN_ON(!inode_is_locked(inode));
312 	/*
313 	 * Version is used by readdir code to keep cache consistent.  For merge
314 	 * dirs all changes need to be noted.  For non-merge dirs, cache only
315 	 * contains impure (ones which have been copied up and have origins)
316 	 * entries, so only need to note changes to impure entries.
317 	 */
318 	if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity)
319 		OVL_I(inode)->version++;
320 }
321 
322 u64 ovl_dentry_version_get(struct dentry *dentry)
323 {
324 	struct inode *inode = d_inode(dentry);
325 
326 	WARN_ON(!inode_is_locked(inode));
327 	return OVL_I(inode)->version;
328 }
329 
330 bool ovl_is_whiteout(struct dentry *dentry)
331 {
332 	struct inode *inode = dentry->d_inode;
333 
334 	return inode && IS_WHITEOUT(inode);
335 }
336 
337 struct file *ovl_path_open(struct path *path, int flags)
338 {
339 	return dentry_open(path, flags | O_NOATIME, current_cred());
340 }
341 
342 int ovl_copy_up_start(struct dentry *dentry)
343 {
344 	struct ovl_inode *oi = OVL_I(d_inode(dentry));
345 	int err;
346 
347 	err = mutex_lock_interruptible(&oi->lock);
348 	if (!err && ovl_dentry_has_upper_alias(dentry)) {
349 		err = 1; /* Already copied up */
350 		mutex_unlock(&oi->lock);
351 	}
352 
353 	return err;
354 }
355 
356 void ovl_copy_up_end(struct dentry *dentry)
357 {
358 	mutex_unlock(&OVL_I(d_inode(dentry))->lock);
359 }
360 
361 bool ovl_check_origin_xattr(struct dentry *dentry)
362 {
363 	int res;
364 
365 	res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
366 
367 	/* Zero size value means "copied up but origin unknown" */
368 	if (res >= 0)
369 		return true;
370 
371 	return false;
372 }
373 
374 bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
375 {
376 	int res;
377 	char val;
378 
379 	if (!d_is_dir(dentry))
380 		return false;
381 
382 	res = vfs_getxattr(dentry, name, &val, 1);
383 	if (res == 1 && val == 'y')
384 		return true;
385 
386 	return false;
387 }
388 
389 int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
390 		       const char *name, const void *value, size_t size,
391 		       int xerr)
392 {
393 	int err;
394 	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
395 
396 	if (ofs->noxattr)
397 		return xerr;
398 
399 	err = ovl_do_setxattr(upperdentry, name, value, size, 0);
400 
401 	if (err == -EOPNOTSUPP) {
402 		pr_warn("overlayfs: cannot set %s xattr on upper\n", name);
403 		ofs->noxattr = true;
404 		return xerr;
405 	}
406 
407 	return err;
408 }
409 
410 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry)
411 {
412 	int err;
413 
414 	if (ovl_test_flag(OVL_IMPURE, d_inode(dentry)))
415 		return 0;
416 
417 	/*
418 	 * Do not fail when upper doesn't support xattrs.
419 	 * Upper inodes won't have origin nor redirect xattr anyway.
420 	 */
421 	err = ovl_check_setxattr(dentry, upperdentry, OVL_XATTR_IMPURE,
422 				 "y", 1, 0);
423 	if (!err)
424 		ovl_set_flag(OVL_IMPURE, d_inode(dentry));
425 
426 	return err;
427 }
428 
429 void ovl_set_flag(unsigned long flag, struct inode *inode)
430 {
431 	set_bit(flag, &OVL_I(inode)->flags);
432 }
433 
434 void ovl_clear_flag(unsigned long flag, struct inode *inode)
435 {
436 	clear_bit(flag, &OVL_I(inode)->flags);
437 }
438 
439 bool ovl_test_flag(unsigned long flag, struct inode *inode)
440 {
441 	return test_bit(flag, &OVL_I(inode)->flags);
442 }
443 
444 /**
445  * Caller must hold a reference to inode to prevent it from being freed while
446  * it is marked inuse.
447  */
448 bool ovl_inuse_trylock(struct dentry *dentry)
449 {
450 	struct inode *inode = d_inode(dentry);
451 	bool locked = false;
452 
453 	spin_lock(&inode->i_lock);
454 	if (!(inode->i_state & I_OVL_INUSE)) {
455 		inode->i_state |= I_OVL_INUSE;
456 		locked = true;
457 	}
458 	spin_unlock(&inode->i_lock);
459 
460 	return locked;
461 }
462 
463 void ovl_inuse_unlock(struct dentry *dentry)
464 {
465 	if (dentry) {
466 		struct inode *inode = d_inode(dentry);
467 
468 		spin_lock(&inode->i_lock);
469 		WARN_ON(!(inode->i_state & I_OVL_INUSE));
470 		inode->i_state &= ~I_OVL_INUSE;
471 		spin_unlock(&inode->i_lock);
472 	}
473 }
474 
475 /*
476  * Does this overlay dentry need to be indexed on copy up?
477  */
478 bool ovl_need_index(struct dentry *dentry)
479 {
480 	struct dentry *lower = ovl_dentry_lower(dentry);
481 
482 	if (!lower || !ovl_indexdir(dentry->d_sb))
483 		return false;
484 
485 	/* Index all files for NFS export and consistency verification */
486 	if (ovl_index_all(dentry->d_sb))
487 		return true;
488 
489 	/* Index only lower hardlinks on copy up */
490 	if (!d_is_dir(lower) && d_inode(lower)->i_nlink > 1)
491 		return true;
492 
493 	return false;
494 }
495 
496 /* Caller must hold OVL_I(inode)->lock */
497 static void ovl_cleanup_index(struct dentry *dentry)
498 {
499 	struct dentry *indexdir = ovl_indexdir(dentry->d_sb);
500 	struct inode *dir = indexdir->d_inode;
501 	struct dentry *lowerdentry = ovl_dentry_lower(dentry);
502 	struct dentry *upperdentry = ovl_dentry_upper(dentry);
503 	struct dentry *index = NULL;
504 	struct inode *inode;
505 	struct qstr name;
506 	int err;
507 
508 	err = ovl_get_index_name(lowerdentry, &name);
509 	if (err)
510 		goto fail;
511 
512 	inode = d_inode(upperdentry);
513 	if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
514 		pr_warn_ratelimited("overlayfs: cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
515 				    upperdentry, inode->i_ino, inode->i_nlink);
516 		/*
517 		 * We either have a bug with persistent union nlink or a lower
518 		 * hardlink was added while overlay is mounted. Adding a lower
519 		 * hardlink and then unlinking all overlay hardlinks would drop
520 		 * overlay nlink to zero before all upper inodes are unlinked.
521 		 * As a safety measure, when that situation is detected, set
522 		 * the overlay nlink to the index inode nlink minus one for the
523 		 * index entry itself.
524 		 */
525 		set_nlink(d_inode(dentry), inode->i_nlink - 1);
526 		ovl_set_nlink_upper(dentry);
527 		goto out;
528 	}
529 
530 	inode_lock_nested(dir, I_MUTEX_PARENT);
531 	index = lookup_one_len(name.name, indexdir, name.len);
532 	err = PTR_ERR(index);
533 	if (IS_ERR(index)) {
534 		index = NULL;
535 	} else if (ovl_index_all(dentry->d_sb)) {
536 		/* Whiteout orphan index to block future open by handle */
537 		err = ovl_cleanup_and_whiteout(indexdir, dir, index);
538 	} else {
539 		/* Cleanup orphan index entries */
540 		err = ovl_cleanup(dir, index);
541 	}
542 
543 	inode_unlock(dir);
544 	if (err)
545 		goto fail;
546 
547 out:
548 	dput(index);
549 	return;
550 
551 fail:
552 	pr_err("overlayfs: cleanup index of '%pd2' failed (%i)\n", dentry, err);
553 	goto out;
554 }
555 
556 /*
557  * Operations that change overlay inode and upper inode nlink need to be
558  * synchronized with copy up for persistent nlink accounting.
559  */
560 int ovl_nlink_start(struct dentry *dentry, bool *locked)
561 {
562 	struct ovl_inode *oi = OVL_I(d_inode(dentry));
563 	const struct cred *old_cred;
564 	int err;
565 
566 	if (!d_inode(dentry))
567 		return 0;
568 
569 	/*
570 	 * With inodes index is enabled, we store the union overlay nlink
571 	 * in an xattr on the index inode. When whiting out an indexed lower,
572 	 * we need to decrement the overlay persistent nlink, but before the
573 	 * first copy up, we have no upper index inode to store the xattr.
574 	 *
575 	 * As a workaround, before whiteout/rename over an indexed lower,
576 	 * copy up to create the upper index. Creating the upper index will
577 	 * initialize the overlay nlink, so it could be dropped if unlink
578 	 * or rename succeeds.
579 	 *
580 	 * TODO: implement metadata only index copy up when called with
581 	 *       ovl_copy_up_flags(dentry, O_PATH).
582 	 */
583 	if (ovl_need_index(dentry) && !ovl_dentry_has_upper_alias(dentry)) {
584 		err = ovl_copy_up(dentry);
585 		if (err)
586 			return err;
587 	}
588 
589 	err = mutex_lock_interruptible(&oi->lock);
590 	if (err)
591 		return err;
592 
593 	if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
594 		goto out;
595 
596 	old_cred = ovl_override_creds(dentry->d_sb);
597 	/*
598 	 * The overlay inode nlink should be incremented/decremented IFF the
599 	 * upper operation succeeds, along with nlink change of upper inode.
600 	 * Therefore, before link/unlink/rename, we store the union nlink
601 	 * value relative to the upper inode nlink in an upper inode xattr.
602 	 */
603 	err = ovl_set_nlink_upper(dentry);
604 	revert_creds(old_cred);
605 
606 out:
607 	if (err)
608 		mutex_unlock(&oi->lock);
609 	else
610 		*locked = true;
611 
612 	return err;
613 }
614 
615 void ovl_nlink_end(struct dentry *dentry, bool locked)
616 {
617 	if (locked) {
618 		if (ovl_test_flag(OVL_INDEX, d_inode(dentry)) &&
619 		    d_inode(dentry)->i_nlink == 0) {
620 			const struct cred *old_cred;
621 
622 			old_cred = ovl_override_creds(dentry->d_sb);
623 			ovl_cleanup_index(dentry);
624 			revert_creds(old_cred);
625 		}
626 
627 		mutex_unlock(&OVL_I(d_inode(dentry))->lock);
628 	}
629 }
630 
631 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir)
632 {
633 	/* Workdir should not be the same as upperdir */
634 	if (workdir == upperdir)
635 		goto err;
636 
637 	/* Workdir should not be subdir of upperdir and vice versa */
638 	if (lock_rename(workdir, upperdir) != NULL)
639 		goto err_unlock;
640 
641 	return 0;
642 
643 err_unlock:
644 	unlock_rename(workdir, upperdir);
645 err:
646 	pr_err("overlayfs: failed to lock workdir+upperdir\n");
647 	return -EIO;
648 }
649