super.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434
  1. /*
  2. *
  3. * Copyright (C) 2011 Novell 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. #include <uapi/linux/magic.h>
  10. #include <linux/fs.h>
  11. #include <linux/namei.h>
  12. #include <linux/xattr.h>
  13. #include <linux/mount.h>
  14. #include <linux/parser.h>
  15. #include <linux/module.h>
  16. #include <linux/statfs.h>
  17. #include <linux/seq_file.h>
  18. #include <linux/posix_acl_xattr.h>
  19. #include "overlayfs.h"
  20. MODULE_AUTHOR("Miklos Szeredi <miklos@szeredi.hu>");
  21. MODULE_DESCRIPTION("Overlay filesystem");
  22. MODULE_LICENSE("GPL");
  23. struct ovl_dir_cache;
  24. #define OVL_MAX_STACK 500
  25. static bool ovl_redirect_dir_def = IS_ENABLED(CONFIG_OVERLAY_FS_REDIRECT_DIR);
  26. module_param_named(redirect_dir, ovl_redirect_dir_def, bool, 0644);
  27. MODULE_PARM_DESC(ovl_redirect_dir_def,
  28. "Default to on or off for the redirect_dir feature");
  29. static bool ovl_redirect_always_follow =
  30. IS_ENABLED(CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW);
  31. module_param_named(redirect_always_follow, ovl_redirect_always_follow,
  32. bool, 0644);
  33. MODULE_PARM_DESC(ovl_redirect_always_follow,
  34. "Follow redirects even if redirect_dir feature is turned off");
  35. static bool ovl_index_def = IS_ENABLED(CONFIG_OVERLAY_FS_INDEX);
  36. module_param_named(index, ovl_index_def, bool, 0644);
  37. MODULE_PARM_DESC(ovl_index_def,
  38. "Default to on or off for the inodes index feature");
  39. static bool ovl_nfs_export_def = IS_ENABLED(CONFIG_OVERLAY_FS_NFS_EXPORT);
  40. module_param_named(nfs_export, ovl_nfs_export_def, bool, 0644);
  41. MODULE_PARM_DESC(ovl_nfs_export_def,
  42. "Default to on or off for the NFS export feature");
  43. static void ovl_entry_stack_free(struct ovl_entry *oe)
  44. {
  45. unsigned int i;
  46. for (i = 0; i < oe->numlower; i++)
  47. dput(oe->lowerstack[i].dentry);
  48. }
  49. static void ovl_dentry_release(struct dentry *dentry)
  50. {
  51. struct ovl_entry *oe = dentry->d_fsdata;
  52. if (oe) {
  53. ovl_entry_stack_free(oe);
  54. kfree_rcu(oe, rcu);
  55. }
  56. }
  57. static int ovl_check_append_only(struct inode *inode, int flag)
  58. {
  59. /*
  60. * This test was moot in vfs may_open() because overlay inode does
  61. * not have the S_APPEND flag, so re-check on real upper inode
  62. */
  63. if (IS_APPEND(inode)) {
  64. if ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
  65. return -EPERM;
  66. if (flag & O_TRUNC)
  67. return -EPERM;
  68. }
  69. return 0;
  70. }
  71. static struct dentry *ovl_d_real(struct dentry *dentry,
  72. const struct inode *inode,
  73. unsigned int open_flags, unsigned int flags)
  74. {
  75. struct dentry *real;
  76. int err;
  77. if (flags & D_REAL_UPPER)
  78. return ovl_dentry_upper(dentry);
  79. if (!d_is_reg(dentry)) {
  80. if (!inode || inode == d_inode(dentry))
  81. return dentry;
  82. goto bug;
  83. }
  84. if (open_flags) {
  85. err = ovl_open_maybe_copy_up(dentry, open_flags);
  86. if (err)
  87. return ERR_PTR(err);
  88. }
  89. real = ovl_dentry_upper(dentry);
  90. if (real && (!inode || inode == d_inode(real))) {
  91. if (!inode) {
  92. err = ovl_check_append_only(d_inode(real), open_flags);
  93. if (err)
  94. return ERR_PTR(err);
  95. }
  96. return real;
  97. }
  98. real = ovl_dentry_lower(dentry);
  99. if (!real)
  100. goto bug;
  101. /* Handle recursion */
  102. real = d_real(real, inode, open_flags, 0);
  103. if (!inode || inode == d_inode(real))
  104. return real;
  105. bug:
  106. WARN(1, "ovl_d_real(%pd4, %s:%lu): real dentry not found\n", dentry,
  107. inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0);
  108. return dentry;
  109. }
  110. static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
  111. {
  112. struct ovl_entry *oe = dentry->d_fsdata;
  113. unsigned int i;
  114. int ret = 1;
  115. for (i = 0; i < oe->numlower; i++) {
  116. struct dentry *d = oe->lowerstack[i].dentry;
  117. if (d->d_flags & DCACHE_OP_REVALIDATE) {
  118. ret = d->d_op->d_revalidate(d, flags);
  119. if (ret < 0)
  120. return ret;
  121. if (!ret) {
  122. if (!(flags & LOOKUP_RCU))
  123. d_invalidate(d);
  124. return -ESTALE;
  125. }
  126. }
  127. }
  128. return 1;
  129. }
  130. static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
  131. {
  132. struct ovl_entry *oe = dentry->d_fsdata;
  133. unsigned int i;
  134. int ret = 1;
  135. for (i = 0; i < oe->numlower; i++) {
  136. struct dentry *d = oe->lowerstack[i].dentry;
  137. if (d->d_flags & DCACHE_OP_WEAK_REVALIDATE) {
  138. ret = d->d_op->d_weak_revalidate(d, flags);
  139. if (ret <= 0)
  140. break;
  141. }
  142. }
  143. return ret;
  144. }
  145. static const struct dentry_operations ovl_dentry_operations = {
  146. .d_release = ovl_dentry_release,
  147. .d_real = ovl_d_real,
  148. };
  149. static const struct dentry_operations ovl_reval_dentry_operations = {
  150. .d_release = ovl_dentry_release,
  151. .d_real = ovl_d_real,
  152. .d_revalidate = ovl_dentry_revalidate,
  153. .d_weak_revalidate = ovl_dentry_weak_revalidate,
  154. };
  155. static struct kmem_cache *ovl_inode_cachep;
  156. static struct inode *ovl_alloc_inode(struct super_block *sb)
  157. {
  158. struct ovl_inode *oi = kmem_cache_alloc(ovl_inode_cachep, GFP_KERNEL);
  159. if (!oi)
  160. return NULL;
  161. oi->cache = NULL;
  162. oi->redirect = NULL;
  163. oi->version = 0;
  164. oi->flags = 0;
  165. oi->__upperdentry = NULL;
  166. oi->lower = NULL;
  167. mutex_init(&oi->lock);
  168. return &oi->vfs_inode;
  169. }
  170. static void ovl_i_callback(struct rcu_head *head)
  171. {
  172. struct inode *inode = container_of(head, struct inode, i_rcu);
  173. kmem_cache_free(ovl_inode_cachep, OVL_I(inode));
  174. }
  175. static void ovl_destroy_inode(struct inode *inode)
  176. {
  177. struct ovl_inode *oi = OVL_I(inode);
  178. dput(oi->__upperdentry);
  179. iput(oi->lower);
  180. kfree(oi->redirect);
  181. ovl_dir_cache_free(inode);
  182. mutex_destroy(&oi->lock);
  183. call_rcu(&inode->i_rcu, ovl_i_callback);
  184. }
  185. static void ovl_free_fs(struct ovl_fs *ofs)
  186. {
  187. unsigned i;
  188. dput(ofs->indexdir);
  189. dput(ofs->workdir);
  190. if (ofs->workdir_locked)
  191. ovl_inuse_unlock(ofs->workbasedir);
  192. dput(ofs->workbasedir);
  193. if (ofs->upperdir_locked)
  194. ovl_inuse_unlock(ofs->upper_mnt->mnt_root);
  195. mntput(ofs->upper_mnt);
  196. for (i = 0; i < ofs->numlower; i++) {
  197. mntput(ofs->lower_layers[i].mnt);
  198. free_anon_bdev(ofs->lower_layers[i].pseudo_dev);
  199. }
  200. kfree(ofs->lower_layers);
  201. kfree(ofs->config.lowerdir);
  202. kfree(ofs->config.upperdir);
  203. kfree(ofs->config.workdir);
  204. kfree(ofs->config.redirect_mode);
  205. if (ofs->creator_cred)
  206. put_cred(ofs->creator_cred);
  207. kfree(ofs);
  208. }
  209. static void ovl_put_super(struct super_block *sb)
  210. {
  211. struct ovl_fs *ofs = sb->s_fs_info;
  212. ovl_free_fs(ofs);
  213. }
  214. /* Sync real dirty inodes in upper filesystem (if it exists) */
  215. static int ovl_sync_fs(struct super_block *sb, int wait)
  216. {
  217. struct ovl_fs *ofs = sb->s_fs_info;
  218. struct super_block *upper_sb;
  219. int ret;
  220. if (!ofs->upper_mnt)
  221. return 0;
  222. /*
  223. * If this is a sync(2) call or an emergency sync, all the super blocks
  224. * will be iterated, including upper_sb, so no need to do anything.
  225. *
  226. * If this is a syncfs(2) call, then we do need to call
  227. * sync_filesystem() on upper_sb, but enough if we do it when being
  228. * called with wait == 1.
  229. */
  230. if (!wait)
  231. return 0;
  232. upper_sb = ofs->upper_mnt->mnt_sb;
  233. down_read(&upper_sb->s_umount);
  234. ret = sync_filesystem(upper_sb);
  235. up_read(&upper_sb->s_umount);
  236. return ret;
  237. }
  238. /**
  239. * ovl_statfs
  240. * @sb: The overlayfs super block
  241. * @buf: The struct kstatfs to fill in with stats
  242. *
  243. * Get the filesystem statistics. As writes always target the upper layer
  244. * filesystem pass the statfs to the upper filesystem (if it exists)
  245. */
  246. static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf)
  247. {
  248. struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  249. struct dentry *root_dentry = dentry->d_sb->s_root;
  250. struct path path;
  251. int err;
  252. ovl_path_real(root_dentry, &path);
  253. err = vfs_statfs(&path, buf);
  254. if (!err) {
  255. buf->f_namelen = ofs->namelen;
  256. buf->f_type = OVERLAYFS_SUPER_MAGIC;
  257. }
  258. return err;
  259. }
  260. /* Will this overlay be forced to mount/remount ro? */
  261. static bool ovl_force_readonly(struct ovl_fs *ofs)
  262. {
  263. return (!ofs->upper_mnt || !ofs->workdir);
  264. }
  265. static const char *ovl_redirect_mode_def(void)
  266. {
  267. return ovl_redirect_dir_def ? "on" : "off";
  268. }
  269. /**
  270. * ovl_show_options
  271. *
  272. * Prints the mount options for a given superblock.
  273. * Returns zero; does not fail.
  274. */
  275. static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
  276. {
  277. struct super_block *sb = dentry->d_sb;
  278. struct ovl_fs *ofs = sb->s_fs_info;
  279. seq_show_option(m, "lowerdir", ofs->config.lowerdir);
  280. if (ofs->config.upperdir) {
  281. seq_show_option(m, "upperdir", ofs->config.upperdir);
  282. seq_show_option(m, "workdir", ofs->config.workdir);
  283. }
  284. if (ofs->config.default_permissions)
  285. seq_puts(m, ",default_permissions");
  286. if (strcmp(ofs->config.redirect_mode, ovl_redirect_mode_def()) != 0)
  287. seq_printf(m, ",redirect_dir=%s", ofs->config.redirect_mode);
  288. if (ofs->config.index != ovl_index_def)
  289. seq_printf(m, ",index=%s", ofs->config.index ? "on" : "off");
  290. if (ofs->config.nfs_export != ovl_nfs_export_def)
  291. seq_printf(m, ",nfs_export=%s", ofs->config.nfs_export ?
  292. "on" : "off");
  293. return 0;
  294. }
  295. static int ovl_remount(struct super_block *sb, int *flags, char *data)
  296. {
  297. struct ovl_fs *ofs = sb->s_fs_info;
  298. if (!(*flags & SB_RDONLY) && ovl_force_readonly(ofs))
  299. return -EROFS;
  300. return 0;
  301. }
  302. static const struct super_operations ovl_super_operations = {
  303. .alloc_inode = ovl_alloc_inode,
  304. .destroy_inode = ovl_destroy_inode,
  305. .drop_inode = generic_delete_inode,
  306. .put_super = ovl_put_super,
  307. .sync_fs = ovl_sync_fs,
  308. .statfs = ovl_statfs,
  309. .show_options = ovl_show_options,
  310. .remount_fs = ovl_remount,
  311. };
  312. enum {
  313. OPT_LOWERDIR,
  314. OPT_UPPERDIR,
  315. OPT_WORKDIR,
  316. OPT_DEFAULT_PERMISSIONS,
  317. OPT_REDIRECT_DIR,
  318. OPT_INDEX_ON,
  319. OPT_INDEX_OFF,
  320. OPT_NFS_EXPORT_ON,
  321. OPT_NFS_EXPORT_OFF,
  322. OPT_ERR,
  323. };
  324. static const match_table_t ovl_tokens = {
  325. {OPT_LOWERDIR, "lowerdir=%s"},
  326. {OPT_UPPERDIR, "upperdir=%s"},
  327. {OPT_WORKDIR, "workdir=%s"},
  328. {OPT_DEFAULT_PERMISSIONS, "default_permissions"},
  329. {OPT_REDIRECT_DIR, "redirect_dir=%s"},
  330. {OPT_INDEX_ON, "index=on"},
  331. {OPT_INDEX_OFF, "index=off"},
  332. {OPT_NFS_EXPORT_ON, "nfs_export=on"},
  333. {OPT_NFS_EXPORT_OFF, "nfs_export=off"},
  334. {OPT_ERR, NULL}
  335. };
  336. static char *ovl_next_opt(char **s)
  337. {
  338. char *sbegin = *s;
  339. char *p;
  340. if (sbegin == NULL)
  341. return NULL;
  342. for (p = sbegin; *p; p++) {
  343. if (*p == '\\') {
  344. p++;
  345. if (!*p)
  346. break;
  347. } else if (*p == ',') {
  348. *p = '\0';
  349. *s = p + 1;
  350. return sbegin;
  351. }
  352. }
  353. *s = NULL;
  354. return sbegin;
  355. }
  356. static int ovl_parse_redirect_mode(struct ovl_config *config, const char *mode)
  357. {
  358. if (strcmp(mode, "on") == 0) {
  359. config->redirect_dir = true;
  360. /*
  361. * Does not make sense to have redirect creation without
  362. * redirect following.
  363. */
  364. config->redirect_follow = true;
  365. } else if (strcmp(mode, "follow") == 0) {
  366. config->redirect_follow = true;
  367. } else if (strcmp(mode, "off") == 0) {
  368. if (ovl_redirect_always_follow)
  369. config->redirect_follow = true;
  370. } else if (strcmp(mode, "nofollow") != 0) {
  371. pr_err("overlayfs: bad mount option \"redirect_dir=%s\"\n",
  372. mode);
  373. return -EINVAL;
  374. }
  375. return 0;
  376. }
  377. static int ovl_parse_opt(char *opt, struct ovl_config *config)
  378. {
  379. char *p;
  380. config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL);
  381. if (!config->redirect_mode)
  382. return -ENOMEM;
  383. while ((p = ovl_next_opt(&opt)) != NULL) {
  384. int token;
  385. substring_t args[MAX_OPT_ARGS];
  386. if (!*p)
  387. continue;
  388. token = match_token(p, ovl_tokens, args);
  389. switch (token) {
  390. case OPT_UPPERDIR:
  391. kfree(config->upperdir);
  392. config->upperdir = match_strdup(&args[0]);
  393. if (!config->upperdir)
  394. return -ENOMEM;
  395. break;
  396. case OPT_LOWERDIR:
  397. kfree(config->lowerdir);
  398. config->lowerdir = match_strdup(&args[0]);
  399. if (!config->lowerdir)
  400. return -ENOMEM;
  401. break;
  402. case OPT_WORKDIR:
  403. kfree(config->workdir);
  404. config->workdir = match_strdup(&args[0]);
  405. if (!config->workdir)
  406. return -ENOMEM;
  407. break;
  408. case OPT_DEFAULT_PERMISSIONS:
  409. config->default_permissions = true;
  410. break;
  411. case OPT_REDIRECT_DIR:
  412. kfree(config->redirect_mode);
  413. config->redirect_mode = match_strdup(&args[0]);
  414. if (!config->redirect_mode)
  415. return -ENOMEM;
  416. break;
  417. case OPT_INDEX_ON:
  418. config->index = true;
  419. break;
  420. case OPT_INDEX_OFF:
  421. config->index = false;
  422. break;
  423. case OPT_NFS_EXPORT_ON:
  424. config->nfs_export = true;
  425. break;
  426. case OPT_NFS_EXPORT_OFF:
  427. config->nfs_export = false;
  428. break;
  429. default:
  430. pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p);
  431. return -EINVAL;
  432. }
  433. }
  434. /* Workdir is useless in non-upper mount */
  435. if (!config->upperdir && config->workdir) {
  436. pr_info("overlayfs: option \"workdir=%s\" is useless in a non-upper mount, ignore\n",
  437. config->workdir);
  438. kfree(config->workdir);
  439. config->workdir = NULL;
  440. }
  441. return ovl_parse_redirect_mode(config, config->redirect_mode);
  442. }
  443. #define OVL_WORKDIR_NAME "work"
  444. #define OVL_INDEXDIR_NAME "index"
  445. static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
  446. const char *name, bool persist)
  447. {
  448. struct inode *dir = ofs->workbasedir->d_inode;
  449. struct vfsmount *mnt = ofs->upper_mnt;
  450. struct dentry *work;
  451. int err;
  452. bool retried = false;
  453. bool locked = false;
  454. inode_lock_nested(dir, I_MUTEX_PARENT);
  455. locked = true;
  456. retry:
  457. work = lookup_one_len(name, ofs->workbasedir, strlen(name));
  458. if (!IS_ERR(work)) {
  459. struct iattr attr = {
  460. .ia_valid = ATTR_MODE,
  461. .ia_mode = S_IFDIR | 0,
  462. };
  463. if (work->d_inode) {
  464. err = -EEXIST;
  465. if (retried)
  466. goto out_dput;
  467. if (persist)
  468. goto out_unlock;
  469. retried = true;
  470. ovl_workdir_cleanup(dir, mnt, work, 0);
  471. dput(work);
  472. goto retry;
  473. }
  474. err = ovl_create_real(dir, work,
  475. &(struct cattr){.mode = S_IFDIR | 0},
  476. NULL, true);
  477. if (err)
  478. goto out_dput;
  479. /*
  480. * Try to remove POSIX ACL xattrs from workdir. We are good if:
  481. *
  482. * a) success (there was a POSIX ACL xattr and was removed)
  483. * b) -ENODATA (there was no POSIX ACL xattr)
  484. * c) -EOPNOTSUPP (POSIX ACL xattrs are not supported)
  485. *
  486. * There are various other error values that could effectively
  487. * mean that the xattr doesn't exist (e.g. -ERANGE is returned
  488. * if the xattr name is too long), but the set of filesystems
  489. * allowed as upper are limited to "normal" ones, where checking
  490. * for the above two errors is sufficient.
  491. */
  492. err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_DEFAULT);
  493. if (err && err != -ENODATA && err != -EOPNOTSUPP)
  494. goto out_dput;
  495. err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_ACCESS);
  496. if (err && err != -ENODATA && err != -EOPNOTSUPP)
  497. goto out_dput;
  498. /* Clear any inherited mode bits */
  499. inode_lock(work->d_inode);
  500. err = notify_change(work, &attr, NULL);
  501. inode_unlock(work->d_inode);
  502. if (err)
  503. goto out_dput;
  504. } else {
  505. err = PTR_ERR(work);
  506. goto out_err;
  507. }
  508. out_unlock:
  509. if (locked)
  510. inode_unlock(dir);
  511. return work;
  512. out_dput:
  513. dput(work);
  514. out_err:
  515. pr_warn("overlayfs: failed to create directory %s/%s (errno: %i); mounting read-only\n",
  516. ofs->config.workdir, name, -err);
  517. work = NULL;
  518. goto out_unlock;
  519. }
  520. static void ovl_unescape(char *s)
  521. {
  522. char *d = s;
  523. for (;; s++, d++) {
  524. if (*s == '\\')
  525. s++;
  526. *d = *s;
  527. if (!*s)
  528. break;
  529. }
  530. }
  531. static int ovl_mount_dir_noesc(const char *name, struct path *path)
  532. {
  533. int err = -EINVAL;
  534. if (!*name) {
  535. pr_err("overlayfs: empty lowerdir\n");
  536. goto out;
  537. }
  538. err = kern_path(name, LOOKUP_FOLLOW, path);
  539. if (err) {
  540. pr_err("overlayfs: failed to resolve '%s': %i\n", name, err);
  541. goto out;
  542. }
  543. err = -EINVAL;
  544. if (ovl_dentry_weird(path->dentry)) {
  545. pr_err("overlayfs: filesystem on '%s' not supported\n", name);
  546. goto out_put;
  547. }
  548. if (!d_is_dir(path->dentry)) {
  549. pr_err("overlayfs: '%s' not a directory\n", name);
  550. goto out_put;
  551. }
  552. return 0;
  553. out_put:
  554. path_put_init(path);
  555. out:
  556. return err;
  557. }
  558. static int ovl_mount_dir(const char *name, struct path *path)
  559. {
  560. int err = -ENOMEM;
  561. char *tmp = kstrdup(name, GFP_KERNEL);
  562. if (tmp) {
  563. ovl_unescape(tmp);
  564. err = ovl_mount_dir_noesc(tmp, path);
  565. if (!err)
  566. if (ovl_dentry_remote(path->dentry)) {
  567. pr_err("overlayfs: filesystem on '%s' not supported as upperdir\n",
  568. tmp);
  569. path_put_init(path);
  570. err = -EINVAL;
  571. }
  572. kfree(tmp);
  573. }
  574. return err;
  575. }
  576. static int ovl_check_namelen(struct path *path, struct ovl_fs *ofs,
  577. const char *name)
  578. {
  579. struct kstatfs statfs;
  580. int err = vfs_statfs(path, &statfs);
  581. if (err)
  582. pr_err("overlayfs: statfs failed on '%s'\n", name);
  583. else
  584. ofs->namelen = max(ofs->namelen, statfs.f_namelen);
  585. return err;
  586. }
  587. static int ovl_lower_dir(const char *name, struct path *path,
  588. struct ovl_fs *ofs, int *stack_depth, bool *remote)
  589. {
  590. int err;
  591. err = ovl_mount_dir_noesc(name, path);
  592. if (err)
  593. goto out;
  594. err = ovl_check_namelen(path, ofs, name);
  595. if (err)
  596. goto out_put;
  597. *stack_depth = max(*stack_depth, path->mnt->mnt_sb->s_stack_depth);
  598. if (ovl_dentry_remote(path->dentry))
  599. *remote = true;
  600. /*
  601. * The inodes index feature and NFS export need to encode and decode
  602. * file handles, so they require that all layers support them.
  603. */
  604. if ((ofs->config.nfs_export ||
  605. (ofs->config.index && ofs->config.upperdir)) &&
  606. !ovl_can_decode_fh(path->dentry->d_sb)) {
  607. ofs->config.index = false;
  608. ofs->config.nfs_export = false;
  609. pr_warn("overlayfs: fs on '%s' does not support file handles, falling back to index=off,nfs_export=off.\n",
  610. name);
  611. }
  612. return 0;
  613. out_put:
  614. path_put_init(path);
  615. out:
  616. return err;
  617. }
  618. /* Workdir should not be subdir of upperdir and vice versa */
  619. static bool ovl_workdir_ok(struct dentry *workdir, struct dentry *upperdir)
  620. {
  621. bool ok = false;
  622. if (workdir != upperdir) {
  623. ok = (lock_rename(workdir, upperdir) == NULL);
  624. unlock_rename(workdir, upperdir);
  625. }
  626. return ok;
  627. }
  628. static unsigned int ovl_split_lowerdirs(char *str)
  629. {
  630. unsigned int ctr = 1;
  631. char *s, *d;
  632. for (s = d = str;; s++, d++) {
  633. if (*s == '\\') {
  634. s++;
  635. } else if (*s == ':') {
  636. *d = '\0';
  637. ctr++;
  638. continue;
  639. }
  640. *d = *s;
  641. if (!*s)
  642. break;
  643. }
  644. return ctr;
  645. }
  646. static int __maybe_unused
  647. ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
  648. struct dentry *dentry, struct inode *inode,
  649. const char *name, void *buffer, size_t size)
  650. {
  651. return ovl_xattr_get(dentry, inode, handler->name, buffer, size);
  652. }
  653. static int __maybe_unused
  654. ovl_posix_acl_xattr_set(const struct xattr_handler *handler,
  655. struct dentry *dentry, struct inode *inode,
  656. const char *name, const void *value,
  657. size_t size, int flags)
  658. {
  659. struct dentry *workdir = ovl_workdir(dentry);
  660. struct inode *realinode = ovl_inode_real(inode);
  661. struct posix_acl *acl = NULL;
  662. int err;
  663. /* Check that everything is OK before copy-up */
  664. if (value) {
  665. acl = posix_acl_from_xattr(&init_user_ns, value, size);
  666. if (IS_ERR(acl))
  667. return PTR_ERR(acl);
  668. }
  669. err = -EOPNOTSUPP;
  670. if (!IS_POSIXACL(d_inode(workdir)))
  671. goto out_acl_release;
  672. if (!realinode->i_op->set_acl)
  673. goto out_acl_release;
  674. if (handler->flags == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) {
  675. err = acl ? -EACCES : 0;
  676. goto out_acl_release;
  677. }
  678. err = -EPERM;
  679. if (!inode_owner_or_capable(inode))
  680. goto out_acl_release;
  681. posix_acl_release(acl);
  682. /*
  683. * Check if sgid bit needs to be cleared (actual setacl operation will
  684. * be done with mounter's capabilities and so that won't do it for us).
  685. */
  686. if (unlikely(inode->i_mode & S_ISGID) &&
  687. handler->flags == ACL_TYPE_ACCESS &&
  688. !in_group_p(inode->i_gid) &&
  689. !capable_wrt_inode_uidgid(inode, CAP_FSETID)) {
  690. struct iattr iattr = { .ia_valid = ATTR_KILL_SGID };
  691. err = ovl_setattr(dentry, &iattr);
  692. if (err)
  693. return err;
  694. }
  695. err = ovl_xattr_set(dentry, inode, handler->name, value, size, flags);
  696. if (!err)
  697. ovl_copyattr(ovl_inode_real(inode), inode);
  698. return err;
  699. out_acl_release:
  700. posix_acl_release(acl);
  701. return err;
  702. }
  703. static int ovl_own_xattr_get(const struct xattr_handler *handler,
  704. struct dentry *dentry, struct inode *inode,
  705. const char *name, void *buffer, size_t size)
  706. {
  707. return -EOPNOTSUPP;
  708. }
  709. static int ovl_own_xattr_set(const struct xattr_handler *handler,
  710. struct dentry *dentry, struct inode *inode,
  711. const char *name, const void *value,
  712. size_t size, int flags)
  713. {
  714. return -EOPNOTSUPP;
  715. }
  716. static int ovl_other_xattr_get(const struct xattr_handler *handler,
  717. struct dentry *dentry, struct inode *inode,
  718. const char *name, void *buffer, size_t size)
  719. {
  720. return ovl_xattr_get(dentry, inode, name, buffer, size);
  721. }
  722. static int ovl_other_xattr_set(const struct xattr_handler *handler,
  723. struct dentry *dentry, struct inode *inode,
  724. const char *name, const void *value,
  725. size_t size, int flags)
  726. {
  727. return ovl_xattr_set(dentry, inode, name, value, size, flags);
  728. }
  729. static const struct xattr_handler __maybe_unused
  730. ovl_posix_acl_access_xattr_handler = {
  731. .name = XATTR_NAME_POSIX_ACL_ACCESS,
  732. .flags = ACL_TYPE_ACCESS,
  733. .get = ovl_posix_acl_xattr_get,
  734. .set = ovl_posix_acl_xattr_set,
  735. };
  736. static const struct xattr_handler __maybe_unused
  737. ovl_posix_acl_default_xattr_handler = {
  738. .name = XATTR_NAME_POSIX_ACL_DEFAULT,
  739. .flags = ACL_TYPE_DEFAULT,
  740. .get = ovl_posix_acl_xattr_get,
  741. .set = ovl_posix_acl_xattr_set,
  742. };
  743. static const struct xattr_handler ovl_own_xattr_handler = {
  744. .prefix = OVL_XATTR_PREFIX,
  745. .get = ovl_own_xattr_get,
  746. .set = ovl_own_xattr_set,
  747. };
  748. static const struct xattr_handler ovl_other_xattr_handler = {
  749. .prefix = "", /* catch all */
  750. .get = ovl_other_xattr_get,
  751. .set = ovl_other_xattr_set,
  752. };
  753. static const struct xattr_handler *ovl_xattr_handlers[] = {
  754. #ifdef CONFIG_FS_POSIX_ACL
  755. &ovl_posix_acl_access_xattr_handler,
  756. &ovl_posix_acl_default_xattr_handler,
  757. #endif
  758. &ovl_own_xattr_handler,
  759. &ovl_other_xattr_handler,
  760. NULL
  761. };
  762. static int ovl_get_upper(struct ovl_fs *ofs, struct path *upperpath)
  763. {
  764. struct vfsmount *upper_mnt;
  765. int err;
  766. err = ovl_mount_dir(ofs->config.upperdir, upperpath);
  767. if (err)
  768. goto out;
  769. /* Upper fs should not be r/o */
  770. if (sb_rdonly(upperpath->mnt->mnt_sb)) {
  771. pr_err("overlayfs: upper fs is r/o, try multi-lower layers mount\n");
  772. err = -EINVAL;
  773. goto out;
  774. }
  775. err = ovl_check_namelen(upperpath, ofs, ofs->config.upperdir);
  776. if (err)
  777. goto out;
  778. err = -EBUSY;
  779. if (ovl_inuse_trylock(upperpath->dentry)) {
  780. ofs->upperdir_locked = true;
  781. } else if (ofs->config.index) {
  782. pr_err("overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection.\n");
  783. goto out;
  784. } else {
  785. pr_warn("overlayfs: upperdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
  786. }
  787. upper_mnt = clone_private_mount(upperpath);
  788. err = PTR_ERR(upper_mnt);
  789. if (IS_ERR(upper_mnt)) {
  790. pr_err("overlayfs: failed to clone upperpath\n");
  791. goto out;
  792. }
  793. /* Don't inherit atime flags */
  794. upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME);
  795. ofs->upper_mnt = upper_mnt;
  796. err = 0;
  797. out:
  798. return err;
  799. }
  800. static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
  801. {
  802. struct vfsmount *mnt = ofs->upper_mnt;
  803. struct dentry *temp;
  804. int err;
  805. err = mnt_want_write(mnt);
  806. if (err)
  807. return err;
  808. ofs->workdir = ovl_workdir_create(ofs, OVL_WORKDIR_NAME, false);
  809. if (!ofs->workdir)
  810. goto out;
  811. /*
  812. * Upper should support d_type, else whiteouts are visible. Given
  813. * workdir and upper are on same fs, we can do iterate_dir() on
  814. * workdir. This check requires successful creation of workdir in
  815. * previous step.
  816. */
  817. err = ovl_check_d_type_supported(workpath);
  818. if (err < 0)
  819. goto out;
  820. /*
  821. * We allowed this configuration and don't want to break users over
  822. * kernel upgrade. So warn instead of erroring out.
  823. */
  824. if (!err)
  825. pr_warn("overlayfs: upper fs needs to support d_type.\n");
  826. /* Check if upper/work fs supports O_TMPFILE */
  827. temp = ovl_do_tmpfile(ofs->workdir, S_IFREG | 0);
  828. ofs->tmpfile = !IS_ERR(temp);
  829. if (ofs->tmpfile)
  830. dput(temp);
  831. else
  832. pr_warn("overlayfs: upper fs does not support tmpfile.\n");
  833. /*
  834. * Check if upper/work fs supports trusted.overlay.* xattr
  835. */
  836. err = ovl_do_setxattr(ofs->workdir, OVL_XATTR_OPAQUE, "0", 1, 0);
  837. if (err) {
  838. ofs->noxattr = true;
  839. ofs->config.index = false;
  840. pr_warn("overlayfs: upper fs does not support xattr, falling back to index=off.\n");
  841. err = 0;
  842. } else {
  843. vfs_removexattr(ofs->workdir, OVL_XATTR_OPAQUE);
  844. }
  845. /* Check if upper/work fs supports file handles */
  846. if (ofs->config.index &&
  847. !ovl_can_decode_fh(ofs->workdir->d_sb)) {
  848. ofs->config.index = false;
  849. pr_warn("overlayfs: upper fs does not support file handles, falling back to index=off.\n");
  850. }
  851. /* NFS export of r/w mount depends on index */
  852. if (ofs->config.nfs_export && !ofs->config.index) {
  853. pr_warn("overlayfs: NFS export requires \"index=on\", falling back to nfs_export=off.\n");
  854. ofs->config.nfs_export = false;
  855. }
  856. out:
  857. mnt_drop_write(mnt);
  858. return err;
  859. }
  860. static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
  861. {
  862. int err;
  863. struct path workpath = { };
  864. err = ovl_mount_dir(ofs->config.workdir, &workpath);
  865. if (err)
  866. goto out;
  867. err = -EINVAL;
  868. if (upperpath->mnt != workpath.mnt) {
  869. pr_err("overlayfs: workdir and upperdir must reside under the same mount\n");
  870. goto out;
  871. }
  872. if (!ovl_workdir_ok(workpath.dentry, upperpath->dentry)) {
  873. pr_err("overlayfs: workdir and upperdir must be separate subtrees\n");
  874. goto out;
  875. }
  876. err = -EBUSY;
  877. if (ovl_inuse_trylock(workpath.dentry)) {
  878. ofs->workdir_locked = true;
  879. } else if (ofs->config.index) {
  880. pr_err("overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.\n");
  881. goto out;
  882. } else {
  883. pr_warn("overlayfs: workdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
  884. }
  885. ofs->workbasedir = dget(workpath.dentry);
  886. err = ovl_make_workdir(ofs, &workpath);
  887. if (err)
  888. goto out;
  889. err = 0;
  890. out:
  891. path_put(&workpath);
  892. return err;
  893. }
  894. static int ovl_get_indexdir(struct ovl_fs *ofs, struct ovl_entry *oe,
  895. struct path *upperpath)
  896. {
  897. struct vfsmount *mnt = ofs->upper_mnt;
  898. int err;
  899. err = mnt_want_write(mnt);
  900. if (err)
  901. return err;
  902. /* Verify lower root is upper root origin */
  903. err = ovl_verify_origin(upperpath->dentry, oe->lowerstack[0].dentry,
  904. true);
  905. if (err) {
  906. pr_err("overlayfs: failed to verify upper root origin\n");
  907. goto out;
  908. }
  909. ofs->indexdir = ovl_workdir_create(ofs, OVL_INDEXDIR_NAME, true);
  910. if (ofs->indexdir) {
  911. /*
  912. * Verify upper root is exclusively associated with index dir.
  913. * Older kernels stored upper fh in "trusted.overlay.origin"
  914. * xattr. If that xattr exists, verify that it is a match to
  915. * upper dir file handle. In any case, verify or set xattr
  916. * "trusted.overlay.upper" to indicate that index may have
  917. * directory entries.
  918. */
  919. if (ovl_check_origin_xattr(ofs->indexdir)) {
  920. err = ovl_verify_set_fh(ofs->indexdir, OVL_XATTR_ORIGIN,
  921. upperpath->dentry, true, false);
  922. if (err)
  923. pr_err("overlayfs: failed to verify index dir 'origin' xattr\n");
  924. }
  925. err = ovl_verify_upper(ofs->indexdir, upperpath->dentry, true);
  926. if (err)
  927. pr_err("overlayfs: failed to verify index dir 'upper' xattr\n");
  928. /* Cleanup bad/stale/orphan index entries */
  929. if (!err)
  930. err = ovl_indexdir_cleanup(ofs);
  931. }
  932. if (err || !ofs->indexdir)
  933. pr_warn("overlayfs: try deleting index dir or mounting with '-o index=off' to disable inodes index.\n");
  934. out:
  935. mnt_drop_write(mnt);
  936. return err;
  937. }
  938. static int ovl_get_lower_layers(struct ovl_fs *ofs, struct path *stack,
  939. unsigned int numlower)
  940. {
  941. int err;
  942. unsigned int i;
  943. err = -ENOMEM;
  944. ofs->lower_layers = kcalloc(numlower, sizeof(struct ovl_layer),
  945. GFP_KERNEL);
  946. if (ofs->lower_layers == NULL)
  947. goto out;
  948. for (i = 0; i < numlower; i++) {
  949. struct vfsmount *mnt;
  950. dev_t dev;
  951. err = get_anon_bdev(&dev);
  952. if (err) {
  953. pr_err("overlayfs: failed to get anonymous bdev for lowerpath\n");
  954. goto out;
  955. }
  956. mnt = clone_private_mount(&stack[i]);
  957. err = PTR_ERR(mnt);
  958. if (IS_ERR(mnt)) {
  959. pr_err("overlayfs: failed to clone lowerpath\n");
  960. free_anon_bdev(dev);
  961. goto out;
  962. }
  963. /*
  964. * Make lower layers R/O. That way fchmod/fchown on lower file
  965. * will fail instead of modifying lower fs.
  966. */
  967. mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME;
  968. ofs->lower_layers[ofs->numlower].mnt = mnt;
  969. ofs->lower_layers[ofs->numlower].pseudo_dev = dev;
  970. ofs->lower_layers[ofs->numlower].idx = i + 1;
  971. ofs->numlower++;
  972. /* Check if all lower layers are on same sb */
  973. if (i == 0)
  974. ofs->same_sb = mnt->mnt_sb;
  975. else if (ofs->same_sb != mnt->mnt_sb)
  976. ofs->same_sb = NULL;
  977. }
  978. err = 0;
  979. out:
  980. return err;
  981. }
  982. static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
  983. struct ovl_fs *ofs)
  984. {
  985. int err;
  986. char *lowertmp, *lower;
  987. struct path *stack = NULL;
  988. unsigned int stacklen, numlower = 0, i;
  989. bool remote = false;
  990. struct ovl_entry *oe;
  991. err = -ENOMEM;
  992. lowertmp = kstrdup(ofs->config.lowerdir, GFP_KERNEL);
  993. if (!lowertmp)
  994. goto out_err;
  995. err = -EINVAL;
  996. stacklen = ovl_split_lowerdirs(lowertmp);
  997. if (stacklen > OVL_MAX_STACK) {
  998. pr_err("overlayfs: too many lower directories, limit is %d\n",
  999. OVL_MAX_STACK);
  1000. goto out_err;
  1001. } else if (!ofs->config.upperdir && stacklen == 1) {
  1002. pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n");
  1003. goto out_err;
  1004. } else if (!ofs->config.upperdir && ofs->config.nfs_export &&
  1005. ofs->config.redirect_follow) {
  1006. pr_warn("overlayfs: NFS export requires \"redirect_dir=nofollow\" on non-upper mount, falling back to nfs_export=off.\n");
  1007. ofs->config.nfs_export = false;
  1008. }
  1009. err = -ENOMEM;
  1010. stack = kcalloc(stacklen, sizeof(struct path), GFP_KERNEL);
  1011. if (!stack)
  1012. goto out_err;
  1013. err = -EINVAL;
  1014. lower = lowertmp;
  1015. for (numlower = 0; numlower < stacklen; numlower++) {
  1016. err = ovl_lower_dir(lower, &stack[numlower], ofs,
  1017. &sb->s_stack_depth, &remote);
  1018. if (err)
  1019. goto out_err;
  1020. lower = strchr(lower, '\0') + 1;
  1021. }
  1022. err = -EINVAL;
  1023. sb->s_stack_depth++;
  1024. if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
  1025. pr_err("overlayfs: maximum fs stacking depth exceeded\n");
  1026. goto out_err;
  1027. }
  1028. err = ovl_get_lower_layers(ofs, stack, numlower);
  1029. if (err)
  1030. goto out_err;
  1031. err = -ENOMEM;
  1032. oe = ovl_alloc_entry(numlower);
  1033. if (!oe)
  1034. goto out_err;
  1035. for (i = 0; i < numlower; i++) {
  1036. oe->lowerstack[i].dentry = dget(stack[i].dentry);
  1037. oe->lowerstack[i].layer = &ofs->lower_layers[i];
  1038. }
  1039. if (remote)
  1040. sb->s_d_op = &ovl_reval_dentry_operations;
  1041. else
  1042. sb->s_d_op = &ovl_dentry_operations;
  1043. out:
  1044. for (i = 0; i < numlower; i++)
  1045. path_put(&stack[i]);
  1046. kfree(stack);
  1047. kfree(lowertmp);
  1048. return oe;
  1049. out_err:
  1050. oe = ERR_PTR(err);
  1051. goto out;
  1052. }
  1053. static int ovl_fill_super(struct super_block *sb, void *data, int silent)
  1054. {
  1055. struct path upperpath = { };
  1056. struct dentry *root_dentry;
  1057. struct ovl_entry *oe;
  1058. struct ovl_fs *ofs;
  1059. struct cred *cred;
  1060. int err;
  1061. err = -ENOMEM;
  1062. ofs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL);
  1063. if (!ofs)
  1064. goto out;
  1065. ofs->creator_cred = cred = prepare_creds();
  1066. if (!cred)
  1067. goto out_err;
  1068. ofs->config.index = ovl_index_def;
  1069. ofs->config.nfs_export = ovl_nfs_export_def;
  1070. err = ovl_parse_opt((char *) data, &ofs->config);
  1071. if (err)
  1072. goto out_err;
  1073. err = -EINVAL;
  1074. if (!ofs->config.lowerdir) {
  1075. if (!silent)
  1076. pr_err("overlayfs: missing 'lowerdir'\n");
  1077. goto out_err;
  1078. }
  1079. sb->s_stack_depth = 0;
  1080. sb->s_maxbytes = MAX_LFS_FILESIZE;
  1081. if (ofs->config.upperdir) {
  1082. if (!ofs->config.workdir) {
  1083. pr_err("overlayfs: missing 'workdir'\n");
  1084. goto out_err;
  1085. }
  1086. err = ovl_get_upper(ofs, &upperpath);
  1087. if (err)
  1088. goto out_err;
  1089. err = ovl_get_workdir(ofs, &upperpath);
  1090. if (err)
  1091. goto out_err;
  1092. if (!ofs->workdir)
  1093. sb->s_flags |= SB_RDONLY;
  1094. sb->s_stack_depth = ofs->upper_mnt->mnt_sb->s_stack_depth;
  1095. sb->s_time_gran = ofs->upper_mnt->mnt_sb->s_time_gran;
  1096. }
  1097. oe = ovl_get_lowerstack(sb, ofs);
  1098. err = PTR_ERR(oe);
  1099. if (IS_ERR(oe))
  1100. goto out_err;
  1101. /* If the upper fs is nonexistent, we mark overlayfs r/o too */
  1102. if (!ofs->upper_mnt)
  1103. sb->s_flags |= SB_RDONLY;
  1104. else if (ofs->upper_mnt->mnt_sb != ofs->same_sb)
  1105. ofs->same_sb = NULL;
  1106. if (!(ovl_force_readonly(ofs)) && ofs->config.index) {
  1107. err = ovl_get_indexdir(ofs, oe, &upperpath);
  1108. if (err)
  1109. goto out_free_oe;
  1110. /* Force r/o mount with no index dir */
  1111. if (!ofs->indexdir) {
  1112. dput(ofs->workdir);
  1113. ofs->workdir = NULL;
  1114. sb->s_flags |= SB_RDONLY;
  1115. }
  1116. }
  1117. /* Show index=off in /proc/mounts for forced r/o mount */
  1118. if (!ofs->indexdir) {
  1119. ofs->config.index = false;
  1120. if (ofs->upper_mnt && ofs->config.nfs_export) {
  1121. pr_warn("overlayfs: NFS export requires an index dir, falling back to nfs_export=off.\n");
  1122. ofs->config.nfs_export = false;
  1123. }
  1124. }
  1125. if (ofs->config.nfs_export)
  1126. sb->s_export_op = &ovl_export_operations;
  1127. /* Never override disk quota limits or use reserved space */
  1128. cap_lower(cred->cap_effective, CAP_SYS_RESOURCE);
  1129. sb->s_magic = OVERLAYFS_SUPER_MAGIC;
  1130. sb->s_op = &ovl_super_operations;
  1131. sb->s_xattr = ovl_xattr_handlers;
  1132. sb->s_fs_info = ofs;
  1133. sb->s_flags |= SB_POSIXACL | SB_NOREMOTELOCK;
  1134. err = -ENOMEM;
  1135. root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, 0));
  1136. if (!root_dentry)
  1137. goto out_free_oe;
  1138. root_dentry->d_fsdata = oe;
  1139. mntput(upperpath.mnt);
  1140. if (upperpath.dentry) {
  1141. ovl_dentry_set_upper_alias(root_dentry);
  1142. if (ovl_is_impuredir(upperpath.dentry))
  1143. ovl_set_flag(OVL_IMPURE, d_inode(root_dentry));
  1144. }
  1145. /* Root is always merge -> can have whiteouts */
  1146. ovl_set_flag(OVL_WHITEOUTS, d_inode(root_dentry));
  1147. ovl_dentry_set_flag(OVL_E_CONNECTED, root_dentry);
  1148. ovl_inode_init(d_inode(root_dentry), upperpath.dentry,
  1149. ovl_dentry_lower(root_dentry));
  1150. sb->s_root = root_dentry;
  1151. return 0;
  1152. out_free_oe:
  1153. ovl_entry_stack_free(oe);
  1154. kfree(oe);
  1155. out_err:
  1156. path_put(&upperpath);
  1157. ovl_free_fs(ofs);
  1158. out:
  1159. return err;
  1160. }
  1161. static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
  1162. const char *dev_name, void *raw_data)
  1163. {
  1164. return mount_nodev(fs_type, flags, raw_data, ovl_fill_super);
  1165. }
  1166. static struct file_system_type ovl_fs_type = {
  1167. .owner = THIS_MODULE,
  1168. .name = "overlay",
  1169. .mount = ovl_mount,
  1170. .kill_sb = kill_anon_super,
  1171. };
  1172. MODULE_ALIAS_FS("overlay");
  1173. static void ovl_inode_init_once(void *foo)
  1174. {
  1175. struct ovl_inode *oi = foo;
  1176. inode_init_once(&oi->vfs_inode);
  1177. }
  1178. static int __init ovl_init(void)
  1179. {
  1180. int err;
  1181. ovl_inode_cachep = kmem_cache_create("ovl_inode",
  1182. sizeof(struct ovl_inode), 0,
  1183. (SLAB_RECLAIM_ACCOUNT|
  1184. SLAB_MEM_SPREAD|SLAB_ACCOUNT),
  1185. ovl_inode_init_once);
  1186. if (ovl_inode_cachep == NULL)
  1187. return -ENOMEM;
  1188. err = register_filesystem(&ovl_fs_type);
  1189. if (err)
  1190. kmem_cache_destroy(ovl_inode_cachep);
  1191. return err;
  1192. }
  1193. static void __exit ovl_exit(void)
  1194. {
  1195. unregister_filesystem(&ovl_fs_type);
  1196. /*
  1197. * Make sure all delayed rcu free inodes are flushed before we
  1198. * destroy cache.
  1199. */
  1200. rcu_barrier();
  1201. kmem_cache_destroy(ovl_inode_cachep);
  1202. }
  1203. module_init(ovl_init);
  1204. module_exit(ovl_exit);