super.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970
  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 <linux/fs.h>
  10. #include <linux/namei.h>
  11. #include <linux/xattr.h>
  12. #include <linux/mount.h>
  13. #include <linux/parser.h>
  14. #include <linux/module.h>
  15. #include <linux/statfs.h>
  16. #include <linux/seq_file.h>
  17. #include <linux/posix_acl_xattr.h>
  18. #include "overlayfs.h"
  19. #include "ovl_entry.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 void ovl_dentry_release(struct dentry *dentry)
  30. {
  31. struct ovl_entry *oe = dentry->d_fsdata;
  32. if (oe) {
  33. unsigned int i;
  34. dput(oe->__upperdentry);
  35. kfree(oe->redirect);
  36. for (i = 0; i < oe->numlower; i++)
  37. dput(oe->lowerstack[i].dentry);
  38. kfree_rcu(oe, rcu);
  39. }
  40. }
  41. static struct dentry *ovl_d_real(struct dentry *dentry,
  42. const struct inode *inode,
  43. unsigned int open_flags)
  44. {
  45. struct dentry *real;
  46. if (!d_is_reg(dentry)) {
  47. if (!inode || inode == d_inode(dentry))
  48. return dentry;
  49. goto bug;
  50. }
  51. if (d_is_negative(dentry))
  52. return dentry;
  53. if (open_flags) {
  54. int err = ovl_open_maybe_copy_up(dentry, open_flags);
  55. if (err)
  56. return ERR_PTR(err);
  57. }
  58. real = ovl_dentry_upper(dentry);
  59. if (real && (!inode || inode == d_inode(real)))
  60. return real;
  61. real = ovl_dentry_lower(dentry);
  62. if (!real)
  63. goto bug;
  64. /* Handle recursion */
  65. real = d_real(real, inode, open_flags);
  66. if (!inode || inode == d_inode(real))
  67. return real;
  68. bug:
  69. WARN(1, "ovl_d_real(%pd4, %s:%lu): real dentry not found\n", dentry,
  70. inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0);
  71. return dentry;
  72. }
  73. static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
  74. {
  75. struct ovl_entry *oe = dentry->d_fsdata;
  76. unsigned int i;
  77. int ret = 1;
  78. for (i = 0; i < oe->numlower; i++) {
  79. struct dentry *d = oe->lowerstack[i].dentry;
  80. if (d->d_flags & DCACHE_OP_REVALIDATE) {
  81. ret = d->d_op->d_revalidate(d, flags);
  82. if (ret < 0)
  83. return ret;
  84. if (!ret) {
  85. if (!(flags & LOOKUP_RCU))
  86. d_invalidate(d);
  87. return -ESTALE;
  88. }
  89. }
  90. }
  91. return 1;
  92. }
  93. static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
  94. {
  95. struct ovl_entry *oe = dentry->d_fsdata;
  96. unsigned int i;
  97. int ret = 1;
  98. for (i = 0; i < oe->numlower; i++) {
  99. struct dentry *d = oe->lowerstack[i].dentry;
  100. if (d->d_flags & DCACHE_OP_WEAK_REVALIDATE) {
  101. ret = d->d_op->d_weak_revalidate(d, flags);
  102. if (ret <= 0)
  103. break;
  104. }
  105. }
  106. return ret;
  107. }
  108. static const struct dentry_operations ovl_dentry_operations = {
  109. .d_release = ovl_dentry_release,
  110. .d_real = ovl_d_real,
  111. };
  112. static const struct dentry_operations ovl_reval_dentry_operations = {
  113. .d_release = ovl_dentry_release,
  114. .d_real = ovl_d_real,
  115. .d_revalidate = ovl_dentry_revalidate,
  116. .d_weak_revalidate = ovl_dentry_weak_revalidate,
  117. };
  118. static void ovl_put_super(struct super_block *sb)
  119. {
  120. struct ovl_fs *ufs = sb->s_fs_info;
  121. unsigned i;
  122. dput(ufs->workdir);
  123. mntput(ufs->upper_mnt);
  124. for (i = 0; i < ufs->numlower; i++)
  125. mntput(ufs->lower_mnt[i]);
  126. kfree(ufs->lower_mnt);
  127. kfree(ufs->config.lowerdir);
  128. kfree(ufs->config.upperdir);
  129. kfree(ufs->config.workdir);
  130. put_cred(ufs->creator_cred);
  131. kfree(ufs);
  132. }
  133. /**
  134. * ovl_statfs
  135. * @sb: The overlayfs super block
  136. * @buf: The struct kstatfs to fill in with stats
  137. *
  138. * Get the filesystem statistics. As writes always target the upper layer
  139. * filesystem pass the statfs to the upper filesystem (if it exists)
  140. */
  141. static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf)
  142. {
  143. struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  144. struct dentry *root_dentry = dentry->d_sb->s_root;
  145. struct path path;
  146. int err;
  147. ovl_path_real(root_dentry, &path);
  148. err = vfs_statfs(&path, buf);
  149. if (!err) {
  150. buf->f_namelen = ofs->namelen;
  151. buf->f_type = OVERLAYFS_SUPER_MAGIC;
  152. }
  153. return err;
  154. }
  155. /**
  156. * ovl_show_options
  157. *
  158. * Prints the mount options for a given superblock.
  159. * Returns zero; does not fail.
  160. */
  161. static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
  162. {
  163. struct super_block *sb = dentry->d_sb;
  164. struct ovl_fs *ufs = sb->s_fs_info;
  165. seq_show_option(m, "lowerdir", ufs->config.lowerdir);
  166. if (ufs->config.upperdir) {
  167. seq_show_option(m, "upperdir", ufs->config.upperdir);
  168. seq_show_option(m, "workdir", ufs->config.workdir);
  169. }
  170. if (ufs->config.default_permissions)
  171. seq_puts(m, ",default_permissions");
  172. if (ufs->config.redirect_dir != ovl_redirect_dir_def)
  173. seq_printf(m, ",redirect_dir=%s",
  174. ufs->config.redirect_dir ? "on" : "off");
  175. return 0;
  176. }
  177. static int ovl_remount(struct super_block *sb, int *flags, char *data)
  178. {
  179. struct ovl_fs *ufs = sb->s_fs_info;
  180. if (!(*flags & MS_RDONLY) && (!ufs->upper_mnt || !ufs->workdir))
  181. return -EROFS;
  182. return 0;
  183. }
  184. static const struct super_operations ovl_super_operations = {
  185. .put_super = ovl_put_super,
  186. .statfs = ovl_statfs,
  187. .show_options = ovl_show_options,
  188. .remount_fs = ovl_remount,
  189. .drop_inode = generic_delete_inode,
  190. };
  191. enum {
  192. OPT_LOWERDIR,
  193. OPT_UPPERDIR,
  194. OPT_WORKDIR,
  195. OPT_DEFAULT_PERMISSIONS,
  196. OPT_REDIRECT_DIR_ON,
  197. OPT_REDIRECT_DIR_OFF,
  198. OPT_ERR,
  199. };
  200. static const match_table_t ovl_tokens = {
  201. {OPT_LOWERDIR, "lowerdir=%s"},
  202. {OPT_UPPERDIR, "upperdir=%s"},
  203. {OPT_WORKDIR, "workdir=%s"},
  204. {OPT_DEFAULT_PERMISSIONS, "default_permissions"},
  205. {OPT_REDIRECT_DIR_ON, "redirect_dir=on"},
  206. {OPT_REDIRECT_DIR_OFF, "redirect_dir=off"},
  207. {OPT_ERR, NULL}
  208. };
  209. static char *ovl_next_opt(char **s)
  210. {
  211. char *sbegin = *s;
  212. char *p;
  213. if (sbegin == NULL)
  214. return NULL;
  215. for (p = sbegin; *p; p++) {
  216. if (*p == '\\') {
  217. p++;
  218. if (!*p)
  219. break;
  220. } else if (*p == ',') {
  221. *p = '\0';
  222. *s = p + 1;
  223. return sbegin;
  224. }
  225. }
  226. *s = NULL;
  227. return sbegin;
  228. }
  229. static int ovl_parse_opt(char *opt, struct ovl_config *config)
  230. {
  231. char *p;
  232. while ((p = ovl_next_opt(&opt)) != NULL) {
  233. int token;
  234. substring_t args[MAX_OPT_ARGS];
  235. if (!*p)
  236. continue;
  237. token = match_token(p, ovl_tokens, args);
  238. switch (token) {
  239. case OPT_UPPERDIR:
  240. kfree(config->upperdir);
  241. config->upperdir = match_strdup(&args[0]);
  242. if (!config->upperdir)
  243. return -ENOMEM;
  244. break;
  245. case OPT_LOWERDIR:
  246. kfree(config->lowerdir);
  247. config->lowerdir = match_strdup(&args[0]);
  248. if (!config->lowerdir)
  249. return -ENOMEM;
  250. break;
  251. case OPT_WORKDIR:
  252. kfree(config->workdir);
  253. config->workdir = match_strdup(&args[0]);
  254. if (!config->workdir)
  255. return -ENOMEM;
  256. break;
  257. case OPT_DEFAULT_PERMISSIONS:
  258. config->default_permissions = true;
  259. break;
  260. case OPT_REDIRECT_DIR_ON:
  261. config->redirect_dir = true;
  262. break;
  263. case OPT_REDIRECT_DIR_OFF:
  264. config->redirect_dir = false;
  265. break;
  266. default:
  267. pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p);
  268. return -EINVAL;
  269. }
  270. }
  271. /* Workdir is useless in non-upper mount */
  272. if (!config->upperdir && config->workdir) {
  273. pr_info("overlayfs: option \"workdir=%s\" is useless in a non-upper mount, ignore\n",
  274. config->workdir);
  275. kfree(config->workdir);
  276. config->workdir = NULL;
  277. }
  278. return 0;
  279. }
  280. #define OVL_WORKDIR_NAME "work"
  281. static struct dentry *ovl_workdir_create(struct vfsmount *mnt,
  282. struct dentry *dentry)
  283. {
  284. struct inode *dir = dentry->d_inode;
  285. struct dentry *work;
  286. int err;
  287. bool retried = false;
  288. err = mnt_want_write(mnt);
  289. if (err)
  290. return ERR_PTR(err);
  291. inode_lock_nested(dir, I_MUTEX_PARENT);
  292. retry:
  293. work = lookup_one_len(OVL_WORKDIR_NAME, dentry,
  294. strlen(OVL_WORKDIR_NAME));
  295. if (!IS_ERR(work)) {
  296. struct iattr attr = {
  297. .ia_valid = ATTR_MODE,
  298. .ia_mode = S_IFDIR | 0,
  299. };
  300. if (work->d_inode) {
  301. err = -EEXIST;
  302. if (retried)
  303. goto out_dput;
  304. retried = true;
  305. ovl_workdir_cleanup(dir, mnt, work, 0);
  306. dput(work);
  307. goto retry;
  308. }
  309. err = ovl_create_real(dir, work,
  310. &(struct cattr){.mode = S_IFDIR | 0},
  311. NULL, true);
  312. if (err)
  313. goto out_dput;
  314. /*
  315. * Try to remove POSIX ACL xattrs from workdir. We are good if:
  316. *
  317. * a) success (there was a POSIX ACL xattr and was removed)
  318. * b) -ENODATA (there was no POSIX ACL xattr)
  319. * c) -EOPNOTSUPP (POSIX ACL xattrs are not supported)
  320. *
  321. * There are various other error values that could effectively
  322. * mean that the xattr doesn't exist (e.g. -ERANGE is returned
  323. * if the xattr name is too long), but the set of filesystems
  324. * allowed as upper are limited to "normal" ones, where checking
  325. * for the above two errors is sufficient.
  326. */
  327. err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_DEFAULT);
  328. if (err && err != -ENODATA && err != -EOPNOTSUPP)
  329. goto out_dput;
  330. err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_ACCESS);
  331. if (err && err != -ENODATA && err != -EOPNOTSUPP)
  332. goto out_dput;
  333. /* Clear any inherited mode bits */
  334. inode_lock(work->d_inode);
  335. err = notify_change(work, &attr, NULL);
  336. inode_unlock(work->d_inode);
  337. if (err)
  338. goto out_dput;
  339. }
  340. out_unlock:
  341. inode_unlock(dir);
  342. mnt_drop_write(mnt);
  343. return work;
  344. out_dput:
  345. dput(work);
  346. work = ERR_PTR(err);
  347. goto out_unlock;
  348. }
  349. static void ovl_unescape(char *s)
  350. {
  351. char *d = s;
  352. for (;; s++, d++) {
  353. if (*s == '\\')
  354. s++;
  355. *d = *s;
  356. if (!*s)
  357. break;
  358. }
  359. }
  360. static int ovl_mount_dir_noesc(const char *name, struct path *path)
  361. {
  362. int err = -EINVAL;
  363. if (!*name) {
  364. pr_err("overlayfs: empty lowerdir\n");
  365. goto out;
  366. }
  367. err = kern_path(name, LOOKUP_FOLLOW, path);
  368. if (err) {
  369. pr_err("overlayfs: failed to resolve '%s': %i\n", name, err);
  370. goto out;
  371. }
  372. err = -EINVAL;
  373. if (ovl_dentry_weird(path->dentry)) {
  374. pr_err("overlayfs: filesystem on '%s' not supported\n", name);
  375. goto out_put;
  376. }
  377. if (!d_is_dir(path->dentry)) {
  378. pr_err("overlayfs: '%s' not a directory\n", name);
  379. goto out_put;
  380. }
  381. return 0;
  382. out_put:
  383. path_put(path);
  384. out:
  385. return err;
  386. }
  387. static int ovl_mount_dir(const char *name, struct path *path)
  388. {
  389. int err = -ENOMEM;
  390. char *tmp = kstrdup(name, GFP_KERNEL);
  391. if (tmp) {
  392. ovl_unescape(tmp);
  393. err = ovl_mount_dir_noesc(tmp, path);
  394. if (!err)
  395. if (ovl_dentry_remote(path->dentry)) {
  396. pr_err("overlayfs: filesystem on '%s' not supported as upperdir\n",
  397. tmp);
  398. path_put(path);
  399. err = -EINVAL;
  400. }
  401. kfree(tmp);
  402. }
  403. return err;
  404. }
  405. static int ovl_check_namelen(struct path *path, struct ovl_fs *ofs,
  406. const char *name)
  407. {
  408. struct kstatfs statfs;
  409. int err = vfs_statfs(path, &statfs);
  410. if (err)
  411. pr_err("overlayfs: statfs failed on '%s'\n", name);
  412. else
  413. ofs->namelen = max(ofs->namelen, statfs.f_namelen);
  414. return err;
  415. }
  416. static int ovl_lower_dir(const char *name, struct path *path,
  417. struct ovl_fs *ofs, int *stack_depth, bool *remote)
  418. {
  419. int err;
  420. err = ovl_mount_dir_noesc(name, path);
  421. if (err)
  422. goto out;
  423. err = ovl_check_namelen(path, ofs, name);
  424. if (err)
  425. goto out_put;
  426. *stack_depth = max(*stack_depth, path->mnt->mnt_sb->s_stack_depth);
  427. if (ovl_dentry_remote(path->dentry))
  428. *remote = true;
  429. return 0;
  430. out_put:
  431. path_put(path);
  432. out:
  433. return err;
  434. }
  435. /* Workdir should not be subdir of upperdir and vice versa */
  436. static bool ovl_workdir_ok(struct dentry *workdir, struct dentry *upperdir)
  437. {
  438. bool ok = false;
  439. if (workdir != upperdir) {
  440. ok = (lock_rename(workdir, upperdir) == NULL);
  441. unlock_rename(workdir, upperdir);
  442. }
  443. return ok;
  444. }
  445. static unsigned int ovl_split_lowerdirs(char *str)
  446. {
  447. unsigned int ctr = 1;
  448. char *s, *d;
  449. for (s = d = str;; s++, d++) {
  450. if (*s == '\\') {
  451. s++;
  452. } else if (*s == ':') {
  453. *d = '\0';
  454. ctr++;
  455. continue;
  456. }
  457. *d = *s;
  458. if (!*s)
  459. break;
  460. }
  461. return ctr;
  462. }
  463. static int __maybe_unused
  464. ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
  465. struct dentry *dentry, struct inode *inode,
  466. const char *name, void *buffer, size_t size)
  467. {
  468. return ovl_xattr_get(dentry, handler->name, buffer, size);
  469. }
  470. static int __maybe_unused
  471. ovl_posix_acl_xattr_set(const struct xattr_handler *handler,
  472. struct dentry *dentry, struct inode *inode,
  473. const char *name, const void *value,
  474. size_t size, int flags)
  475. {
  476. struct dentry *workdir = ovl_workdir(dentry);
  477. struct inode *realinode = ovl_inode_real(inode, NULL);
  478. struct posix_acl *acl = NULL;
  479. int err;
  480. /* Check that everything is OK before copy-up */
  481. if (value) {
  482. acl = posix_acl_from_xattr(&init_user_ns, value, size);
  483. if (IS_ERR(acl))
  484. return PTR_ERR(acl);
  485. }
  486. err = -EOPNOTSUPP;
  487. if (!IS_POSIXACL(d_inode(workdir)))
  488. goto out_acl_release;
  489. if (!realinode->i_op->set_acl)
  490. goto out_acl_release;
  491. if (handler->flags == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) {
  492. err = acl ? -EACCES : 0;
  493. goto out_acl_release;
  494. }
  495. err = -EPERM;
  496. if (!inode_owner_or_capable(inode))
  497. goto out_acl_release;
  498. posix_acl_release(acl);
  499. /*
  500. * Check if sgid bit needs to be cleared (actual setacl operation will
  501. * be done with mounter's capabilities and so that won't do it for us).
  502. */
  503. if (unlikely(inode->i_mode & S_ISGID) &&
  504. handler->flags == ACL_TYPE_ACCESS &&
  505. !in_group_p(inode->i_gid) &&
  506. !capable_wrt_inode_uidgid(inode, CAP_FSETID)) {
  507. struct iattr iattr = { .ia_valid = ATTR_KILL_SGID };
  508. err = ovl_setattr(dentry, &iattr);
  509. if (err)
  510. return err;
  511. }
  512. err = ovl_xattr_set(dentry, handler->name, value, size, flags);
  513. if (!err)
  514. ovl_copyattr(ovl_inode_real(inode, NULL), inode);
  515. return err;
  516. out_acl_release:
  517. posix_acl_release(acl);
  518. return err;
  519. }
  520. static int ovl_own_xattr_get(const struct xattr_handler *handler,
  521. struct dentry *dentry, struct inode *inode,
  522. const char *name, void *buffer, size_t size)
  523. {
  524. return -EOPNOTSUPP;
  525. }
  526. static int ovl_own_xattr_set(const struct xattr_handler *handler,
  527. struct dentry *dentry, struct inode *inode,
  528. const char *name, const void *value,
  529. size_t size, int flags)
  530. {
  531. return -EOPNOTSUPP;
  532. }
  533. static int ovl_other_xattr_get(const struct xattr_handler *handler,
  534. struct dentry *dentry, struct inode *inode,
  535. const char *name, void *buffer, size_t size)
  536. {
  537. return ovl_xattr_get(dentry, name, buffer, size);
  538. }
  539. static int ovl_other_xattr_set(const struct xattr_handler *handler,
  540. struct dentry *dentry, struct inode *inode,
  541. const char *name, const void *value,
  542. size_t size, int flags)
  543. {
  544. return ovl_xattr_set(dentry, name, value, size, flags);
  545. }
  546. static const struct xattr_handler __maybe_unused
  547. ovl_posix_acl_access_xattr_handler = {
  548. .name = XATTR_NAME_POSIX_ACL_ACCESS,
  549. .flags = ACL_TYPE_ACCESS,
  550. .get = ovl_posix_acl_xattr_get,
  551. .set = ovl_posix_acl_xattr_set,
  552. };
  553. static const struct xattr_handler __maybe_unused
  554. ovl_posix_acl_default_xattr_handler = {
  555. .name = XATTR_NAME_POSIX_ACL_DEFAULT,
  556. .flags = ACL_TYPE_DEFAULT,
  557. .get = ovl_posix_acl_xattr_get,
  558. .set = ovl_posix_acl_xattr_set,
  559. };
  560. static const struct xattr_handler ovl_own_xattr_handler = {
  561. .prefix = OVL_XATTR_PREFIX,
  562. .get = ovl_own_xattr_get,
  563. .set = ovl_own_xattr_set,
  564. };
  565. static const struct xattr_handler ovl_other_xattr_handler = {
  566. .prefix = "", /* catch all */
  567. .get = ovl_other_xattr_get,
  568. .set = ovl_other_xattr_set,
  569. };
  570. static const struct xattr_handler *ovl_xattr_handlers[] = {
  571. #ifdef CONFIG_FS_POSIX_ACL
  572. &ovl_posix_acl_access_xattr_handler,
  573. &ovl_posix_acl_default_xattr_handler,
  574. #endif
  575. &ovl_own_xattr_handler,
  576. &ovl_other_xattr_handler,
  577. NULL
  578. };
  579. static int ovl_fill_super(struct super_block *sb, void *data, int silent)
  580. {
  581. struct path upperpath = { NULL, NULL };
  582. struct path workpath = { NULL, NULL };
  583. struct dentry *root_dentry;
  584. struct inode *realinode;
  585. struct ovl_entry *oe;
  586. struct ovl_fs *ufs;
  587. struct path *stack = NULL;
  588. char *lowertmp;
  589. char *lower;
  590. unsigned int numlower;
  591. unsigned int stacklen = 0;
  592. unsigned int i;
  593. bool remote = false;
  594. int err;
  595. err = -ENOMEM;
  596. ufs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL);
  597. if (!ufs)
  598. goto out;
  599. ufs->config.redirect_dir = ovl_redirect_dir_def;
  600. err = ovl_parse_opt((char *) data, &ufs->config);
  601. if (err)
  602. goto out_free_config;
  603. err = -EINVAL;
  604. if (!ufs->config.lowerdir) {
  605. if (!silent)
  606. pr_err("overlayfs: missing 'lowerdir'\n");
  607. goto out_free_config;
  608. }
  609. sb->s_stack_depth = 0;
  610. sb->s_maxbytes = MAX_LFS_FILESIZE;
  611. if (ufs->config.upperdir) {
  612. if (!ufs->config.workdir) {
  613. pr_err("overlayfs: missing 'workdir'\n");
  614. goto out_free_config;
  615. }
  616. err = ovl_mount_dir(ufs->config.upperdir, &upperpath);
  617. if (err)
  618. goto out_free_config;
  619. /* Upper fs should not be r/o */
  620. if (upperpath.mnt->mnt_sb->s_flags & MS_RDONLY) {
  621. pr_err("overlayfs: upper fs is r/o, try multi-lower layers mount\n");
  622. err = -EINVAL;
  623. goto out_put_upperpath;
  624. }
  625. err = ovl_check_namelen(&upperpath, ufs, ufs->config.upperdir);
  626. if (err)
  627. goto out_put_upperpath;
  628. err = ovl_mount_dir(ufs->config.workdir, &workpath);
  629. if (err)
  630. goto out_put_upperpath;
  631. err = -EINVAL;
  632. if (upperpath.mnt != workpath.mnt) {
  633. pr_err("overlayfs: workdir and upperdir must reside under the same mount\n");
  634. goto out_put_workpath;
  635. }
  636. if (!ovl_workdir_ok(workpath.dentry, upperpath.dentry)) {
  637. pr_err("overlayfs: workdir and upperdir must be separate subtrees\n");
  638. goto out_put_workpath;
  639. }
  640. sb->s_stack_depth = upperpath.mnt->mnt_sb->s_stack_depth;
  641. }
  642. err = -ENOMEM;
  643. lowertmp = kstrdup(ufs->config.lowerdir, GFP_KERNEL);
  644. if (!lowertmp)
  645. goto out_put_workpath;
  646. err = -EINVAL;
  647. stacklen = ovl_split_lowerdirs(lowertmp);
  648. if (stacklen > OVL_MAX_STACK) {
  649. pr_err("overlayfs: too many lower directories, limit is %d\n",
  650. OVL_MAX_STACK);
  651. goto out_free_lowertmp;
  652. } else if (!ufs->config.upperdir && stacklen == 1) {
  653. pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n");
  654. goto out_free_lowertmp;
  655. }
  656. err = -ENOMEM;
  657. stack = kcalloc(stacklen, sizeof(struct path), GFP_KERNEL);
  658. if (!stack)
  659. goto out_free_lowertmp;
  660. err = -EINVAL;
  661. lower = lowertmp;
  662. for (numlower = 0; numlower < stacklen; numlower++) {
  663. err = ovl_lower_dir(lower, &stack[numlower], ufs,
  664. &sb->s_stack_depth, &remote);
  665. if (err)
  666. goto out_put_lowerpath;
  667. lower = strchr(lower, '\0') + 1;
  668. }
  669. err = -EINVAL;
  670. sb->s_stack_depth++;
  671. if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
  672. pr_err("overlayfs: maximum fs stacking depth exceeded\n");
  673. goto out_put_lowerpath;
  674. }
  675. if (ufs->config.upperdir) {
  676. ufs->upper_mnt = clone_private_mount(&upperpath);
  677. err = PTR_ERR(ufs->upper_mnt);
  678. if (IS_ERR(ufs->upper_mnt)) {
  679. pr_err("overlayfs: failed to clone upperpath\n");
  680. goto out_put_lowerpath;
  681. }
  682. /* Don't inherit atime flags */
  683. ufs->upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME);
  684. sb->s_time_gran = ufs->upper_mnt->mnt_sb->s_time_gran;
  685. ufs->workdir = ovl_workdir_create(ufs->upper_mnt, workpath.dentry);
  686. err = PTR_ERR(ufs->workdir);
  687. if (IS_ERR(ufs->workdir)) {
  688. pr_warn("overlayfs: failed to create directory %s/%s (errno: %i); mounting read-only\n",
  689. ufs->config.workdir, OVL_WORKDIR_NAME, -err);
  690. sb->s_flags |= MS_RDONLY;
  691. ufs->workdir = NULL;
  692. }
  693. /*
  694. * Upper should support d_type, else whiteouts are visible.
  695. * Given workdir and upper are on same fs, we can do
  696. * iterate_dir() on workdir. This check requires successful
  697. * creation of workdir in previous step.
  698. */
  699. if (ufs->workdir) {
  700. err = ovl_check_d_type_supported(&workpath);
  701. if (err < 0)
  702. goto out_put_workdir;
  703. /*
  704. * We allowed this configuration and don't want to
  705. * break users over kernel upgrade. So warn instead
  706. * of erroring out.
  707. */
  708. if (!err)
  709. pr_warn("overlayfs: upper fs needs to support d_type.\n");
  710. }
  711. }
  712. err = -ENOMEM;
  713. ufs->lower_mnt = kcalloc(numlower, sizeof(struct vfsmount *), GFP_KERNEL);
  714. if (ufs->lower_mnt == NULL)
  715. goto out_put_workdir;
  716. for (i = 0; i < numlower; i++) {
  717. struct vfsmount *mnt = clone_private_mount(&stack[i]);
  718. err = PTR_ERR(mnt);
  719. if (IS_ERR(mnt)) {
  720. pr_err("overlayfs: failed to clone lowerpath\n");
  721. goto out_put_lower_mnt;
  722. }
  723. /*
  724. * Make lower_mnt R/O. That way fchmod/fchown on lower file
  725. * will fail instead of modifying lower fs.
  726. */
  727. mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME;
  728. ufs->lower_mnt[ufs->numlower] = mnt;
  729. ufs->numlower++;
  730. }
  731. /* If the upper fs is nonexistent, we mark overlayfs r/o too */
  732. if (!ufs->upper_mnt)
  733. sb->s_flags |= MS_RDONLY;
  734. if (remote)
  735. sb->s_d_op = &ovl_reval_dentry_operations;
  736. else
  737. sb->s_d_op = &ovl_dentry_operations;
  738. ufs->creator_cred = prepare_creds();
  739. if (!ufs->creator_cred)
  740. goto out_put_lower_mnt;
  741. err = -ENOMEM;
  742. oe = ovl_alloc_entry(numlower);
  743. if (!oe)
  744. goto out_put_cred;
  745. sb->s_magic = OVERLAYFS_SUPER_MAGIC;
  746. sb->s_op = &ovl_super_operations;
  747. sb->s_xattr = ovl_xattr_handlers;
  748. sb->s_fs_info = ufs;
  749. sb->s_flags |= MS_POSIXACL | MS_NOREMOTELOCK;
  750. root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, 0));
  751. if (!root_dentry)
  752. goto out_free_oe;
  753. mntput(upperpath.mnt);
  754. for (i = 0; i < numlower; i++)
  755. mntput(stack[i].mnt);
  756. path_put(&workpath);
  757. kfree(lowertmp);
  758. oe->__upperdentry = upperpath.dentry;
  759. for (i = 0; i < numlower; i++) {
  760. oe->lowerstack[i].dentry = stack[i].dentry;
  761. oe->lowerstack[i].mnt = ufs->lower_mnt[i];
  762. }
  763. kfree(stack);
  764. root_dentry->d_fsdata = oe;
  765. realinode = d_inode(ovl_dentry_real(root_dentry));
  766. ovl_inode_init(d_inode(root_dentry), realinode, !!upperpath.dentry);
  767. ovl_copyattr(realinode, d_inode(root_dentry));
  768. sb->s_root = root_dentry;
  769. return 0;
  770. out_free_oe:
  771. kfree(oe);
  772. out_put_cred:
  773. put_cred(ufs->creator_cred);
  774. out_put_lower_mnt:
  775. for (i = 0; i < ufs->numlower; i++)
  776. mntput(ufs->lower_mnt[i]);
  777. kfree(ufs->lower_mnt);
  778. out_put_workdir:
  779. dput(ufs->workdir);
  780. mntput(ufs->upper_mnt);
  781. out_put_lowerpath:
  782. for (i = 0; i < numlower; i++)
  783. path_put(&stack[i]);
  784. kfree(stack);
  785. out_free_lowertmp:
  786. kfree(lowertmp);
  787. out_put_workpath:
  788. path_put(&workpath);
  789. out_put_upperpath:
  790. path_put(&upperpath);
  791. out_free_config:
  792. kfree(ufs->config.lowerdir);
  793. kfree(ufs->config.upperdir);
  794. kfree(ufs->config.workdir);
  795. kfree(ufs);
  796. out:
  797. return err;
  798. }
  799. static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
  800. const char *dev_name, void *raw_data)
  801. {
  802. return mount_nodev(fs_type, flags, raw_data, ovl_fill_super);
  803. }
  804. static struct file_system_type ovl_fs_type = {
  805. .owner = THIS_MODULE,
  806. .name = "overlay",
  807. .mount = ovl_mount,
  808. .kill_sb = kill_anon_super,
  809. };
  810. MODULE_ALIAS_FS("overlay");
  811. static int __init ovl_init(void)
  812. {
  813. return register_filesystem(&ovl_fs_type);
  814. }
  815. static void __exit ovl_exit(void)
  816. {
  817. unregister_filesystem(&ovl_fs_type);
  818. }
  819. module_init(ovl_init);
  820. module_exit(ovl_exit);