cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

super.c (55417B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *
      4 * Copyright (C) 2011 Novell Inc.
      5 */
      6
      7#include <uapi/linux/magic.h>
      8#include <linux/fs.h>
      9#include <linux/namei.h>
     10#include <linux/xattr.h>
     11#include <linux/mount.h>
     12#include <linux/parser.h>
     13#include <linux/module.h>
     14#include <linux/statfs.h>
     15#include <linux/seq_file.h>
     16#include <linux/posix_acl_xattr.h>
     17#include <linux/exportfs.h>
     18#include "overlayfs.h"
     19
     20MODULE_AUTHOR("Miklos Szeredi <miklos@szeredi.hu>");
     21MODULE_DESCRIPTION("Overlay filesystem");
     22MODULE_LICENSE("GPL");
     23
     24
     25struct ovl_dir_cache;
     26
     27#define OVL_MAX_STACK 500
     28
     29static bool ovl_redirect_dir_def = IS_ENABLED(CONFIG_OVERLAY_FS_REDIRECT_DIR);
     30module_param_named(redirect_dir, ovl_redirect_dir_def, bool, 0644);
     31MODULE_PARM_DESC(redirect_dir,
     32		 "Default to on or off for the redirect_dir feature");
     33
     34static bool ovl_redirect_always_follow =
     35	IS_ENABLED(CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW);
     36module_param_named(redirect_always_follow, ovl_redirect_always_follow,
     37		   bool, 0644);
     38MODULE_PARM_DESC(redirect_always_follow,
     39		 "Follow redirects even if redirect_dir feature is turned off");
     40
     41static bool ovl_index_def = IS_ENABLED(CONFIG_OVERLAY_FS_INDEX);
     42module_param_named(index, ovl_index_def, bool, 0644);
     43MODULE_PARM_DESC(index,
     44		 "Default to on or off for the inodes index feature");
     45
     46static bool ovl_nfs_export_def = IS_ENABLED(CONFIG_OVERLAY_FS_NFS_EXPORT);
     47module_param_named(nfs_export, ovl_nfs_export_def, bool, 0644);
     48MODULE_PARM_DESC(nfs_export,
     49		 "Default to on or off for the NFS export feature");
     50
     51static bool ovl_xino_auto_def = IS_ENABLED(CONFIG_OVERLAY_FS_XINO_AUTO);
     52module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644);
     53MODULE_PARM_DESC(xino_auto,
     54		 "Auto enable xino feature");
     55
     56static void ovl_entry_stack_free(struct ovl_entry *oe)
     57{
     58	unsigned int i;
     59
     60	for (i = 0; i < oe->numlower; i++)
     61		dput(oe->lowerstack[i].dentry);
     62}
     63
     64static bool ovl_metacopy_def = IS_ENABLED(CONFIG_OVERLAY_FS_METACOPY);
     65module_param_named(metacopy, ovl_metacopy_def, bool, 0644);
     66MODULE_PARM_DESC(metacopy,
     67		 "Default to on or off for the metadata only copy up feature");
     68
     69static void ovl_dentry_release(struct dentry *dentry)
     70{
     71	struct ovl_entry *oe = dentry->d_fsdata;
     72
     73	if (oe) {
     74		ovl_entry_stack_free(oe);
     75		kfree_rcu(oe, rcu);
     76	}
     77}
     78
     79static struct dentry *ovl_d_real(struct dentry *dentry,
     80				 const struct inode *inode)
     81{
     82	struct dentry *real = NULL, *lower;
     83
     84	/* It's an overlay file */
     85	if (inode && d_inode(dentry) == inode)
     86		return dentry;
     87
     88	if (!d_is_reg(dentry)) {
     89		if (!inode || inode == d_inode(dentry))
     90			return dentry;
     91		goto bug;
     92	}
     93
     94	real = ovl_dentry_upper(dentry);
     95	if (real && (inode == d_inode(real)))
     96		return real;
     97
     98	if (real && !inode && ovl_has_upperdata(d_inode(dentry)))
     99		return real;
    100
    101	lower = ovl_dentry_lowerdata(dentry);
    102	if (!lower)
    103		goto bug;
    104	real = lower;
    105
    106	/* Handle recursion */
    107	real = d_real(real, inode);
    108
    109	if (!inode || inode == d_inode(real))
    110		return real;
    111bug:
    112	WARN(1, "%s(%pd4, %s:%lu): real dentry (%p/%lu) not found\n",
    113	     __func__, dentry, inode ? inode->i_sb->s_id : "NULL",
    114	     inode ? inode->i_ino : 0, real,
    115	     real && d_inode(real) ? d_inode(real)->i_ino : 0);
    116	return dentry;
    117}
    118
    119static int ovl_revalidate_real(struct dentry *d, unsigned int flags, bool weak)
    120{
    121	int ret = 1;
    122
    123	if (weak) {
    124		if (d->d_flags & DCACHE_OP_WEAK_REVALIDATE)
    125			ret =  d->d_op->d_weak_revalidate(d, flags);
    126	} else if (d->d_flags & DCACHE_OP_REVALIDATE) {
    127		ret = d->d_op->d_revalidate(d, flags);
    128		if (!ret) {
    129			if (!(flags & LOOKUP_RCU))
    130				d_invalidate(d);
    131			ret = -ESTALE;
    132		}
    133	}
    134	return ret;
    135}
    136
    137static int ovl_dentry_revalidate_common(struct dentry *dentry,
    138					unsigned int flags, bool weak)
    139{
    140	struct ovl_entry *oe = dentry->d_fsdata;
    141	struct dentry *upper;
    142	unsigned int i;
    143	int ret = 1;
    144
    145	upper = ovl_dentry_upper(dentry);
    146	if (upper)
    147		ret = ovl_revalidate_real(upper, flags, weak);
    148
    149	for (i = 0; ret > 0 && i < oe->numlower; i++) {
    150		ret = ovl_revalidate_real(oe->lowerstack[i].dentry, flags,
    151					  weak);
    152	}
    153	return ret;
    154}
    155
    156static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
    157{
    158	return ovl_dentry_revalidate_common(dentry, flags, false);
    159}
    160
    161static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
    162{
    163	return ovl_dentry_revalidate_common(dentry, flags, true);
    164}
    165
    166static const struct dentry_operations ovl_dentry_operations = {
    167	.d_release = ovl_dentry_release,
    168	.d_real = ovl_d_real,
    169	.d_revalidate = ovl_dentry_revalidate,
    170	.d_weak_revalidate = ovl_dentry_weak_revalidate,
    171};
    172
    173static struct kmem_cache *ovl_inode_cachep;
    174
    175static struct inode *ovl_alloc_inode(struct super_block *sb)
    176{
    177	struct ovl_inode *oi = alloc_inode_sb(sb, ovl_inode_cachep, GFP_KERNEL);
    178
    179	if (!oi)
    180		return NULL;
    181
    182	oi->cache = NULL;
    183	oi->redirect = NULL;
    184	oi->version = 0;
    185	oi->flags = 0;
    186	oi->__upperdentry = NULL;
    187	oi->lowerpath.dentry = NULL;
    188	oi->lowerpath.layer = NULL;
    189	oi->lowerdata = NULL;
    190	mutex_init(&oi->lock);
    191
    192	return &oi->vfs_inode;
    193}
    194
    195static void ovl_free_inode(struct inode *inode)
    196{
    197	struct ovl_inode *oi = OVL_I(inode);
    198
    199	kfree(oi->redirect);
    200	mutex_destroy(&oi->lock);
    201	kmem_cache_free(ovl_inode_cachep, oi);
    202}
    203
    204static void ovl_destroy_inode(struct inode *inode)
    205{
    206	struct ovl_inode *oi = OVL_I(inode);
    207
    208	dput(oi->__upperdentry);
    209	dput(oi->lowerpath.dentry);
    210	if (S_ISDIR(inode->i_mode))
    211		ovl_dir_cache_free(inode);
    212	else
    213		iput(oi->lowerdata);
    214}
    215
    216static void ovl_free_fs(struct ovl_fs *ofs)
    217{
    218	struct vfsmount **mounts;
    219	unsigned i;
    220
    221	iput(ofs->workbasedir_trap);
    222	iput(ofs->indexdir_trap);
    223	iput(ofs->workdir_trap);
    224	dput(ofs->whiteout);
    225	dput(ofs->indexdir);
    226	dput(ofs->workdir);
    227	if (ofs->workdir_locked)
    228		ovl_inuse_unlock(ofs->workbasedir);
    229	dput(ofs->workbasedir);
    230	if (ofs->upperdir_locked)
    231		ovl_inuse_unlock(ovl_upper_mnt(ofs)->mnt_root);
    232
    233	/* Hack!  Reuse ofs->layers as a vfsmount array before freeing it */
    234	mounts = (struct vfsmount **) ofs->layers;
    235	for (i = 0; i < ofs->numlayer; i++) {
    236		iput(ofs->layers[i].trap);
    237		mounts[i] = ofs->layers[i].mnt;
    238	}
    239	kern_unmount_array(mounts, ofs->numlayer);
    240	kfree(ofs->layers);
    241	for (i = 0; i < ofs->numfs; i++)
    242		free_anon_bdev(ofs->fs[i].pseudo_dev);
    243	kfree(ofs->fs);
    244
    245	kfree(ofs->config.lowerdir);
    246	kfree(ofs->config.upperdir);
    247	kfree(ofs->config.workdir);
    248	kfree(ofs->config.redirect_mode);
    249	if (ofs->creator_cred)
    250		put_cred(ofs->creator_cred);
    251	kfree(ofs);
    252}
    253
    254static void ovl_put_super(struct super_block *sb)
    255{
    256	struct ovl_fs *ofs = sb->s_fs_info;
    257
    258	ovl_free_fs(ofs);
    259}
    260
    261/* Sync real dirty inodes in upper filesystem (if it exists) */
    262static int ovl_sync_fs(struct super_block *sb, int wait)
    263{
    264	struct ovl_fs *ofs = sb->s_fs_info;
    265	struct super_block *upper_sb;
    266	int ret;
    267
    268	ret = ovl_sync_status(ofs);
    269	/*
    270	 * We have to always set the err, because the return value isn't
    271	 * checked in syncfs, and instead indirectly return an error via
    272	 * the sb's writeback errseq, which VFS inspects after this call.
    273	 */
    274	if (ret < 0) {
    275		errseq_set(&sb->s_wb_err, -EIO);
    276		return -EIO;
    277	}
    278
    279	if (!ret)
    280		return ret;
    281
    282	/*
    283	 * Not called for sync(2) call or an emergency sync (SB_I_SKIP_SYNC).
    284	 * All the super blocks will be iterated, including upper_sb.
    285	 *
    286	 * If this is a syncfs(2) call, then we do need to call
    287	 * sync_filesystem() on upper_sb, but enough if we do it when being
    288	 * called with wait == 1.
    289	 */
    290	if (!wait)
    291		return 0;
    292
    293	upper_sb = ovl_upper_mnt(ofs)->mnt_sb;
    294
    295	down_read(&upper_sb->s_umount);
    296	ret = sync_filesystem(upper_sb);
    297	up_read(&upper_sb->s_umount);
    298
    299	return ret;
    300}
    301
    302/**
    303 * ovl_statfs
    304 * @sb: The overlayfs super block
    305 * @buf: The struct kstatfs to fill in with stats
    306 *
    307 * Get the filesystem statistics.  As writes always target the upper layer
    308 * filesystem pass the statfs to the upper filesystem (if it exists)
    309 */
    310static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf)
    311{
    312	struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
    313	struct dentry *root_dentry = dentry->d_sb->s_root;
    314	struct path path;
    315	int err;
    316
    317	ovl_path_real(root_dentry, &path);
    318
    319	err = vfs_statfs(&path, buf);
    320	if (!err) {
    321		buf->f_namelen = ofs->namelen;
    322		buf->f_type = OVERLAYFS_SUPER_MAGIC;
    323	}
    324
    325	return err;
    326}
    327
    328/* Will this overlay be forced to mount/remount ro? */
    329static bool ovl_force_readonly(struct ovl_fs *ofs)
    330{
    331	return (!ovl_upper_mnt(ofs) || !ofs->workdir);
    332}
    333
    334static const char *ovl_redirect_mode_def(void)
    335{
    336	return ovl_redirect_dir_def ? "on" : "off";
    337}
    338
    339static const char * const ovl_xino_str[] = {
    340	"off",
    341	"auto",
    342	"on",
    343};
    344
    345static inline int ovl_xino_def(void)
    346{
    347	return ovl_xino_auto_def ? OVL_XINO_AUTO : OVL_XINO_OFF;
    348}
    349
    350/**
    351 * ovl_show_options
    352 *
    353 * Prints the mount options for a given superblock.
    354 * Returns zero; does not fail.
    355 */
    356static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
    357{
    358	struct super_block *sb = dentry->d_sb;
    359	struct ovl_fs *ofs = sb->s_fs_info;
    360
    361	seq_show_option(m, "lowerdir", ofs->config.lowerdir);
    362	if (ofs->config.upperdir) {
    363		seq_show_option(m, "upperdir", ofs->config.upperdir);
    364		seq_show_option(m, "workdir", ofs->config.workdir);
    365	}
    366	if (ofs->config.default_permissions)
    367		seq_puts(m, ",default_permissions");
    368	if (strcmp(ofs->config.redirect_mode, ovl_redirect_mode_def()) != 0)
    369		seq_printf(m, ",redirect_dir=%s", ofs->config.redirect_mode);
    370	if (ofs->config.index != ovl_index_def)
    371		seq_printf(m, ",index=%s", ofs->config.index ? "on" : "off");
    372	if (!ofs->config.uuid)
    373		seq_puts(m, ",uuid=off");
    374	if (ofs->config.nfs_export != ovl_nfs_export_def)
    375		seq_printf(m, ",nfs_export=%s", ofs->config.nfs_export ?
    376						"on" : "off");
    377	if (ofs->config.xino != ovl_xino_def() && !ovl_same_fs(sb))
    378		seq_printf(m, ",xino=%s", ovl_xino_str[ofs->config.xino]);
    379	if (ofs->config.metacopy != ovl_metacopy_def)
    380		seq_printf(m, ",metacopy=%s",
    381			   ofs->config.metacopy ? "on" : "off");
    382	if (ofs->config.ovl_volatile)
    383		seq_puts(m, ",volatile");
    384	if (ofs->config.userxattr)
    385		seq_puts(m, ",userxattr");
    386	return 0;
    387}
    388
    389static int ovl_remount(struct super_block *sb, int *flags, char *data)
    390{
    391	struct ovl_fs *ofs = sb->s_fs_info;
    392	struct super_block *upper_sb;
    393	int ret = 0;
    394
    395	if (!(*flags & SB_RDONLY) && ovl_force_readonly(ofs))
    396		return -EROFS;
    397
    398	if (*flags & SB_RDONLY && !sb_rdonly(sb)) {
    399		upper_sb = ovl_upper_mnt(ofs)->mnt_sb;
    400		if (ovl_should_sync(ofs)) {
    401			down_read(&upper_sb->s_umount);
    402			ret = sync_filesystem(upper_sb);
    403			up_read(&upper_sb->s_umount);
    404		}
    405	}
    406
    407	return ret;
    408}
    409
    410static const struct super_operations ovl_super_operations = {
    411	.alloc_inode	= ovl_alloc_inode,
    412	.free_inode	= ovl_free_inode,
    413	.destroy_inode	= ovl_destroy_inode,
    414	.drop_inode	= generic_delete_inode,
    415	.put_super	= ovl_put_super,
    416	.sync_fs	= ovl_sync_fs,
    417	.statfs		= ovl_statfs,
    418	.show_options	= ovl_show_options,
    419	.remount_fs	= ovl_remount,
    420};
    421
    422enum {
    423	OPT_LOWERDIR,
    424	OPT_UPPERDIR,
    425	OPT_WORKDIR,
    426	OPT_DEFAULT_PERMISSIONS,
    427	OPT_REDIRECT_DIR,
    428	OPT_INDEX_ON,
    429	OPT_INDEX_OFF,
    430	OPT_UUID_ON,
    431	OPT_UUID_OFF,
    432	OPT_NFS_EXPORT_ON,
    433	OPT_USERXATTR,
    434	OPT_NFS_EXPORT_OFF,
    435	OPT_XINO_ON,
    436	OPT_XINO_OFF,
    437	OPT_XINO_AUTO,
    438	OPT_METACOPY_ON,
    439	OPT_METACOPY_OFF,
    440	OPT_VOLATILE,
    441	OPT_ERR,
    442};
    443
    444static const match_table_t ovl_tokens = {
    445	{OPT_LOWERDIR,			"lowerdir=%s"},
    446	{OPT_UPPERDIR,			"upperdir=%s"},
    447	{OPT_WORKDIR,			"workdir=%s"},
    448	{OPT_DEFAULT_PERMISSIONS,	"default_permissions"},
    449	{OPT_REDIRECT_DIR,		"redirect_dir=%s"},
    450	{OPT_INDEX_ON,			"index=on"},
    451	{OPT_INDEX_OFF,			"index=off"},
    452	{OPT_USERXATTR,			"userxattr"},
    453	{OPT_UUID_ON,			"uuid=on"},
    454	{OPT_UUID_OFF,			"uuid=off"},
    455	{OPT_NFS_EXPORT_ON,		"nfs_export=on"},
    456	{OPT_NFS_EXPORT_OFF,		"nfs_export=off"},
    457	{OPT_XINO_ON,			"xino=on"},
    458	{OPT_XINO_OFF,			"xino=off"},
    459	{OPT_XINO_AUTO,			"xino=auto"},
    460	{OPT_METACOPY_ON,		"metacopy=on"},
    461	{OPT_METACOPY_OFF,		"metacopy=off"},
    462	{OPT_VOLATILE,			"volatile"},
    463	{OPT_ERR,			NULL}
    464};
    465
    466static char *ovl_next_opt(char **s)
    467{
    468	char *sbegin = *s;
    469	char *p;
    470
    471	if (sbegin == NULL)
    472		return NULL;
    473
    474	for (p = sbegin; *p; p++) {
    475		if (*p == '\\') {
    476			p++;
    477			if (!*p)
    478				break;
    479		} else if (*p == ',') {
    480			*p = '\0';
    481			*s = p + 1;
    482			return sbegin;
    483		}
    484	}
    485	*s = NULL;
    486	return sbegin;
    487}
    488
    489static int ovl_parse_redirect_mode(struct ovl_config *config, const char *mode)
    490{
    491	if (strcmp(mode, "on") == 0) {
    492		config->redirect_dir = true;
    493		/*
    494		 * Does not make sense to have redirect creation without
    495		 * redirect following.
    496		 */
    497		config->redirect_follow = true;
    498	} else if (strcmp(mode, "follow") == 0) {
    499		config->redirect_follow = true;
    500	} else if (strcmp(mode, "off") == 0) {
    501		if (ovl_redirect_always_follow)
    502			config->redirect_follow = true;
    503	} else if (strcmp(mode, "nofollow") != 0) {
    504		pr_err("bad mount option \"redirect_dir=%s\"\n",
    505		       mode);
    506		return -EINVAL;
    507	}
    508
    509	return 0;
    510}
    511
    512static int ovl_parse_opt(char *opt, struct ovl_config *config)
    513{
    514	char *p;
    515	int err;
    516	bool metacopy_opt = false, redirect_opt = false;
    517	bool nfs_export_opt = false, index_opt = false;
    518
    519	config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL);
    520	if (!config->redirect_mode)
    521		return -ENOMEM;
    522
    523	while ((p = ovl_next_opt(&opt)) != NULL) {
    524		int token;
    525		substring_t args[MAX_OPT_ARGS];
    526
    527		if (!*p)
    528			continue;
    529
    530		token = match_token(p, ovl_tokens, args);
    531		switch (token) {
    532		case OPT_UPPERDIR:
    533			kfree(config->upperdir);
    534			config->upperdir = match_strdup(&args[0]);
    535			if (!config->upperdir)
    536				return -ENOMEM;
    537			break;
    538
    539		case OPT_LOWERDIR:
    540			kfree(config->lowerdir);
    541			config->lowerdir = match_strdup(&args[0]);
    542			if (!config->lowerdir)
    543				return -ENOMEM;
    544			break;
    545
    546		case OPT_WORKDIR:
    547			kfree(config->workdir);
    548			config->workdir = match_strdup(&args[0]);
    549			if (!config->workdir)
    550				return -ENOMEM;
    551			break;
    552
    553		case OPT_DEFAULT_PERMISSIONS:
    554			config->default_permissions = true;
    555			break;
    556
    557		case OPT_REDIRECT_DIR:
    558			kfree(config->redirect_mode);
    559			config->redirect_mode = match_strdup(&args[0]);
    560			if (!config->redirect_mode)
    561				return -ENOMEM;
    562			redirect_opt = true;
    563			break;
    564
    565		case OPT_INDEX_ON:
    566			config->index = true;
    567			index_opt = true;
    568			break;
    569
    570		case OPT_INDEX_OFF:
    571			config->index = false;
    572			index_opt = true;
    573			break;
    574
    575		case OPT_UUID_ON:
    576			config->uuid = true;
    577			break;
    578
    579		case OPT_UUID_OFF:
    580			config->uuid = false;
    581			break;
    582
    583		case OPT_NFS_EXPORT_ON:
    584			config->nfs_export = true;
    585			nfs_export_opt = true;
    586			break;
    587
    588		case OPT_NFS_EXPORT_OFF:
    589			config->nfs_export = false;
    590			nfs_export_opt = true;
    591			break;
    592
    593		case OPT_XINO_ON:
    594			config->xino = OVL_XINO_ON;
    595			break;
    596
    597		case OPT_XINO_OFF:
    598			config->xino = OVL_XINO_OFF;
    599			break;
    600
    601		case OPT_XINO_AUTO:
    602			config->xino = OVL_XINO_AUTO;
    603			break;
    604
    605		case OPT_METACOPY_ON:
    606			config->metacopy = true;
    607			metacopy_opt = true;
    608			break;
    609
    610		case OPT_METACOPY_OFF:
    611			config->metacopy = false;
    612			metacopy_opt = true;
    613			break;
    614
    615		case OPT_VOLATILE:
    616			config->ovl_volatile = true;
    617			break;
    618
    619		case OPT_USERXATTR:
    620			config->userxattr = true;
    621			break;
    622
    623		default:
    624			pr_err("unrecognized mount option \"%s\" or missing value\n",
    625					p);
    626			return -EINVAL;
    627		}
    628	}
    629
    630	/* Workdir/index are useless in non-upper mount */
    631	if (!config->upperdir) {
    632		if (config->workdir) {
    633			pr_info("option \"workdir=%s\" is useless in a non-upper mount, ignore\n",
    634				config->workdir);
    635			kfree(config->workdir);
    636			config->workdir = NULL;
    637		}
    638		if (config->index && index_opt) {
    639			pr_info("option \"index=on\" is useless in a non-upper mount, ignore\n");
    640			index_opt = false;
    641		}
    642		config->index = false;
    643	}
    644
    645	if (!config->upperdir && config->ovl_volatile) {
    646		pr_info("option \"volatile\" is meaningless in a non-upper mount, ignoring it.\n");
    647		config->ovl_volatile = false;
    648	}
    649
    650	err = ovl_parse_redirect_mode(config, config->redirect_mode);
    651	if (err)
    652		return err;
    653
    654	/*
    655	 * This is to make the logic below simpler.  It doesn't make any other
    656	 * difference, since config->redirect_dir is only used for upper.
    657	 */
    658	if (!config->upperdir && config->redirect_follow)
    659		config->redirect_dir = true;
    660
    661	/* Resolve metacopy -> redirect_dir dependency */
    662	if (config->metacopy && !config->redirect_dir) {
    663		if (metacopy_opt && redirect_opt) {
    664			pr_err("conflicting options: metacopy=on,redirect_dir=%s\n",
    665			       config->redirect_mode);
    666			return -EINVAL;
    667		}
    668		if (redirect_opt) {
    669			/*
    670			 * There was an explicit redirect_dir=... that resulted
    671			 * in this conflict.
    672			 */
    673			pr_info("disabling metacopy due to redirect_dir=%s\n",
    674				config->redirect_mode);
    675			config->metacopy = false;
    676		} else {
    677			/* Automatically enable redirect otherwise. */
    678			config->redirect_follow = config->redirect_dir = true;
    679		}
    680	}
    681
    682	/* Resolve nfs_export -> index dependency */
    683	if (config->nfs_export && !config->index) {
    684		if (!config->upperdir && config->redirect_follow) {
    685			pr_info("NFS export requires \"redirect_dir=nofollow\" on non-upper mount, falling back to nfs_export=off.\n");
    686			config->nfs_export = false;
    687		} else if (nfs_export_opt && index_opt) {
    688			pr_err("conflicting options: nfs_export=on,index=off\n");
    689			return -EINVAL;
    690		} else if (index_opt) {
    691			/*
    692			 * There was an explicit index=off that resulted
    693			 * in this conflict.
    694			 */
    695			pr_info("disabling nfs_export due to index=off\n");
    696			config->nfs_export = false;
    697		} else {
    698			/* Automatically enable index otherwise. */
    699			config->index = true;
    700		}
    701	}
    702
    703	/* Resolve nfs_export -> !metacopy dependency */
    704	if (config->nfs_export && config->metacopy) {
    705		if (nfs_export_opt && metacopy_opt) {
    706			pr_err("conflicting options: nfs_export=on,metacopy=on\n");
    707			return -EINVAL;
    708		}
    709		if (metacopy_opt) {
    710			/*
    711			 * There was an explicit metacopy=on that resulted
    712			 * in this conflict.
    713			 */
    714			pr_info("disabling nfs_export due to metacopy=on\n");
    715			config->nfs_export = false;
    716		} else {
    717			/*
    718			 * There was an explicit nfs_export=on that resulted
    719			 * in this conflict.
    720			 */
    721			pr_info("disabling metacopy due to nfs_export=on\n");
    722			config->metacopy = false;
    723		}
    724	}
    725
    726
    727	/* Resolve userxattr -> !redirect && !metacopy dependency */
    728	if (config->userxattr) {
    729		if (config->redirect_follow && redirect_opt) {
    730			pr_err("conflicting options: userxattr,redirect_dir=%s\n",
    731			       config->redirect_mode);
    732			return -EINVAL;
    733		}
    734		if (config->metacopy && metacopy_opt) {
    735			pr_err("conflicting options: userxattr,metacopy=on\n");
    736			return -EINVAL;
    737		}
    738		/*
    739		 * Silently disable default setting of redirect and metacopy.
    740		 * This shall be the default in the future as well: these
    741		 * options must be explicitly enabled if used together with
    742		 * userxattr.
    743		 */
    744		config->redirect_dir = config->redirect_follow = false;
    745		config->metacopy = false;
    746	}
    747
    748	return 0;
    749}
    750
    751#define OVL_WORKDIR_NAME "work"
    752#define OVL_INDEXDIR_NAME "index"
    753
    754static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
    755					 const char *name, bool persist)
    756{
    757	struct inode *dir =  ofs->workbasedir->d_inode;
    758	struct vfsmount *mnt = ovl_upper_mnt(ofs);
    759	struct dentry *work;
    760	int err;
    761	bool retried = false;
    762
    763	inode_lock_nested(dir, I_MUTEX_PARENT);
    764retry:
    765	work = ovl_lookup_upper(ofs, name, ofs->workbasedir, strlen(name));
    766
    767	if (!IS_ERR(work)) {
    768		struct iattr attr = {
    769			.ia_valid = ATTR_MODE,
    770			.ia_mode = S_IFDIR | 0,
    771		};
    772
    773		if (work->d_inode) {
    774			err = -EEXIST;
    775			if (retried)
    776				goto out_dput;
    777
    778			if (persist)
    779				goto out_unlock;
    780
    781			retried = true;
    782			err = ovl_workdir_cleanup(ofs, dir, mnt, work, 0);
    783			dput(work);
    784			if (err == -EINVAL) {
    785				work = ERR_PTR(err);
    786				goto out_unlock;
    787			}
    788			goto retry;
    789		}
    790
    791		err = ovl_mkdir_real(ofs, dir, &work, attr.ia_mode);
    792		if (err)
    793			goto out_dput;
    794
    795		/* Weird filesystem returning with hashed negative (kernfs)? */
    796		err = -EINVAL;
    797		if (d_really_is_negative(work))
    798			goto out_dput;
    799
    800		/*
    801		 * Try to remove POSIX ACL xattrs from workdir.  We are good if:
    802		 *
    803		 * a) success (there was a POSIX ACL xattr and was removed)
    804		 * b) -ENODATA (there was no POSIX ACL xattr)
    805		 * c) -EOPNOTSUPP (POSIX ACL xattrs are not supported)
    806		 *
    807		 * There are various other error values that could effectively
    808		 * mean that the xattr doesn't exist (e.g. -ERANGE is returned
    809		 * if the xattr name is too long), but the set of filesystems
    810		 * allowed as upper are limited to "normal" ones, where checking
    811		 * for the above two errors is sufficient.
    812		 */
    813		err = ovl_do_removexattr(ofs, work,
    814					 XATTR_NAME_POSIX_ACL_DEFAULT);
    815		if (err && err != -ENODATA && err != -EOPNOTSUPP)
    816			goto out_dput;
    817
    818		err = ovl_do_removexattr(ofs, work,
    819					 XATTR_NAME_POSIX_ACL_ACCESS);
    820		if (err && err != -ENODATA && err != -EOPNOTSUPP)
    821			goto out_dput;
    822
    823		/* Clear any inherited mode bits */
    824		inode_lock(work->d_inode);
    825		err = ovl_do_notify_change(ofs, work, &attr);
    826		inode_unlock(work->d_inode);
    827		if (err)
    828			goto out_dput;
    829	} else {
    830		err = PTR_ERR(work);
    831		goto out_err;
    832	}
    833out_unlock:
    834	inode_unlock(dir);
    835	return work;
    836
    837out_dput:
    838	dput(work);
    839out_err:
    840	pr_warn("failed to create directory %s/%s (errno: %i); mounting read-only\n",
    841		ofs->config.workdir, name, -err);
    842	work = NULL;
    843	goto out_unlock;
    844}
    845
    846static void ovl_unescape(char *s)
    847{
    848	char *d = s;
    849
    850	for (;; s++, d++) {
    851		if (*s == '\\')
    852			s++;
    853		*d = *s;
    854		if (!*s)
    855			break;
    856	}
    857}
    858
    859static int ovl_mount_dir_noesc(const char *name, struct path *path)
    860{
    861	int err = -EINVAL;
    862
    863	if (!*name) {
    864		pr_err("empty lowerdir\n");
    865		goto out;
    866	}
    867	err = kern_path(name, LOOKUP_FOLLOW, path);
    868	if (err) {
    869		pr_err("failed to resolve '%s': %i\n", name, err);
    870		goto out;
    871	}
    872	err = -EINVAL;
    873	if (ovl_dentry_weird(path->dentry)) {
    874		pr_err("filesystem on '%s' not supported\n", name);
    875		goto out_put;
    876	}
    877	if (!d_is_dir(path->dentry)) {
    878		pr_err("'%s' not a directory\n", name);
    879		goto out_put;
    880	}
    881	return 0;
    882
    883out_put:
    884	path_put_init(path);
    885out:
    886	return err;
    887}
    888
    889static int ovl_mount_dir(const char *name, struct path *path)
    890{
    891	int err = -ENOMEM;
    892	char *tmp = kstrdup(name, GFP_KERNEL);
    893
    894	if (tmp) {
    895		ovl_unescape(tmp);
    896		err = ovl_mount_dir_noesc(tmp, path);
    897
    898		if (!err && path->dentry->d_flags & DCACHE_OP_REAL) {
    899			pr_err("filesystem on '%s' not supported as upperdir\n",
    900			       tmp);
    901			path_put_init(path);
    902			err = -EINVAL;
    903		}
    904		kfree(tmp);
    905	}
    906	return err;
    907}
    908
    909static int ovl_check_namelen(struct path *path, struct ovl_fs *ofs,
    910			     const char *name)
    911{
    912	struct kstatfs statfs;
    913	int err = vfs_statfs(path, &statfs);
    914
    915	if (err)
    916		pr_err("statfs failed on '%s'\n", name);
    917	else
    918		ofs->namelen = max(ofs->namelen, statfs.f_namelen);
    919
    920	return err;
    921}
    922
    923static int ovl_lower_dir(const char *name, struct path *path,
    924			 struct ovl_fs *ofs, int *stack_depth)
    925{
    926	int fh_type;
    927	int err;
    928
    929	err = ovl_mount_dir_noesc(name, path);
    930	if (err)
    931		return err;
    932
    933	err = ovl_check_namelen(path, ofs, name);
    934	if (err)
    935		return err;
    936
    937	*stack_depth = max(*stack_depth, path->mnt->mnt_sb->s_stack_depth);
    938
    939	/*
    940	 * The inodes index feature and NFS export need to encode and decode
    941	 * file handles, so they require that all layers support them.
    942	 */
    943	fh_type = ovl_can_decode_fh(path->dentry->d_sb);
    944	if ((ofs->config.nfs_export ||
    945	     (ofs->config.index && ofs->config.upperdir)) && !fh_type) {
    946		ofs->config.index = false;
    947		ofs->config.nfs_export = false;
    948		pr_warn("fs on '%s' does not support file handles, falling back to index=off,nfs_export=off.\n",
    949			name);
    950	}
    951	/*
    952	 * Decoding origin file handle is required for persistent st_ino.
    953	 * Without persistent st_ino, xino=auto falls back to xino=off.
    954	 */
    955	if (ofs->config.xino == OVL_XINO_AUTO &&
    956	    ofs->config.upperdir && !fh_type) {
    957		ofs->config.xino = OVL_XINO_OFF;
    958		pr_warn("fs on '%s' does not support file handles, falling back to xino=off.\n",
    959			name);
    960	}
    961
    962	/* Check if lower fs has 32bit inode numbers */
    963	if (fh_type != FILEID_INO32_GEN)
    964		ofs->xino_mode = -1;
    965
    966	return 0;
    967}
    968
    969/* Workdir should not be subdir of upperdir and vice versa */
    970static bool ovl_workdir_ok(struct dentry *workdir, struct dentry *upperdir)
    971{
    972	bool ok = false;
    973
    974	if (workdir != upperdir) {
    975		ok = (lock_rename(workdir, upperdir) == NULL);
    976		unlock_rename(workdir, upperdir);
    977	}
    978	return ok;
    979}
    980
    981static unsigned int ovl_split_lowerdirs(char *str)
    982{
    983	unsigned int ctr = 1;
    984	char *s, *d;
    985
    986	for (s = d = str;; s++, d++) {
    987		if (*s == '\\') {
    988			s++;
    989		} else if (*s == ':') {
    990			*d = '\0';
    991			ctr++;
    992			continue;
    993		}
    994		*d = *s;
    995		if (!*s)
    996			break;
    997	}
    998	return ctr;
    999}
   1000
   1001static int __maybe_unused
   1002ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
   1003			struct dentry *dentry, struct inode *inode,
   1004			const char *name, void *buffer, size_t size)
   1005{
   1006	return ovl_xattr_get(dentry, inode, handler->name, buffer, size);
   1007}
   1008
   1009static int __maybe_unused
   1010ovl_posix_acl_xattr_set(const struct xattr_handler *handler,
   1011			struct user_namespace *mnt_userns,
   1012			struct dentry *dentry, struct inode *inode,
   1013			const char *name, const void *value,
   1014			size_t size, int flags)
   1015{
   1016	struct dentry *workdir = ovl_workdir(dentry);
   1017	struct inode *realinode = ovl_inode_real(inode);
   1018	struct posix_acl *acl = NULL;
   1019	int err;
   1020
   1021	/* Check that everything is OK before copy-up */
   1022	if (value) {
   1023		acl = posix_acl_from_xattr(&init_user_ns, value, size);
   1024		if (IS_ERR(acl))
   1025			return PTR_ERR(acl);
   1026	}
   1027	err = -EOPNOTSUPP;
   1028	if (!IS_POSIXACL(d_inode(workdir)))
   1029		goto out_acl_release;
   1030	if (!realinode->i_op->set_acl)
   1031		goto out_acl_release;
   1032	if (handler->flags == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) {
   1033		err = acl ? -EACCES : 0;
   1034		goto out_acl_release;
   1035	}
   1036	err = -EPERM;
   1037	if (!inode_owner_or_capable(&init_user_ns, inode))
   1038		goto out_acl_release;
   1039
   1040	posix_acl_release(acl);
   1041
   1042	/*
   1043	 * Check if sgid bit needs to be cleared (actual setacl operation will
   1044	 * be done with mounter's capabilities and so that won't do it for us).
   1045	 */
   1046	if (unlikely(inode->i_mode & S_ISGID) &&
   1047	    handler->flags == ACL_TYPE_ACCESS &&
   1048	    !in_group_p(inode->i_gid) &&
   1049	    !capable_wrt_inode_uidgid(&init_user_ns, inode, CAP_FSETID)) {
   1050		struct iattr iattr = { .ia_valid = ATTR_KILL_SGID };
   1051
   1052		err = ovl_setattr(&init_user_ns, dentry, &iattr);
   1053		if (err)
   1054			return err;
   1055	}
   1056
   1057	err = ovl_xattr_set(dentry, inode, handler->name, value, size, flags);
   1058	return err;
   1059
   1060out_acl_release:
   1061	posix_acl_release(acl);
   1062	return err;
   1063}
   1064
   1065static int ovl_own_xattr_get(const struct xattr_handler *handler,
   1066			     struct dentry *dentry, struct inode *inode,
   1067			     const char *name, void *buffer, size_t size)
   1068{
   1069	return -EOPNOTSUPP;
   1070}
   1071
   1072static int ovl_own_xattr_set(const struct xattr_handler *handler,
   1073			     struct user_namespace *mnt_userns,
   1074			     struct dentry *dentry, struct inode *inode,
   1075			     const char *name, const void *value,
   1076			     size_t size, int flags)
   1077{
   1078	return -EOPNOTSUPP;
   1079}
   1080
   1081static int ovl_other_xattr_get(const struct xattr_handler *handler,
   1082			       struct dentry *dentry, struct inode *inode,
   1083			       const char *name, void *buffer, size_t size)
   1084{
   1085	return ovl_xattr_get(dentry, inode, name, buffer, size);
   1086}
   1087
   1088static int ovl_other_xattr_set(const struct xattr_handler *handler,
   1089			       struct user_namespace *mnt_userns,
   1090			       struct dentry *dentry, struct inode *inode,
   1091			       const char *name, const void *value,
   1092			       size_t size, int flags)
   1093{
   1094	return ovl_xattr_set(dentry, inode, name, value, size, flags);
   1095}
   1096
   1097static const struct xattr_handler __maybe_unused
   1098ovl_posix_acl_access_xattr_handler = {
   1099	.name = XATTR_NAME_POSIX_ACL_ACCESS,
   1100	.flags = ACL_TYPE_ACCESS,
   1101	.get = ovl_posix_acl_xattr_get,
   1102	.set = ovl_posix_acl_xattr_set,
   1103};
   1104
   1105static const struct xattr_handler __maybe_unused
   1106ovl_posix_acl_default_xattr_handler = {
   1107	.name = XATTR_NAME_POSIX_ACL_DEFAULT,
   1108	.flags = ACL_TYPE_DEFAULT,
   1109	.get = ovl_posix_acl_xattr_get,
   1110	.set = ovl_posix_acl_xattr_set,
   1111};
   1112
   1113static const struct xattr_handler ovl_own_trusted_xattr_handler = {
   1114	.prefix	= OVL_XATTR_TRUSTED_PREFIX,
   1115	.get = ovl_own_xattr_get,
   1116	.set = ovl_own_xattr_set,
   1117};
   1118
   1119static const struct xattr_handler ovl_own_user_xattr_handler = {
   1120	.prefix	= OVL_XATTR_USER_PREFIX,
   1121	.get = ovl_own_xattr_get,
   1122	.set = ovl_own_xattr_set,
   1123};
   1124
   1125static const struct xattr_handler ovl_other_xattr_handler = {
   1126	.prefix	= "", /* catch all */
   1127	.get = ovl_other_xattr_get,
   1128	.set = ovl_other_xattr_set,
   1129};
   1130
   1131static const struct xattr_handler *ovl_trusted_xattr_handlers[] = {
   1132#ifdef CONFIG_FS_POSIX_ACL
   1133	&ovl_posix_acl_access_xattr_handler,
   1134	&ovl_posix_acl_default_xattr_handler,
   1135#endif
   1136	&ovl_own_trusted_xattr_handler,
   1137	&ovl_other_xattr_handler,
   1138	NULL
   1139};
   1140
   1141static const struct xattr_handler *ovl_user_xattr_handlers[] = {
   1142#ifdef CONFIG_FS_POSIX_ACL
   1143	&ovl_posix_acl_access_xattr_handler,
   1144	&ovl_posix_acl_default_xattr_handler,
   1145#endif
   1146	&ovl_own_user_xattr_handler,
   1147	&ovl_other_xattr_handler,
   1148	NULL
   1149};
   1150
   1151static int ovl_setup_trap(struct super_block *sb, struct dentry *dir,
   1152			  struct inode **ptrap, const char *name)
   1153{
   1154	struct inode *trap;
   1155	int err;
   1156
   1157	trap = ovl_get_trap_inode(sb, dir);
   1158	err = PTR_ERR_OR_ZERO(trap);
   1159	if (err) {
   1160		if (err == -ELOOP)
   1161			pr_err("conflicting %s path\n", name);
   1162		return err;
   1163	}
   1164
   1165	*ptrap = trap;
   1166	return 0;
   1167}
   1168
   1169/*
   1170 * Determine how we treat concurrent use of upperdir/workdir based on the
   1171 * index feature. This is papering over mount leaks of container runtimes,
   1172 * for example, an old overlay mount is leaked and now its upperdir is
   1173 * attempted to be used as a lower layer in a new overlay mount.
   1174 */
   1175static int ovl_report_in_use(struct ovl_fs *ofs, const char *name)
   1176{
   1177	if (ofs->config.index) {
   1178		pr_err("%s is in-use as upperdir/workdir of another mount, mount with '-o index=off' to override exclusive upperdir protection.\n",
   1179		       name);
   1180		return -EBUSY;
   1181	} else {
   1182		pr_warn("%s is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior.\n",
   1183			name);
   1184		return 0;
   1185	}
   1186}
   1187
   1188static int ovl_get_upper(struct super_block *sb, struct ovl_fs *ofs,
   1189			 struct ovl_layer *upper_layer, struct path *upperpath)
   1190{
   1191	struct vfsmount *upper_mnt;
   1192	int err;
   1193
   1194	err = ovl_mount_dir(ofs->config.upperdir, upperpath);
   1195	if (err)
   1196		goto out;
   1197
   1198	/* Upperdir path should not be r/o */
   1199	if (__mnt_is_readonly(upperpath->mnt)) {
   1200		pr_err("upper fs is r/o, try multi-lower layers mount\n");
   1201		err = -EINVAL;
   1202		goto out;
   1203	}
   1204
   1205	err = ovl_check_namelen(upperpath, ofs, ofs->config.upperdir);
   1206	if (err)
   1207		goto out;
   1208
   1209	err = ovl_setup_trap(sb, upperpath->dentry, &upper_layer->trap,
   1210			     "upperdir");
   1211	if (err)
   1212		goto out;
   1213
   1214	upper_mnt = clone_private_mount(upperpath);
   1215	err = PTR_ERR(upper_mnt);
   1216	if (IS_ERR(upper_mnt)) {
   1217		pr_err("failed to clone upperpath\n");
   1218		goto out;
   1219	}
   1220
   1221	/* Don't inherit atime flags */
   1222	upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME);
   1223	upper_layer->mnt = upper_mnt;
   1224	upper_layer->idx = 0;
   1225	upper_layer->fsid = 0;
   1226
   1227	/*
   1228	 * Inherit SB_NOSEC flag from upperdir.
   1229	 *
   1230	 * This optimization changes behavior when a security related attribute
   1231	 * (suid/sgid/security.*) is changed on an underlying layer.  This is
   1232	 * okay because we don't yet have guarantees in that case, but it will
   1233	 * need careful treatment once we want to honour changes to underlying
   1234	 * filesystems.
   1235	 */
   1236	if (upper_mnt->mnt_sb->s_flags & SB_NOSEC)
   1237		sb->s_flags |= SB_NOSEC;
   1238
   1239	if (ovl_inuse_trylock(ovl_upper_mnt(ofs)->mnt_root)) {
   1240		ofs->upperdir_locked = true;
   1241	} else {
   1242		err = ovl_report_in_use(ofs, "upperdir");
   1243		if (err)
   1244			goto out;
   1245	}
   1246
   1247	err = 0;
   1248out:
   1249	return err;
   1250}
   1251
   1252/*
   1253 * Returns 1 if RENAME_WHITEOUT is supported, 0 if not supported and
   1254 * negative values if error is encountered.
   1255 */
   1256static int ovl_check_rename_whiteout(struct ovl_fs *ofs)
   1257{
   1258	struct dentry *workdir = ofs->workdir;
   1259	struct inode *dir = d_inode(workdir);
   1260	struct dentry *temp;
   1261	struct dentry *dest;
   1262	struct dentry *whiteout;
   1263	struct name_snapshot name;
   1264	int err;
   1265
   1266	inode_lock_nested(dir, I_MUTEX_PARENT);
   1267
   1268	temp = ovl_create_temp(ofs, workdir, OVL_CATTR(S_IFREG | 0));
   1269	err = PTR_ERR(temp);
   1270	if (IS_ERR(temp))
   1271		goto out_unlock;
   1272
   1273	dest = ovl_lookup_temp(ofs, workdir);
   1274	err = PTR_ERR(dest);
   1275	if (IS_ERR(dest)) {
   1276		dput(temp);
   1277		goto out_unlock;
   1278	}
   1279
   1280	/* Name is inline and stable - using snapshot as a copy helper */
   1281	take_dentry_name_snapshot(&name, temp);
   1282	err = ovl_do_rename(ofs, dir, temp, dir, dest, RENAME_WHITEOUT);
   1283	if (err) {
   1284		if (err == -EINVAL)
   1285			err = 0;
   1286		goto cleanup_temp;
   1287	}
   1288
   1289	whiteout = ovl_lookup_upper(ofs, name.name.name, workdir, name.name.len);
   1290	err = PTR_ERR(whiteout);
   1291	if (IS_ERR(whiteout))
   1292		goto cleanup_temp;
   1293
   1294	err = ovl_is_whiteout(whiteout);
   1295
   1296	/* Best effort cleanup of whiteout and temp file */
   1297	if (err)
   1298		ovl_cleanup(ofs, dir, whiteout);
   1299	dput(whiteout);
   1300
   1301cleanup_temp:
   1302	ovl_cleanup(ofs, dir, temp);
   1303	release_dentry_name_snapshot(&name);
   1304	dput(temp);
   1305	dput(dest);
   1306
   1307out_unlock:
   1308	inode_unlock(dir);
   1309
   1310	return err;
   1311}
   1312
   1313static struct dentry *ovl_lookup_or_create(struct ovl_fs *ofs,
   1314					   struct dentry *parent,
   1315					   const char *name, umode_t mode)
   1316{
   1317	size_t len = strlen(name);
   1318	struct dentry *child;
   1319
   1320	inode_lock_nested(parent->d_inode, I_MUTEX_PARENT);
   1321	child = ovl_lookup_upper(ofs, name, parent, len);
   1322	if (!IS_ERR(child) && !child->d_inode)
   1323		child = ovl_create_real(ofs, parent->d_inode, child,
   1324					OVL_CATTR(mode));
   1325	inode_unlock(parent->d_inode);
   1326	dput(parent);
   1327
   1328	return child;
   1329}
   1330
   1331/*
   1332 * Creates $workdir/work/incompat/volatile/dirty file if it is not already
   1333 * present.
   1334 */
   1335static int ovl_create_volatile_dirty(struct ovl_fs *ofs)
   1336{
   1337	unsigned int ctr;
   1338	struct dentry *d = dget(ofs->workbasedir);
   1339	static const char *const volatile_path[] = {
   1340		OVL_WORKDIR_NAME, "incompat", "volatile", "dirty"
   1341	};
   1342	const char *const *name = volatile_path;
   1343
   1344	for (ctr = ARRAY_SIZE(volatile_path); ctr; ctr--, name++) {
   1345		d = ovl_lookup_or_create(ofs, d, *name, ctr > 1 ? S_IFDIR : S_IFREG);
   1346		if (IS_ERR(d))
   1347			return PTR_ERR(d);
   1348	}
   1349	dput(d);
   1350	return 0;
   1351}
   1352
   1353static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
   1354			    struct path *workpath)
   1355{
   1356	struct vfsmount *mnt = ovl_upper_mnt(ofs);
   1357	struct dentry *temp, *workdir;
   1358	bool rename_whiteout;
   1359	bool d_type;
   1360	int fh_type;
   1361	int err;
   1362
   1363	err = mnt_want_write(mnt);
   1364	if (err)
   1365		return err;
   1366
   1367	workdir = ovl_workdir_create(ofs, OVL_WORKDIR_NAME, false);
   1368	err = PTR_ERR(workdir);
   1369	if (IS_ERR_OR_NULL(workdir))
   1370		goto out;
   1371
   1372	ofs->workdir = workdir;
   1373
   1374	err = ovl_setup_trap(sb, ofs->workdir, &ofs->workdir_trap, "workdir");
   1375	if (err)
   1376		goto out;
   1377
   1378	/*
   1379	 * Upper should support d_type, else whiteouts are visible.  Given
   1380	 * workdir and upper are on same fs, we can do iterate_dir() on
   1381	 * workdir. This check requires successful creation of workdir in
   1382	 * previous step.
   1383	 */
   1384	err = ovl_check_d_type_supported(workpath);
   1385	if (err < 0)
   1386		goto out;
   1387
   1388	d_type = err;
   1389	if (!d_type)
   1390		pr_warn("upper fs needs to support d_type.\n");
   1391
   1392	/* Check if upper/work fs supports O_TMPFILE */
   1393	temp = ovl_do_tmpfile(ofs, ofs->workdir, S_IFREG | 0);
   1394	ofs->tmpfile = !IS_ERR(temp);
   1395	if (ofs->tmpfile)
   1396		dput(temp);
   1397	else
   1398		pr_warn("upper fs does not support tmpfile.\n");
   1399
   1400
   1401	/* Check if upper/work fs supports RENAME_WHITEOUT */
   1402	err = ovl_check_rename_whiteout(ofs);
   1403	if (err < 0)
   1404		goto out;
   1405
   1406	rename_whiteout = err;
   1407	if (!rename_whiteout)
   1408		pr_warn("upper fs does not support RENAME_WHITEOUT.\n");
   1409
   1410	/*
   1411	 * Check if upper/work fs supports (trusted|user).overlay.* xattr
   1412	 */
   1413	err = ovl_setxattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE, "0", 1);
   1414	if (err) {
   1415		ofs->noxattr = true;
   1416		if (ofs->config.index || ofs->config.metacopy) {
   1417			ofs->config.index = false;
   1418			ofs->config.metacopy = false;
   1419			pr_warn("upper fs does not support xattr, falling back to index=off,metacopy=off.\n");
   1420		}
   1421		/*
   1422		 * xattr support is required for persistent st_ino.
   1423		 * Without persistent st_ino, xino=auto falls back to xino=off.
   1424		 */
   1425		if (ofs->config.xino == OVL_XINO_AUTO) {
   1426			ofs->config.xino = OVL_XINO_OFF;
   1427			pr_warn("upper fs does not support xattr, falling back to xino=off.\n");
   1428		}
   1429		err = 0;
   1430	} else {
   1431		ovl_removexattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE);
   1432	}
   1433
   1434	/*
   1435	 * We allowed sub-optimal upper fs configuration and don't want to break
   1436	 * users over kernel upgrade, but we never allowed remote upper fs, so
   1437	 * we can enforce strict requirements for remote upper fs.
   1438	 */
   1439	if (ovl_dentry_remote(ofs->workdir) &&
   1440	    (!d_type || !rename_whiteout || ofs->noxattr)) {
   1441		pr_err("upper fs missing required features.\n");
   1442		err = -EINVAL;
   1443		goto out;
   1444	}
   1445
   1446	/*
   1447	 * For volatile mount, create a incompat/volatile/dirty file to keep
   1448	 * track of it.
   1449	 */
   1450	if (ofs->config.ovl_volatile) {
   1451		err = ovl_create_volatile_dirty(ofs);
   1452		if (err < 0) {
   1453			pr_err("Failed to create volatile/dirty file.\n");
   1454			goto out;
   1455		}
   1456	}
   1457
   1458	/* Check if upper/work fs supports file handles */
   1459	fh_type = ovl_can_decode_fh(ofs->workdir->d_sb);
   1460	if (ofs->config.index && !fh_type) {
   1461		ofs->config.index = false;
   1462		pr_warn("upper fs does not support file handles, falling back to index=off.\n");
   1463	}
   1464
   1465	/* Check if upper fs has 32bit inode numbers */
   1466	if (fh_type != FILEID_INO32_GEN)
   1467		ofs->xino_mode = -1;
   1468
   1469	/* NFS export of r/w mount depends on index */
   1470	if (ofs->config.nfs_export && !ofs->config.index) {
   1471		pr_warn("NFS export requires \"index=on\", falling back to nfs_export=off.\n");
   1472		ofs->config.nfs_export = false;
   1473	}
   1474out:
   1475	mnt_drop_write(mnt);
   1476	return err;
   1477}
   1478
   1479static int ovl_get_workdir(struct super_block *sb, struct ovl_fs *ofs,
   1480			   struct path *upperpath)
   1481{
   1482	int err;
   1483	struct path workpath = { };
   1484
   1485	err = ovl_mount_dir(ofs->config.workdir, &workpath);
   1486	if (err)
   1487		goto out;
   1488
   1489	err = -EINVAL;
   1490	if (upperpath->mnt != workpath.mnt) {
   1491		pr_err("workdir and upperdir must reside under the same mount\n");
   1492		goto out;
   1493	}
   1494	if (!ovl_workdir_ok(workpath.dentry, upperpath->dentry)) {
   1495		pr_err("workdir and upperdir must be separate subtrees\n");
   1496		goto out;
   1497	}
   1498
   1499	ofs->workbasedir = dget(workpath.dentry);
   1500
   1501	if (ovl_inuse_trylock(ofs->workbasedir)) {
   1502		ofs->workdir_locked = true;
   1503	} else {
   1504		err = ovl_report_in_use(ofs, "workdir");
   1505		if (err)
   1506			goto out;
   1507	}
   1508
   1509	err = ovl_setup_trap(sb, ofs->workbasedir, &ofs->workbasedir_trap,
   1510			     "workdir");
   1511	if (err)
   1512		goto out;
   1513
   1514	err = ovl_make_workdir(sb, ofs, &workpath);
   1515
   1516out:
   1517	path_put(&workpath);
   1518
   1519	return err;
   1520}
   1521
   1522static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs,
   1523			    struct ovl_entry *oe, struct path *upperpath)
   1524{
   1525	struct vfsmount *mnt = ovl_upper_mnt(ofs);
   1526	struct dentry *indexdir;
   1527	int err;
   1528
   1529	err = mnt_want_write(mnt);
   1530	if (err)
   1531		return err;
   1532
   1533	/* Verify lower root is upper root origin */
   1534	err = ovl_verify_origin(ofs, upperpath->dentry,
   1535				oe->lowerstack[0].dentry, true);
   1536	if (err) {
   1537		pr_err("failed to verify upper root origin\n");
   1538		goto out;
   1539	}
   1540
   1541	/* index dir will act also as workdir */
   1542	iput(ofs->workdir_trap);
   1543	ofs->workdir_trap = NULL;
   1544	dput(ofs->workdir);
   1545	ofs->workdir = NULL;
   1546	indexdir = ovl_workdir_create(ofs, OVL_INDEXDIR_NAME, true);
   1547	if (IS_ERR(indexdir)) {
   1548		err = PTR_ERR(indexdir);
   1549	} else if (indexdir) {
   1550		ofs->indexdir = indexdir;
   1551		ofs->workdir = dget(indexdir);
   1552
   1553		err = ovl_setup_trap(sb, ofs->indexdir, &ofs->indexdir_trap,
   1554				     "indexdir");
   1555		if (err)
   1556			goto out;
   1557
   1558		/*
   1559		 * Verify upper root is exclusively associated with index dir.
   1560		 * Older kernels stored upper fh in ".overlay.origin"
   1561		 * xattr. If that xattr exists, verify that it is a match to
   1562		 * upper dir file handle. In any case, verify or set xattr
   1563		 * ".overlay.upper" to indicate that index may have
   1564		 * directory entries.
   1565		 */
   1566		if (ovl_check_origin_xattr(ofs, ofs->indexdir)) {
   1567			err = ovl_verify_set_fh(ofs, ofs->indexdir,
   1568						OVL_XATTR_ORIGIN,
   1569						upperpath->dentry, true, false);
   1570			if (err)
   1571				pr_err("failed to verify index dir 'origin' xattr\n");
   1572		}
   1573		err = ovl_verify_upper(ofs, ofs->indexdir, upperpath->dentry,
   1574				       true);
   1575		if (err)
   1576			pr_err("failed to verify index dir 'upper' xattr\n");
   1577
   1578		/* Cleanup bad/stale/orphan index entries */
   1579		if (!err)
   1580			err = ovl_indexdir_cleanup(ofs);
   1581	}
   1582	if (err || !ofs->indexdir)
   1583		pr_warn("try deleting index dir or mounting with '-o index=off' to disable inodes index.\n");
   1584
   1585out:
   1586	mnt_drop_write(mnt);
   1587	return err;
   1588}
   1589
   1590static bool ovl_lower_uuid_ok(struct ovl_fs *ofs, const uuid_t *uuid)
   1591{
   1592	unsigned int i;
   1593
   1594	if (!ofs->config.nfs_export && !ovl_upper_mnt(ofs))
   1595		return true;
   1596
   1597	/*
   1598	 * We allow using single lower with null uuid for index and nfs_export
   1599	 * for example to support those features with single lower squashfs.
   1600	 * To avoid regressions in setups of overlay with re-formatted lower
   1601	 * squashfs, do not allow decoding origin with lower null uuid unless
   1602	 * user opted-in to one of the new features that require following the
   1603	 * lower inode of non-dir upper.
   1604	 */
   1605	if (ovl_allow_offline_changes(ofs) && uuid_is_null(uuid))
   1606		return false;
   1607
   1608	for (i = 0; i < ofs->numfs; i++) {
   1609		/*
   1610		 * We use uuid to associate an overlay lower file handle with a
   1611		 * lower layer, so we can accept lower fs with null uuid as long
   1612		 * as all lower layers with null uuid are on the same fs.
   1613		 * if we detect multiple lower fs with the same uuid, we
   1614		 * disable lower file handle decoding on all of them.
   1615		 */
   1616		if (ofs->fs[i].is_lower &&
   1617		    uuid_equal(&ofs->fs[i].sb->s_uuid, uuid)) {
   1618			ofs->fs[i].bad_uuid = true;
   1619			return false;
   1620		}
   1621	}
   1622	return true;
   1623}
   1624
   1625/* Get a unique fsid for the layer */
   1626static int ovl_get_fsid(struct ovl_fs *ofs, const struct path *path)
   1627{
   1628	struct super_block *sb = path->mnt->mnt_sb;
   1629	unsigned int i;
   1630	dev_t dev;
   1631	int err;
   1632	bool bad_uuid = false;
   1633	bool warn = false;
   1634
   1635	for (i = 0; i < ofs->numfs; i++) {
   1636		if (ofs->fs[i].sb == sb)
   1637			return i;
   1638	}
   1639
   1640	if (!ovl_lower_uuid_ok(ofs, &sb->s_uuid)) {
   1641		bad_uuid = true;
   1642		if (ofs->config.xino == OVL_XINO_AUTO) {
   1643			ofs->config.xino = OVL_XINO_OFF;
   1644			warn = true;
   1645		}
   1646		if (ofs->config.index || ofs->config.nfs_export) {
   1647			ofs->config.index = false;
   1648			ofs->config.nfs_export = false;
   1649			warn = true;
   1650		}
   1651		if (warn) {
   1652			pr_warn("%s uuid detected in lower fs '%pd2', falling back to xino=%s,index=off,nfs_export=off.\n",
   1653				uuid_is_null(&sb->s_uuid) ? "null" :
   1654							    "conflicting",
   1655				path->dentry, ovl_xino_str[ofs->config.xino]);
   1656		}
   1657	}
   1658
   1659	err = get_anon_bdev(&dev);
   1660	if (err) {
   1661		pr_err("failed to get anonymous bdev for lowerpath\n");
   1662		return err;
   1663	}
   1664
   1665	ofs->fs[ofs->numfs].sb = sb;
   1666	ofs->fs[ofs->numfs].pseudo_dev = dev;
   1667	ofs->fs[ofs->numfs].bad_uuid = bad_uuid;
   1668
   1669	return ofs->numfs++;
   1670}
   1671
   1672static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
   1673			  struct path *stack, unsigned int numlower,
   1674			  struct ovl_layer *layers)
   1675{
   1676	int err;
   1677	unsigned int i;
   1678
   1679	err = -ENOMEM;
   1680	ofs->fs = kcalloc(numlower + 1, sizeof(struct ovl_sb), GFP_KERNEL);
   1681	if (ofs->fs == NULL)
   1682		goto out;
   1683
   1684	/* idx/fsid 0 are reserved for upper fs even with lower only overlay */
   1685	ofs->numfs++;
   1686
   1687	/*
   1688	 * All lower layers that share the same fs as upper layer, use the same
   1689	 * pseudo_dev as upper layer.  Allocate fs[0].pseudo_dev even for lower
   1690	 * only overlay to simplify ovl_fs_free().
   1691	 * is_lower will be set if upper fs is shared with a lower layer.
   1692	 */
   1693	err = get_anon_bdev(&ofs->fs[0].pseudo_dev);
   1694	if (err) {
   1695		pr_err("failed to get anonymous bdev for upper fs\n");
   1696		goto out;
   1697	}
   1698
   1699	if (ovl_upper_mnt(ofs)) {
   1700		ofs->fs[0].sb = ovl_upper_mnt(ofs)->mnt_sb;
   1701		ofs->fs[0].is_lower = false;
   1702	}
   1703
   1704	for (i = 0; i < numlower; i++) {
   1705		struct vfsmount *mnt;
   1706		struct inode *trap;
   1707		int fsid;
   1708
   1709		err = fsid = ovl_get_fsid(ofs, &stack[i]);
   1710		if (err < 0)
   1711			goto out;
   1712
   1713		/*
   1714		 * Check if lower root conflicts with this overlay layers before
   1715		 * checking if it is in-use as upperdir/workdir of "another"
   1716		 * mount, because we do not bother to check in ovl_is_inuse() if
   1717		 * the upperdir/workdir is in fact in-use by our
   1718		 * upperdir/workdir.
   1719		 */
   1720		err = ovl_setup_trap(sb, stack[i].dentry, &trap, "lowerdir");
   1721		if (err)
   1722			goto out;
   1723
   1724		if (ovl_is_inuse(stack[i].dentry)) {
   1725			err = ovl_report_in_use(ofs, "lowerdir");
   1726			if (err) {
   1727				iput(trap);
   1728				goto out;
   1729			}
   1730		}
   1731
   1732		mnt = clone_private_mount(&stack[i]);
   1733		err = PTR_ERR(mnt);
   1734		if (IS_ERR(mnt)) {
   1735			pr_err("failed to clone lowerpath\n");
   1736			iput(trap);
   1737			goto out;
   1738		}
   1739
   1740		/*
   1741		 * Make lower layers R/O.  That way fchmod/fchown on lower file
   1742		 * will fail instead of modifying lower fs.
   1743		 */
   1744		mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME;
   1745
   1746		layers[ofs->numlayer].trap = trap;
   1747		layers[ofs->numlayer].mnt = mnt;
   1748		layers[ofs->numlayer].idx = ofs->numlayer;
   1749		layers[ofs->numlayer].fsid = fsid;
   1750		layers[ofs->numlayer].fs = &ofs->fs[fsid];
   1751		ofs->numlayer++;
   1752		ofs->fs[fsid].is_lower = true;
   1753	}
   1754
   1755	/*
   1756	 * When all layers on same fs, overlay can use real inode numbers.
   1757	 * With mount option "xino=<on|auto>", mounter declares that there are
   1758	 * enough free high bits in underlying fs to hold the unique fsid.
   1759	 * If overlayfs does encounter underlying inodes using the high xino
   1760	 * bits reserved for fsid, it emits a warning and uses the original
   1761	 * inode number or a non persistent inode number allocated from a
   1762	 * dedicated range.
   1763	 */
   1764	if (ofs->numfs - !ovl_upper_mnt(ofs) == 1) {
   1765		if (ofs->config.xino == OVL_XINO_ON)
   1766			pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
   1767		ofs->xino_mode = 0;
   1768	} else if (ofs->config.xino == OVL_XINO_OFF) {
   1769		ofs->xino_mode = -1;
   1770	} else if (ofs->xino_mode < 0) {
   1771		/*
   1772		 * This is a roundup of number of bits needed for encoding
   1773		 * fsid, where fsid 0 is reserved for upper fs (even with
   1774		 * lower only overlay) +1 extra bit is reserved for the non
   1775		 * persistent inode number range that is used for resolving
   1776		 * xino lower bits overflow.
   1777		 */
   1778		BUILD_BUG_ON(ilog2(OVL_MAX_STACK) > 30);
   1779		ofs->xino_mode = ilog2(ofs->numfs - 1) + 2;
   1780	}
   1781
   1782	if (ofs->xino_mode > 0) {
   1783		pr_info("\"xino\" feature enabled using %d upper inode bits.\n",
   1784			ofs->xino_mode);
   1785	}
   1786
   1787	err = 0;
   1788out:
   1789	return err;
   1790}
   1791
   1792static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
   1793				const char *lower, unsigned int numlower,
   1794				struct ovl_fs *ofs, struct ovl_layer *layers)
   1795{
   1796	int err;
   1797	struct path *stack = NULL;
   1798	unsigned int i;
   1799	struct ovl_entry *oe;
   1800
   1801	if (!ofs->config.upperdir && numlower == 1) {
   1802		pr_err("at least 2 lowerdir are needed while upperdir nonexistent\n");
   1803		return ERR_PTR(-EINVAL);
   1804	}
   1805
   1806	stack = kcalloc(numlower, sizeof(struct path), GFP_KERNEL);
   1807	if (!stack)
   1808		return ERR_PTR(-ENOMEM);
   1809
   1810	err = -EINVAL;
   1811	for (i = 0; i < numlower; i++) {
   1812		err = ovl_lower_dir(lower, &stack[i], ofs, &sb->s_stack_depth);
   1813		if (err)
   1814			goto out_err;
   1815
   1816		lower = strchr(lower, '\0') + 1;
   1817	}
   1818
   1819	err = -EINVAL;
   1820	sb->s_stack_depth++;
   1821	if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
   1822		pr_err("maximum fs stacking depth exceeded\n");
   1823		goto out_err;
   1824	}
   1825
   1826	err = ovl_get_layers(sb, ofs, stack, numlower, layers);
   1827	if (err)
   1828		goto out_err;
   1829
   1830	err = -ENOMEM;
   1831	oe = ovl_alloc_entry(numlower);
   1832	if (!oe)
   1833		goto out_err;
   1834
   1835	for (i = 0; i < numlower; i++) {
   1836		oe->lowerstack[i].dentry = dget(stack[i].dentry);
   1837		oe->lowerstack[i].layer = &ofs->layers[i+1];
   1838	}
   1839
   1840out:
   1841	for (i = 0; i < numlower; i++)
   1842		path_put(&stack[i]);
   1843	kfree(stack);
   1844
   1845	return oe;
   1846
   1847out_err:
   1848	oe = ERR_PTR(err);
   1849	goto out;
   1850}
   1851
   1852/*
   1853 * Check if this layer root is a descendant of:
   1854 * - another layer of this overlayfs instance
   1855 * - upper/work dir of any overlayfs instance
   1856 */
   1857static int ovl_check_layer(struct super_block *sb, struct ovl_fs *ofs,
   1858			   struct dentry *dentry, const char *name,
   1859			   bool is_lower)
   1860{
   1861	struct dentry *next = dentry, *parent;
   1862	int err = 0;
   1863
   1864	if (!dentry)
   1865		return 0;
   1866
   1867	parent = dget_parent(next);
   1868
   1869	/* Walk back ancestors to root (inclusive) looking for traps */
   1870	while (!err && parent != next) {
   1871		if (is_lower && ovl_lookup_trap_inode(sb, parent)) {
   1872			err = -ELOOP;
   1873			pr_err("overlapping %s path\n", name);
   1874		} else if (ovl_is_inuse(parent)) {
   1875			err = ovl_report_in_use(ofs, name);
   1876		}
   1877		next = parent;
   1878		parent = dget_parent(next);
   1879		dput(next);
   1880	}
   1881
   1882	dput(parent);
   1883
   1884	return err;
   1885}
   1886
   1887/*
   1888 * Check if any of the layers or work dirs overlap.
   1889 */
   1890static int ovl_check_overlapping_layers(struct super_block *sb,
   1891					struct ovl_fs *ofs)
   1892{
   1893	int i, err;
   1894
   1895	if (ovl_upper_mnt(ofs)) {
   1896		err = ovl_check_layer(sb, ofs, ovl_upper_mnt(ofs)->mnt_root,
   1897				      "upperdir", false);
   1898		if (err)
   1899			return err;
   1900
   1901		/*
   1902		 * Checking workbasedir avoids hitting ovl_is_inuse(parent) of
   1903		 * this instance and covers overlapping work and index dirs,
   1904		 * unless work or index dir have been moved since created inside
   1905		 * workbasedir.  In that case, we already have their traps in
   1906		 * inode cache and we will catch that case on lookup.
   1907		 */
   1908		err = ovl_check_layer(sb, ofs, ofs->workbasedir, "workdir",
   1909				      false);
   1910		if (err)
   1911			return err;
   1912	}
   1913
   1914	for (i = 1; i < ofs->numlayer; i++) {
   1915		err = ovl_check_layer(sb, ofs,
   1916				      ofs->layers[i].mnt->mnt_root,
   1917				      "lowerdir", true);
   1918		if (err)
   1919			return err;
   1920	}
   1921
   1922	return 0;
   1923}
   1924
   1925static struct dentry *ovl_get_root(struct super_block *sb,
   1926				   struct dentry *upperdentry,
   1927				   struct ovl_entry *oe)
   1928{
   1929	struct dentry *root;
   1930	struct ovl_path *lowerpath = &oe->lowerstack[0];
   1931	unsigned long ino = d_inode(lowerpath->dentry)->i_ino;
   1932	int fsid = lowerpath->layer->fsid;
   1933	struct ovl_inode_params oip = {
   1934		.upperdentry = upperdentry,
   1935		.lowerpath = lowerpath,
   1936	};
   1937
   1938	root = d_make_root(ovl_new_inode(sb, S_IFDIR, 0));
   1939	if (!root)
   1940		return NULL;
   1941
   1942	root->d_fsdata = oe;
   1943
   1944	if (upperdentry) {
   1945		/* Root inode uses upper st_ino/i_ino */
   1946		ino = d_inode(upperdentry)->i_ino;
   1947		fsid = 0;
   1948		ovl_dentry_set_upper_alias(root);
   1949		if (ovl_is_impuredir(sb, upperdentry))
   1950			ovl_set_flag(OVL_IMPURE, d_inode(root));
   1951	}
   1952
   1953	/* Root is always merge -> can have whiteouts */
   1954	ovl_set_flag(OVL_WHITEOUTS, d_inode(root));
   1955	ovl_dentry_set_flag(OVL_E_CONNECTED, root);
   1956	ovl_set_upperdata(d_inode(root));
   1957	ovl_inode_init(d_inode(root), &oip, ino, fsid);
   1958	ovl_dentry_update_reval(root, upperdentry, DCACHE_OP_WEAK_REVALIDATE);
   1959
   1960	return root;
   1961}
   1962
   1963static int ovl_fill_super(struct super_block *sb, void *data, int silent)
   1964{
   1965	struct path upperpath = { };
   1966	struct dentry *root_dentry;
   1967	struct ovl_entry *oe;
   1968	struct ovl_fs *ofs;
   1969	struct ovl_layer *layers;
   1970	struct cred *cred;
   1971	char *splitlower = NULL;
   1972	unsigned int numlower;
   1973	int err;
   1974
   1975	err = -EIO;
   1976	if (WARN_ON(sb->s_user_ns != current_user_ns()))
   1977		goto out;
   1978
   1979	sb->s_d_op = &ovl_dentry_operations;
   1980
   1981	err = -ENOMEM;
   1982	ofs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL);
   1983	if (!ofs)
   1984		goto out;
   1985
   1986	err = -ENOMEM;
   1987	ofs->creator_cred = cred = prepare_creds();
   1988	if (!cred)
   1989		goto out_err;
   1990
   1991	/* Is there a reason anyone would want not to share whiteouts? */
   1992	ofs->share_whiteout = true;
   1993
   1994	ofs->config.index = ovl_index_def;
   1995	ofs->config.uuid = true;
   1996	ofs->config.nfs_export = ovl_nfs_export_def;
   1997	ofs->config.xino = ovl_xino_def();
   1998	ofs->config.metacopy = ovl_metacopy_def;
   1999	err = ovl_parse_opt((char *) data, &ofs->config);
   2000	if (err)
   2001		goto out_err;
   2002
   2003	err = -EINVAL;
   2004	if (!ofs->config.lowerdir) {
   2005		if (!silent)
   2006			pr_err("missing 'lowerdir'\n");
   2007		goto out_err;
   2008	}
   2009
   2010	err = -ENOMEM;
   2011	splitlower = kstrdup(ofs->config.lowerdir, GFP_KERNEL);
   2012	if (!splitlower)
   2013		goto out_err;
   2014
   2015	err = -EINVAL;
   2016	numlower = ovl_split_lowerdirs(splitlower);
   2017	if (numlower > OVL_MAX_STACK) {
   2018		pr_err("too many lower directories, limit is %d\n",
   2019		       OVL_MAX_STACK);
   2020		goto out_err;
   2021	}
   2022
   2023	err = -ENOMEM;
   2024	layers = kcalloc(numlower + 1, sizeof(struct ovl_layer), GFP_KERNEL);
   2025	if (!layers)
   2026		goto out_err;
   2027
   2028	ofs->layers = layers;
   2029	/* Layer 0 is reserved for upper even if there's no upper */
   2030	ofs->numlayer = 1;
   2031
   2032	sb->s_stack_depth = 0;
   2033	sb->s_maxbytes = MAX_LFS_FILESIZE;
   2034	atomic_long_set(&ofs->last_ino, 1);
   2035	/* Assume underlaying fs uses 32bit inodes unless proven otherwise */
   2036	if (ofs->config.xino != OVL_XINO_OFF) {
   2037		ofs->xino_mode = BITS_PER_LONG - 32;
   2038		if (!ofs->xino_mode) {
   2039			pr_warn("xino not supported on 32bit kernel, falling back to xino=off.\n");
   2040			ofs->config.xino = OVL_XINO_OFF;
   2041		}
   2042	}
   2043
   2044	/* alloc/destroy_inode needed for setting up traps in inode cache */
   2045	sb->s_op = &ovl_super_operations;
   2046
   2047	if (ofs->config.upperdir) {
   2048		struct super_block *upper_sb;
   2049
   2050		err = -EINVAL;
   2051		if (!ofs->config.workdir) {
   2052			pr_err("missing 'workdir'\n");
   2053			goto out_err;
   2054		}
   2055
   2056		err = ovl_get_upper(sb, ofs, &layers[0], &upperpath);
   2057		if (err)
   2058			goto out_err;
   2059
   2060		upper_sb = ovl_upper_mnt(ofs)->mnt_sb;
   2061		if (!ovl_should_sync(ofs)) {
   2062			ofs->errseq = errseq_sample(&upper_sb->s_wb_err);
   2063			if (errseq_check(&upper_sb->s_wb_err, ofs->errseq)) {
   2064				err = -EIO;
   2065				pr_err("Cannot mount volatile when upperdir has an unseen error. Sync upperdir fs to clear state.\n");
   2066				goto out_err;
   2067			}
   2068		}
   2069
   2070		err = ovl_get_workdir(sb, ofs, &upperpath);
   2071		if (err)
   2072			goto out_err;
   2073
   2074		if (!ofs->workdir)
   2075			sb->s_flags |= SB_RDONLY;
   2076
   2077		sb->s_stack_depth = upper_sb->s_stack_depth;
   2078		sb->s_time_gran = upper_sb->s_time_gran;
   2079	}
   2080	oe = ovl_get_lowerstack(sb, splitlower, numlower, ofs, layers);
   2081	err = PTR_ERR(oe);
   2082	if (IS_ERR(oe))
   2083		goto out_err;
   2084
   2085	/* If the upper fs is nonexistent, we mark overlayfs r/o too */
   2086	if (!ovl_upper_mnt(ofs))
   2087		sb->s_flags |= SB_RDONLY;
   2088
   2089	if (!ofs->config.uuid && ofs->numfs > 1) {
   2090		pr_warn("The uuid=off requires a single fs for lower and upper, falling back to uuid=on.\n");
   2091		ofs->config.uuid = true;
   2092	}
   2093
   2094	if (!ovl_force_readonly(ofs) && ofs->config.index) {
   2095		err = ovl_get_indexdir(sb, ofs, oe, &upperpath);
   2096		if (err)
   2097			goto out_free_oe;
   2098
   2099		/* Force r/o mount with no index dir */
   2100		if (!ofs->indexdir)
   2101			sb->s_flags |= SB_RDONLY;
   2102	}
   2103
   2104	err = ovl_check_overlapping_layers(sb, ofs);
   2105	if (err)
   2106		goto out_free_oe;
   2107
   2108	/* Show index=off in /proc/mounts for forced r/o mount */
   2109	if (!ofs->indexdir) {
   2110		ofs->config.index = false;
   2111		if (ovl_upper_mnt(ofs) && ofs->config.nfs_export) {
   2112			pr_warn("NFS export requires an index dir, falling back to nfs_export=off.\n");
   2113			ofs->config.nfs_export = false;
   2114		}
   2115	}
   2116
   2117	if (ofs->config.metacopy && ofs->config.nfs_export) {
   2118		pr_warn("NFS export is not supported with metadata only copy up, falling back to nfs_export=off.\n");
   2119		ofs->config.nfs_export = false;
   2120	}
   2121
   2122	if (ofs->config.nfs_export)
   2123		sb->s_export_op = &ovl_export_operations;
   2124
   2125	/* Never override disk quota limits or use reserved space */
   2126	cap_lower(cred->cap_effective, CAP_SYS_RESOURCE);
   2127
   2128	sb->s_magic = OVERLAYFS_SUPER_MAGIC;
   2129	sb->s_xattr = ofs->config.userxattr ? ovl_user_xattr_handlers :
   2130		ovl_trusted_xattr_handlers;
   2131	sb->s_fs_info = ofs;
   2132	sb->s_flags |= SB_POSIXACL;
   2133	sb->s_iflags |= SB_I_SKIP_SYNC;
   2134
   2135	err = -ENOMEM;
   2136	root_dentry = ovl_get_root(sb, upperpath.dentry, oe);
   2137	if (!root_dentry)
   2138		goto out_free_oe;
   2139
   2140	mntput(upperpath.mnt);
   2141	kfree(splitlower);
   2142
   2143	sb->s_root = root_dentry;
   2144
   2145	return 0;
   2146
   2147out_free_oe:
   2148	ovl_entry_stack_free(oe);
   2149	kfree(oe);
   2150out_err:
   2151	kfree(splitlower);
   2152	path_put(&upperpath);
   2153	ovl_free_fs(ofs);
   2154out:
   2155	return err;
   2156}
   2157
   2158static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
   2159				const char *dev_name, void *raw_data)
   2160{
   2161	return mount_nodev(fs_type, flags, raw_data, ovl_fill_super);
   2162}
   2163
   2164static struct file_system_type ovl_fs_type = {
   2165	.owner		= THIS_MODULE,
   2166	.name		= "overlay",
   2167	.fs_flags	= FS_USERNS_MOUNT,
   2168	.mount		= ovl_mount,
   2169	.kill_sb	= kill_anon_super,
   2170};
   2171MODULE_ALIAS_FS("overlay");
   2172
   2173static void ovl_inode_init_once(void *foo)
   2174{
   2175	struct ovl_inode *oi = foo;
   2176
   2177	inode_init_once(&oi->vfs_inode);
   2178}
   2179
   2180static int __init ovl_init(void)
   2181{
   2182	int err;
   2183
   2184	ovl_inode_cachep = kmem_cache_create("ovl_inode",
   2185					     sizeof(struct ovl_inode), 0,
   2186					     (SLAB_RECLAIM_ACCOUNT|
   2187					      SLAB_MEM_SPREAD|SLAB_ACCOUNT),
   2188					     ovl_inode_init_once);
   2189	if (ovl_inode_cachep == NULL)
   2190		return -ENOMEM;
   2191
   2192	err = ovl_aio_request_cache_init();
   2193	if (!err) {
   2194		err = register_filesystem(&ovl_fs_type);
   2195		if (!err)
   2196			return 0;
   2197
   2198		ovl_aio_request_cache_destroy();
   2199	}
   2200	kmem_cache_destroy(ovl_inode_cachep);
   2201
   2202	return err;
   2203}
   2204
   2205static void __exit ovl_exit(void)
   2206{
   2207	unregister_filesystem(&ovl_fs_type);
   2208
   2209	/*
   2210	 * Make sure all delayed rcu free inodes are flushed before we
   2211	 * destroy cache.
   2212	 */
   2213	rcu_barrier();
   2214	kmem_cache_destroy(ovl_inode_cachep);
   2215	ovl_aio_request_cache_destroy();
   2216}
   2217
   2218module_init(ovl_init);
   2219module_exit(ovl_exit);