dir.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179
  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/security.h>
  13. #include <linux/cred.h>
  14. #include <linux/module.h>
  15. #include <linux/posix_acl.h>
  16. #include <linux/posix_acl_xattr.h>
  17. #include <linux/atomic.h>
  18. #include <linux/ratelimit.h>
  19. #include "overlayfs.h"
  20. static unsigned short ovl_redirect_max = 256;
  21. module_param_named(redirect_max, ovl_redirect_max, ushort, 0644);
  22. MODULE_PARM_DESC(ovl_redirect_max,
  23. "Maximum length of absolute redirect xattr value");
  24. int ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
  25. {
  26. int err;
  27. dget(wdentry);
  28. if (d_is_dir(wdentry))
  29. err = ovl_do_rmdir(wdir, wdentry);
  30. else
  31. err = ovl_do_unlink(wdir, wdentry);
  32. dput(wdentry);
  33. if (err) {
  34. pr_err("overlayfs: cleanup of '%pd2' failed (%i)\n",
  35. wdentry, err);
  36. }
  37. return err;
  38. }
  39. static struct dentry *ovl_lookup_temp(struct dentry *workdir)
  40. {
  41. struct dentry *temp;
  42. char name[20];
  43. static atomic_t temp_id = ATOMIC_INIT(0);
  44. /* counter is allowed to wrap, since temp dentries are ephemeral */
  45. snprintf(name, sizeof(name), "#%x", atomic_inc_return(&temp_id));
  46. temp = lookup_one_len(name, workdir, strlen(name));
  47. if (!IS_ERR(temp) && temp->d_inode) {
  48. pr_err("overlayfs: workdir/%s already exists\n", name);
  49. dput(temp);
  50. temp = ERR_PTR(-EIO);
  51. }
  52. return temp;
  53. }
  54. /* caller holds i_mutex on workdir */
  55. static struct dentry *ovl_whiteout(struct dentry *workdir)
  56. {
  57. int err;
  58. struct dentry *whiteout;
  59. struct inode *wdir = workdir->d_inode;
  60. whiteout = ovl_lookup_temp(workdir);
  61. if (IS_ERR(whiteout))
  62. return whiteout;
  63. err = ovl_do_whiteout(wdir, whiteout);
  64. if (err) {
  65. dput(whiteout);
  66. whiteout = ERR_PTR(err);
  67. }
  68. return whiteout;
  69. }
  70. /* Caller must hold i_mutex on both workdir and dir */
  71. int ovl_cleanup_and_whiteout(struct dentry *workdir, struct inode *dir,
  72. struct dentry *dentry)
  73. {
  74. struct inode *wdir = workdir->d_inode;
  75. struct dentry *whiteout;
  76. int err;
  77. int flags = 0;
  78. whiteout = ovl_whiteout(workdir);
  79. err = PTR_ERR(whiteout);
  80. if (IS_ERR(whiteout))
  81. return err;
  82. if (d_is_dir(dentry))
  83. flags = RENAME_EXCHANGE;
  84. err = ovl_do_rename(wdir, whiteout, dir, dentry, flags);
  85. if (err)
  86. goto kill_whiteout;
  87. if (flags)
  88. ovl_cleanup(wdir, dentry);
  89. out:
  90. dput(whiteout);
  91. return err;
  92. kill_whiteout:
  93. ovl_cleanup(wdir, whiteout);
  94. goto out;
  95. }
  96. static int ovl_mkdir_real(struct inode *dir, struct dentry **newdentry,
  97. umode_t mode)
  98. {
  99. int err;
  100. struct dentry *d, *dentry = *newdentry;
  101. err = ovl_do_mkdir(dir, dentry, mode);
  102. if (err)
  103. return err;
  104. if (likely(!d_unhashed(dentry)))
  105. return 0;
  106. /*
  107. * vfs_mkdir() may succeed and leave the dentry passed
  108. * to it unhashed and negative. If that happens, try to
  109. * lookup a new hashed and positive dentry.
  110. */
  111. d = lookup_one_len(dentry->d_name.name, dentry->d_parent,
  112. dentry->d_name.len);
  113. if (IS_ERR(d)) {
  114. pr_warn("overlayfs: failed lookup after mkdir (%pd2, err=%i).\n",
  115. dentry, err);
  116. return PTR_ERR(d);
  117. }
  118. dput(dentry);
  119. *newdentry = d;
  120. return 0;
  121. }
  122. struct dentry *ovl_create_real(struct inode *dir, struct dentry *newdentry,
  123. struct ovl_cattr *attr)
  124. {
  125. int err;
  126. if (IS_ERR(newdentry))
  127. return newdentry;
  128. err = -ESTALE;
  129. if (newdentry->d_inode)
  130. goto out;
  131. if (attr->hardlink) {
  132. err = ovl_do_link(attr->hardlink, dir, newdentry);
  133. } else {
  134. switch (attr->mode & S_IFMT) {
  135. case S_IFREG:
  136. err = ovl_do_create(dir, newdentry, attr->mode);
  137. break;
  138. case S_IFDIR:
  139. /* mkdir is special... */
  140. err = ovl_mkdir_real(dir, &newdentry, attr->mode);
  141. break;
  142. case S_IFCHR:
  143. case S_IFBLK:
  144. case S_IFIFO:
  145. case S_IFSOCK:
  146. err = ovl_do_mknod(dir, newdentry, attr->mode,
  147. attr->rdev);
  148. break;
  149. case S_IFLNK:
  150. err = ovl_do_symlink(dir, newdentry, attr->link);
  151. break;
  152. default:
  153. err = -EPERM;
  154. }
  155. }
  156. if (!err && WARN_ON(!newdentry->d_inode)) {
  157. /*
  158. * Not quite sure if non-instantiated dentry is legal or not.
  159. * VFS doesn't seem to care so check and warn here.
  160. */
  161. err = -EIO;
  162. }
  163. out:
  164. if (err) {
  165. dput(newdentry);
  166. return ERR_PTR(err);
  167. }
  168. return newdentry;
  169. }
  170. struct dentry *ovl_create_temp(struct dentry *workdir, struct ovl_cattr *attr)
  171. {
  172. return ovl_create_real(d_inode(workdir), ovl_lookup_temp(workdir),
  173. attr);
  174. }
  175. static int ovl_set_opaque_xerr(struct dentry *dentry, struct dentry *upper,
  176. int xerr)
  177. {
  178. int err;
  179. err = ovl_check_setxattr(dentry, upper, OVL_XATTR_OPAQUE, "y", 1, xerr);
  180. if (!err)
  181. ovl_dentry_set_opaque(dentry);
  182. return err;
  183. }
  184. static int ovl_set_opaque(struct dentry *dentry, struct dentry *upperdentry)
  185. {
  186. /*
  187. * Fail with -EIO when trying to create opaque dir and upper doesn't
  188. * support xattrs. ovl_rename() calls ovl_set_opaque_xerr(-EXDEV) to
  189. * return a specific error for noxattr case.
  190. */
  191. return ovl_set_opaque_xerr(dentry, upperdentry, -EIO);
  192. }
  193. /*
  194. * Common operations required to be done after creation of file on upper.
  195. * If @hardlink is false, then @inode is a pre-allocated inode, we may or
  196. * may not use to instantiate the new dentry.
  197. */
  198. static int ovl_instantiate(struct dentry *dentry, struct inode *inode,
  199. struct dentry *newdentry, bool hardlink)
  200. {
  201. struct ovl_inode_params oip = {
  202. .upperdentry = newdentry,
  203. .newinode = inode,
  204. };
  205. ovl_dentry_version_inc(dentry->d_parent, false);
  206. ovl_dentry_set_upper_alias(dentry);
  207. if (!hardlink) {
  208. /*
  209. * ovl_obtain_alias() can be called after ovl_create_real()
  210. * and before we get here, so we may get an inode from cache
  211. * with the same real upperdentry that is not the inode we
  212. * pre-allocated. In this case we will use the cached inode
  213. * to instantiate the new dentry.
  214. *
  215. * XXX: if we ever use ovl_obtain_alias() to decode directory
  216. * file handles, need to use ovl_get_inode_locked() and
  217. * d_instantiate_new() here to prevent from creating two
  218. * hashed directory inode aliases.
  219. */
  220. inode = ovl_get_inode(dentry->d_sb, &oip);
  221. if (WARN_ON(IS_ERR(inode)))
  222. return PTR_ERR(inode);
  223. } else {
  224. WARN_ON(ovl_inode_real(inode) != d_inode(newdentry));
  225. dput(newdentry);
  226. inc_nlink(inode);
  227. }
  228. d_instantiate(dentry, inode);
  229. if (inode != oip.newinode) {
  230. pr_warn_ratelimited("overlayfs: newly created inode found in cache (%pd2)\n",
  231. dentry);
  232. }
  233. /* Force lookup of new upper hardlink to find its lower */
  234. if (hardlink)
  235. d_drop(dentry);
  236. return 0;
  237. }
  238. static bool ovl_type_merge(struct dentry *dentry)
  239. {
  240. return OVL_TYPE_MERGE(ovl_path_type(dentry));
  241. }
  242. static bool ovl_type_origin(struct dentry *dentry)
  243. {
  244. return OVL_TYPE_ORIGIN(ovl_path_type(dentry));
  245. }
  246. static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
  247. struct ovl_cattr *attr)
  248. {
  249. struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
  250. struct inode *udir = upperdir->d_inode;
  251. struct dentry *newdentry;
  252. int err;
  253. if (!attr->hardlink && !IS_POSIXACL(udir))
  254. attr->mode &= ~current_umask();
  255. inode_lock_nested(udir, I_MUTEX_PARENT);
  256. newdentry = ovl_create_real(udir,
  257. lookup_one_len(dentry->d_name.name,
  258. upperdir,
  259. dentry->d_name.len),
  260. attr);
  261. err = PTR_ERR(newdentry);
  262. if (IS_ERR(newdentry))
  263. goto out_unlock;
  264. if (ovl_type_merge(dentry->d_parent) && d_is_dir(newdentry)) {
  265. /* Setting opaque here is just an optimization, allow to fail */
  266. ovl_set_opaque(dentry, newdentry);
  267. }
  268. err = ovl_instantiate(dentry, inode, newdentry, !!attr->hardlink);
  269. if (err)
  270. goto out_cleanup;
  271. out_unlock:
  272. inode_unlock(udir);
  273. return err;
  274. out_cleanup:
  275. ovl_cleanup(udir, newdentry);
  276. dput(newdentry);
  277. goto out_unlock;
  278. }
  279. static struct dentry *ovl_clear_empty(struct dentry *dentry,
  280. struct list_head *list)
  281. {
  282. struct dentry *workdir = ovl_workdir(dentry);
  283. struct inode *wdir = workdir->d_inode;
  284. struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
  285. struct inode *udir = upperdir->d_inode;
  286. struct path upperpath;
  287. struct dentry *upper;
  288. struct dentry *opaquedir;
  289. struct kstat stat;
  290. int err;
  291. if (WARN_ON(!workdir))
  292. return ERR_PTR(-EROFS);
  293. err = ovl_lock_rename_workdir(workdir, upperdir);
  294. if (err)
  295. goto out;
  296. ovl_path_upper(dentry, &upperpath);
  297. err = vfs_getattr(&upperpath, &stat,
  298. STATX_BASIC_STATS, AT_STATX_SYNC_AS_STAT);
  299. if (err)
  300. goto out_unlock;
  301. err = -ESTALE;
  302. if (!S_ISDIR(stat.mode))
  303. goto out_unlock;
  304. upper = upperpath.dentry;
  305. if (upper->d_parent->d_inode != udir)
  306. goto out_unlock;
  307. opaquedir = ovl_create_temp(workdir, OVL_CATTR(stat.mode));
  308. err = PTR_ERR(opaquedir);
  309. if (IS_ERR(opaquedir))
  310. goto out_unlock;
  311. err = ovl_copy_xattr(upper, opaquedir);
  312. if (err)
  313. goto out_cleanup;
  314. err = ovl_set_opaque(dentry, opaquedir);
  315. if (err)
  316. goto out_cleanup;
  317. inode_lock(opaquedir->d_inode);
  318. err = ovl_set_attr(opaquedir, &stat);
  319. inode_unlock(opaquedir->d_inode);
  320. if (err)
  321. goto out_cleanup;
  322. err = ovl_do_rename(wdir, opaquedir, udir, upper, RENAME_EXCHANGE);
  323. if (err)
  324. goto out_cleanup;
  325. ovl_cleanup_whiteouts(upper, list);
  326. ovl_cleanup(wdir, upper);
  327. unlock_rename(workdir, upperdir);
  328. /* dentry's upper doesn't match now, get rid of it */
  329. d_drop(dentry);
  330. return opaquedir;
  331. out_cleanup:
  332. ovl_cleanup(wdir, opaquedir);
  333. dput(opaquedir);
  334. out_unlock:
  335. unlock_rename(workdir, upperdir);
  336. out:
  337. return ERR_PTR(err);
  338. }
  339. static int ovl_set_upper_acl(struct dentry *upperdentry, const char *name,
  340. const struct posix_acl *acl)
  341. {
  342. void *buffer;
  343. size_t size;
  344. int err;
  345. if (!IS_ENABLED(CONFIG_FS_POSIX_ACL) || !acl)
  346. return 0;
  347. size = posix_acl_to_xattr(NULL, acl, NULL, 0);
  348. buffer = kmalloc(size, GFP_KERNEL);
  349. if (!buffer)
  350. return -ENOMEM;
  351. size = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
  352. err = size;
  353. if (err < 0)
  354. goto out_free;
  355. err = vfs_setxattr(upperdentry, name, buffer, size, XATTR_CREATE);
  356. out_free:
  357. kfree(buffer);
  358. return err;
  359. }
  360. static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode,
  361. struct ovl_cattr *cattr)
  362. {
  363. struct dentry *workdir = ovl_workdir(dentry);
  364. struct inode *wdir = workdir->d_inode;
  365. struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
  366. struct inode *udir = upperdir->d_inode;
  367. struct dentry *upper;
  368. struct dentry *newdentry;
  369. int err;
  370. struct posix_acl *acl, *default_acl;
  371. bool hardlink = !!cattr->hardlink;
  372. if (WARN_ON(!workdir))
  373. return -EROFS;
  374. if (!hardlink) {
  375. err = posix_acl_create(dentry->d_parent->d_inode,
  376. &cattr->mode, &default_acl, &acl);
  377. if (err)
  378. return err;
  379. }
  380. err = ovl_lock_rename_workdir(workdir, upperdir);
  381. if (err)
  382. goto out;
  383. upper = lookup_one_len(dentry->d_name.name, upperdir,
  384. dentry->d_name.len);
  385. err = PTR_ERR(upper);
  386. if (IS_ERR(upper))
  387. goto out_unlock;
  388. newdentry = ovl_create_temp(workdir, cattr);
  389. err = PTR_ERR(newdentry);
  390. if (IS_ERR(newdentry))
  391. goto out_dput;
  392. /*
  393. * mode could have been mutilated due to umask (e.g. sgid directory)
  394. */
  395. if (!hardlink &&
  396. !S_ISLNK(cattr->mode) &&
  397. newdentry->d_inode->i_mode != cattr->mode) {
  398. struct iattr attr = {
  399. .ia_valid = ATTR_MODE,
  400. .ia_mode = cattr->mode,
  401. };
  402. inode_lock(newdentry->d_inode);
  403. err = notify_change(newdentry, &attr, NULL);
  404. inode_unlock(newdentry->d_inode);
  405. if (err)
  406. goto out_cleanup;
  407. }
  408. if (!hardlink) {
  409. err = ovl_set_upper_acl(newdentry, XATTR_NAME_POSIX_ACL_ACCESS,
  410. acl);
  411. if (err)
  412. goto out_cleanup;
  413. err = ovl_set_upper_acl(newdentry, XATTR_NAME_POSIX_ACL_DEFAULT,
  414. default_acl);
  415. if (err)
  416. goto out_cleanup;
  417. }
  418. if (!hardlink && S_ISDIR(cattr->mode)) {
  419. err = ovl_set_opaque(dentry, newdentry);
  420. if (err)
  421. goto out_cleanup;
  422. err = ovl_do_rename(wdir, newdentry, udir, upper,
  423. RENAME_EXCHANGE);
  424. if (err)
  425. goto out_cleanup;
  426. ovl_cleanup(wdir, upper);
  427. } else {
  428. err = ovl_do_rename(wdir, newdentry, udir, upper, 0);
  429. if (err)
  430. goto out_cleanup;
  431. }
  432. err = ovl_instantiate(dentry, inode, newdentry, hardlink);
  433. if (err)
  434. goto out_cleanup;
  435. out_dput:
  436. dput(upper);
  437. out_unlock:
  438. unlock_rename(workdir, upperdir);
  439. out:
  440. if (!hardlink) {
  441. posix_acl_release(acl);
  442. posix_acl_release(default_acl);
  443. }
  444. return err;
  445. out_cleanup:
  446. ovl_cleanup(wdir, newdentry);
  447. dput(newdentry);
  448. goto out_dput;
  449. }
  450. static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
  451. struct ovl_cattr *attr, bool origin)
  452. {
  453. int err;
  454. const struct cred *old_cred;
  455. struct cred *override_cred;
  456. struct dentry *parent = dentry->d_parent;
  457. err = ovl_copy_up(parent);
  458. if (err)
  459. return err;
  460. old_cred = ovl_override_creds(dentry->d_sb);
  461. /*
  462. * When linking a file with copy up origin into a new parent, mark the
  463. * new parent dir "impure".
  464. */
  465. if (origin) {
  466. err = ovl_set_impure(parent, ovl_dentry_upper(parent));
  467. if (err)
  468. goto out_revert_creds;
  469. }
  470. err = -ENOMEM;
  471. override_cred = prepare_creds();
  472. if (override_cred) {
  473. override_cred->fsuid = inode->i_uid;
  474. override_cred->fsgid = inode->i_gid;
  475. if (!attr->hardlink) {
  476. err = security_dentry_create_files_as(dentry,
  477. attr->mode, &dentry->d_name, old_cred,
  478. override_cred);
  479. if (err) {
  480. put_cred(override_cred);
  481. goto out_revert_creds;
  482. }
  483. }
  484. put_cred(override_creds(override_cred));
  485. put_cred(override_cred);
  486. if (!ovl_dentry_is_whiteout(dentry))
  487. err = ovl_create_upper(dentry, inode, attr);
  488. else
  489. err = ovl_create_over_whiteout(dentry, inode, attr);
  490. }
  491. out_revert_creds:
  492. revert_creds(old_cred);
  493. return err;
  494. }
  495. static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev,
  496. const char *link)
  497. {
  498. int err;
  499. struct inode *inode;
  500. struct ovl_cattr attr = {
  501. .rdev = rdev,
  502. .link = link,
  503. };
  504. err = ovl_want_write(dentry);
  505. if (err)
  506. goto out;
  507. /* Preallocate inode to be used by ovl_get_inode() */
  508. err = -ENOMEM;
  509. inode = ovl_new_inode(dentry->d_sb, mode, rdev);
  510. if (!inode)
  511. goto out_drop_write;
  512. inode_init_owner(inode, dentry->d_parent->d_inode, mode);
  513. attr.mode = inode->i_mode;
  514. err = ovl_create_or_link(dentry, inode, &attr, false);
  515. /* Did we end up using the preallocated inode? */
  516. if (inode != d_inode(dentry))
  517. iput(inode);
  518. out_drop_write:
  519. ovl_drop_write(dentry);
  520. out:
  521. return err;
  522. }
  523. static int ovl_create(struct inode *dir, struct dentry *dentry, umode_t mode,
  524. bool excl)
  525. {
  526. return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL);
  527. }
  528. static int ovl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
  529. {
  530. return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL);
  531. }
  532. static int ovl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
  533. dev_t rdev)
  534. {
  535. /* Don't allow creation of "whiteout" on overlay */
  536. if (S_ISCHR(mode) && rdev == WHITEOUT_DEV)
  537. return -EPERM;
  538. return ovl_create_object(dentry, mode, rdev, NULL);
  539. }
  540. static int ovl_symlink(struct inode *dir, struct dentry *dentry,
  541. const char *link)
  542. {
  543. return ovl_create_object(dentry, S_IFLNK, 0, link);
  544. }
  545. static int ovl_link(struct dentry *old, struct inode *newdir,
  546. struct dentry *new)
  547. {
  548. int err;
  549. bool locked = false;
  550. struct inode *inode;
  551. err = ovl_want_write(old);
  552. if (err)
  553. goto out;
  554. err = ovl_copy_up(old);
  555. if (err)
  556. goto out_drop_write;
  557. err = ovl_nlink_start(old, &locked);
  558. if (err)
  559. goto out_drop_write;
  560. inode = d_inode(old);
  561. ihold(inode);
  562. err = ovl_create_or_link(new, inode,
  563. &(struct ovl_cattr) {.hardlink = ovl_dentry_upper(old)},
  564. ovl_type_origin(old));
  565. if (err)
  566. iput(inode);
  567. ovl_nlink_end(old, locked);
  568. out_drop_write:
  569. ovl_drop_write(old);
  570. out:
  571. return err;
  572. }
  573. static bool ovl_matches_upper(struct dentry *dentry, struct dentry *upper)
  574. {
  575. return d_inode(ovl_dentry_upper(dentry)) == d_inode(upper);
  576. }
  577. static int ovl_remove_and_whiteout(struct dentry *dentry,
  578. struct list_head *list)
  579. {
  580. struct dentry *workdir = ovl_workdir(dentry);
  581. struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
  582. struct dentry *upper;
  583. struct dentry *opaquedir = NULL;
  584. int err;
  585. if (WARN_ON(!workdir))
  586. return -EROFS;
  587. if (!list_empty(list)) {
  588. opaquedir = ovl_clear_empty(dentry, list);
  589. err = PTR_ERR(opaquedir);
  590. if (IS_ERR(opaquedir))
  591. goto out;
  592. }
  593. err = ovl_lock_rename_workdir(workdir, upperdir);
  594. if (err)
  595. goto out_dput;
  596. upper = lookup_one_len(dentry->d_name.name, upperdir,
  597. dentry->d_name.len);
  598. err = PTR_ERR(upper);
  599. if (IS_ERR(upper))
  600. goto out_unlock;
  601. err = -ESTALE;
  602. if ((opaquedir && upper != opaquedir) ||
  603. (!opaquedir && ovl_dentry_upper(dentry) &&
  604. !ovl_matches_upper(dentry, upper))) {
  605. goto out_dput_upper;
  606. }
  607. err = ovl_cleanup_and_whiteout(workdir, d_inode(upperdir), upper);
  608. if (err)
  609. goto out_d_drop;
  610. ovl_dentry_version_inc(dentry->d_parent, true);
  611. out_d_drop:
  612. d_drop(dentry);
  613. out_dput_upper:
  614. dput(upper);
  615. out_unlock:
  616. unlock_rename(workdir, upperdir);
  617. out_dput:
  618. dput(opaquedir);
  619. out:
  620. return err;
  621. }
  622. static int ovl_remove_upper(struct dentry *dentry, bool is_dir,
  623. struct list_head *list)
  624. {
  625. struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
  626. struct inode *dir = upperdir->d_inode;
  627. struct dentry *upper;
  628. struct dentry *opaquedir = NULL;
  629. int err;
  630. if (!list_empty(list)) {
  631. opaquedir = ovl_clear_empty(dentry, list);
  632. err = PTR_ERR(opaquedir);
  633. if (IS_ERR(opaquedir))
  634. goto out;
  635. }
  636. inode_lock_nested(dir, I_MUTEX_PARENT);
  637. upper = lookup_one_len(dentry->d_name.name, upperdir,
  638. dentry->d_name.len);
  639. err = PTR_ERR(upper);
  640. if (IS_ERR(upper))
  641. goto out_unlock;
  642. err = -ESTALE;
  643. if ((opaquedir && upper != opaquedir) ||
  644. (!opaquedir && !ovl_matches_upper(dentry, upper)))
  645. goto out_dput_upper;
  646. if (is_dir)
  647. err = vfs_rmdir(dir, upper);
  648. else
  649. err = vfs_unlink(dir, upper, NULL);
  650. ovl_dentry_version_inc(dentry->d_parent, ovl_type_origin(dentry));
  651. /*
  652. * Keeping this dentry hashed would mean having to release
  653. * upperpath/lowerpath, which could only be done if we are the
  654. * sole user of this dentry. Too tricky... Just unhash for
  655. * now.
  656. */
  657. if (!err)
  658. d_drop(dentry);
  659. out_dput_upper:
  660. dput(upper);
  661. out_unlock:
  662. inode_unlock(dir);
  663. dput(opaquedir);
  664. out:
  665. return err;
  666. }
  667. static bool ovl_pure_upper(struct dentry *dentry)
  668. {
  669. return !ovl_dentry_lower(dentry) &&
  670. !ovl_test_flag(OVL_WHITEOUTS, d_inode(dentry));
  671. }
  672. static int ovl_do_remove(struct dentry *dentry, bool is_dir)
  673. {
  674. int err;
  675. bool locked = false;
  676. const struct cred *old_cred;
  677. bool lower_positive = ovl_lower_positive(dentry);
  678. LIST_HEAD(list);
  679. /* No need to clean pure upper removed by vfs_rmdir() */
  680. if (is_dir && (lower_positive || !ovl_pure_upper(dentry))) {
  681. err = ovl_check_empty_dir(dentry, &list);
  682. if (err)
  683. goto out;
  684. }
  685. err = ovl_want_write(dentry);
  686. if (err)
  687. goto out;
  688. err = ovl_copy_up(dentry->d_parent);
  689. if (err)
  690. goto out_drop_write;
  691. err = ovl_nlink_start(dentry, &locked);
  692. if (err)
  693. goto out_drop_write;
  694. old_cred = ovl_override_creds(dentry->d_sb);
  695. if (!lower_positive)
  696. err = ovl_remove_upper(dentry, is_dir, &list);
  697. else
  698. err = ovl_remove_and_whiteout(dentry, &list);
  699. revert_creds(old_cred);
  700. if (!err) {
  701. if (is_dir)
  702. clear_nlink(dentry->d_inode);
  703. else
  704. drop_nlink(dentry->d_inode);
  705. }
  706. ovl_nlink_end(dentry, locked);
  707. out_drop_write:
  708. ovl_drop_write(dentry);
  709. out:
  710. ovl_cache_free(&list);
  711. return err;
  712. }
  713. static int ovl_unlink(struct inode *dir, struct dentry *dentry)
  714. {
  715. return ovl_do_remove(dentry, false);
  716. }
  717. static int ovl_rmdir(struct inode *dir, struct dentry *dentry)
  718. {
  719. return ovl_do_remove(dentry, true);
  720. }
  721. static bool ovl_type_merge_or_lower(struct dentry *dentry)
  722. {
  723. enum ovl_path_type type = ovl_path_type(dentry);
  724. return OVL_TYPE_MERGE(type) || !OVL_TYPE_UPPER(type);
  725. }
  726. static bool ovl_can_move(struct dentry *dentry)
  727. {
  728. return ovl_redirect_dir(dentry->d_sb) ||
  729. !d_is_dir(dentry) || !ovl_type_merge_or_lower(dentry);
  730. }
  731. static char *ovl_get_redirect(struct dentry *dentry, bool samedir)
  732. {
  733. char *buf, *ret;
  734. struct dentry *d, *tmp;
  735. int buflen = ovl_redirect_max + 1;
  736. if (samedir) {
  737. ret = kstrndup(dentry->d_name.name, dentry->d_name.len,
  738. GFP_KERNEL);
  739. goto out;
  740. }
  741. buf = ret = kmalloc(buflen, GFP_KERNEL);
  742. if (!buf)
  743. goto out;
  744. buflen--;
  745. buf[buflen] = '\0';
  746. for (d = dget(dentry); !IS_ROOT(d);) {
  747. const char *name;
  748. int thislen;
  749. spin_lock(&d->d_lock);
  750. name = ovl_dentry_get_redirect(d);
  751. if (name) {
  752. thislen = strlen(name);
  753. } else {
  754. name = d->d_name.name;
  755. thislen = d->d_name.len;
  756. }
  757. /* If path is too long, fall back to userspace move */
  758. if (thislen + (name[0] != '/') > buflen) {
  759. ret = ERR_PTR(-EXDEV);
  760. spin_unlock(&d->d_lock);
  761. goto out_put;
  762. }
  763. buflen -= thislen;
  764. memcpy(&buf[buflen], name, thislen);
  765. tmp = dget_dlock(d->d_parent);
  766. spin_unlock(&d->d_lock);
  767. dput(d);
  768. d = tmp;
  769. /* Absolute redirect: finished */
  770. if (buf[buflen] == '/')
  771. break;
  772. buflen--;
  773. buf[buflen] = '/';
  774. }
  775. ret = kstrdup(&buf[buflen], GFP_KERNEL);
  776. out_put:
  777. dput(d);
  778. kfree(buf);
  779. out:
  780. return ret ? ret : ERR_PTR(-ENOMEM);
  781. }
  782. static int ovl_set_redirect(struct dentry *dentry, bool samedir)
  783. {
  784. int err;
  785. const char *redirect = ovl_dentry_get_redirect(dentry);
  786. if (redirect && (samedir || redirect[0] == '/'))
  787. return 0;
  788. redirect = ovl_get_redirect(dentry, samedir);
  789. if (IS_ERR(redirect))
  790. return PTR_ERR(redirect);
  791. err = ovl_check_setxattr(dentry, ovl_dentry_upper(dentry),
  792. OVL_XATTR_REDIRECT,
  793. redirect, strlen(redirect), -EXDEV);
  794. if (!err) {
  795. spin_lock(&dentry->d_lock);
  796. ovl_dentry_set_redirect(dentry, redirect);
  797. spin_unlock(&dentry->d_lock);
  798. } else {
  799. kfree(redirect);
  800. pr_warn_ratelimited("overlayfs: failed to set redirect (%i)\n",
  801. err);
  802. /* Fall back to userspace copy-up */
  803. err = -EXDEV;
  804. }
  805. return err;
  806. }
  807. static int ovl_rename(struct inode *olddir, struct dentry *old,
  808. struct inode *newdir, struct dentry *new,
  809. unsigned int flags)
  810. {
  811. int err;
  812. bool locked = false;
  813. struct dentry *old_upperdir;
  814. struct dentry *new_upperdir;
  815. struct dentry *olddentry;
  816. struct dentry *newdentry;
  817. struct dentry *trap;
  818. bool old_opaque;
  819. bool new_opaque;
  820. bool cleanup_whiteout = false;
  821. bool overwrite = !(flags & RENAME_EXCHANGE);
  822. bool is_dir = d_is_dir(old);
  823. bool new_is_dir = d_is_dir(new);
  824. bool samedir = olddir == newdir;
  825. struct dentry *opaquedir = NULL;
  826. const struct cred *old_cred = NULL;
  827. LIST_HEAD(list);
  828. err = -EINVAL;
  829. if (flags & ~(RENAME_EXCHANGE | RENAME_NOREPLACE))
  830. goto out;
  831. flags &= ~RENAME_NOREPLACE;
  832. /* Don't copy up directory trees */
  833. err = -EXDEV;
  834. if (!ovl_can_move(old))
  835. goto out;
  836. if (!overwrite && !ovl_can_move(new))
  837. goto out;
  838. if (overwrite && new_is_dir && !ovl_pure_upper(new)) {
  839. err = ovl_check_empty_dir(new, &list);
  840. if (err)
  841. goto out;
  842. }
  843. if (overwrite) {
  844. if (ovl_lower_positive(old)) {
  845. if (!ovl_dentry_is_whiteout(new)) {
  846. /* Whiteout source */
  847. flags |= RENAME_WHITEOUT;
  848. } else {
  849. /* Switch whiteouts */
  850. flags |= RENAME_EXCHANGE;
  851. }
  852. } else if (is_dir && ovl_dentry_is_whiteout(new)) {
  853. flags |= RENAME_EXCHANGE;
  854. cleanup_whiteout = true;
  855. }
  856. }
  857. err = ovl_want_write(old);
  858. if (err)
  859. goto out;
  860. err = ovl_copy_up(old);
  861. if (err)
  862. goto out_drop_write;
  863. err = ovl_copy_up(new->d_parent);
  864. if (err)
  865. goto out_drop_write;
  866. if (!overwrite) {
  867. err = ovl_copy_up(new);
  868. if (err)
  869. goto out_drop_write;
  870. } else {
  871. err = ovl_nlink_start(new, &locked);
  872. if (err)
  873. goto out_drop_write;
  874. }
  875. old_cred = ovl_override_creds(old->d_sb);
  876. if (!list_empty(&list)) {
  877. opaquedir = ovl_clear_empty(new, &list);
  878. err = PTR_ERR(opaquedir);
  879. if (IS_ERR(opaquedir)) {
  880. opaquedir = NULL;
  881. goto out_revert_creds;
  882. }
  883. }
  884. old_upperdir = ovl_dentry_upper(old->d_parent);
  885. new_upperdir = ovl_dentry_upper(new->d_parent);
  886. if (!samedir) {
  887. /*
  888. * When moving a merge dir or non-dir with copy up origin into
  889. * a new parent, we are marking the new parent dir "impure".
  890. * When ovl_iterate() iterates an "impure" upper dir, it will
  891. * lookup the origin inodes of the entries to fill d_ino.
  892. */
  893. if (ovl_type_origin(old)) {
  894. err = ovl_set_impure(new->d_parent, new_upperdir);
  895. if (err)
  896. goto out_revert_creds;
  897. }
  898. if (!overwrite && ovl_type_origin(new)) {
  899. err = ovl_set_impure(old->d_parent, old_upperdir);
  900. if (err)
  901. goto out_revert_creds;
  902. }
  903. }
  904. trap = lock_rename(new_upperdir, old_upperdir);
  905. olddentry = lookup_one_len(old->d_name.name, old_upperdir,
  906. old->d_name.len);
  907. err = PTR_ERR(olddentry);
  908. if (IS_ERR(olddentry))
  909. goto out_unlock;
  910. err = -ESTALE;
  911. if (!ovl_matches_upper(old, olddentry))
  912. goto out_dput_old;
  913. newdentry = lookup_one_len(new->d_name.name, new_upperdir,
  914. new->d_name.len);
  915. err = PTR_ERR(newdentry);
  916. if (IS_ERR(newdentry))
  917. goto out_dput_old;
  918. old_opaque = ovl_dentry_is_opaque(old);
  919. new_opaque = ovl_dentry_is_opaque(new);
  920. err = -ESTALE;
  921. if (d_inode(new) && ovl_dentry_upper(new)) {
  922. if (opaquedir) {
  923. if (newdentry != opaquedir)
  924. goto out_dput;
  925. } else {
  926. if (!ovl_matches_upper(new, newdentry))
  927. goto out_dput;
  928. }
  929. } else {
  930. if (!d_is_negative(newdentry) &&
  931. (!new_opaque || !ovl_is_whiteout(newdentry)))
  932. goto out_dput;
  933. }
  934. if (olddentry == trap)
  935. goto out_dput;
  936. if (newdentry == trap)
  937. goto out_dput;
  938. if (WARN_ON(olddentry->d_inode == newdentry->d_inode))
  939. goto out_dput;
  940. err = 0;
  941. if (is_dir) {
  942. if (ovl_type_merge_or_lower(old))
  943. err = ovl_set_redirect(old, samedir);
  944. else if (!old_opaque && ovl_type_merge(new->d_parent))
  945. err = ovl_set_opaque_xerr(old, olddentry, -EXDEV);
  946. if (err)
  947. goto out_dput;
  948. }
  949. if (!overwrite && new_is_dir) {
  950. if (ovl_type_merge_or_lower(new))
  951. err = ovl_set_redirect(new, samedir);
  952. else if (!new_opaque && ovl_type_merge(old->d_parent))
  953. err = ovl_set_opaque_xerr(new, newdentry, -EXDEV);
  954. if (err)
  955. goto out_dput;
  956. }
  957. err = ovl_do_rename(old_upperdir->d_inode, olddentry,
  958. new_upperdir->d_inode, newdentry, flags);
  959. if (err)
  960. goto out_dput;
  961. if (cleanup_whiteout)
  962. ovl_cleanup(old_upperdir->d_inode, newdentry);
  963. if (overwrite && d_inode(new)) {
  964. if (new_is_dir)
  965. clear_nlink(d_inode(new));
  966. else
  967. drop_nlink(d_inode(new));
  968. }
  969. ovl_dentry_version_inc(old->d_parent, ovl_type_origin(old) ||
  970. (!overwrite && ovl_type_origin(new)));
  971. ovl_dentry_version_inc(new->d_parent, ovl_type_origin(old) ||
  972. (d_inode(new) && ovl_type_origin(new)));
  973. out_dput:
  974. dput(newdentry);
  975. out_dput_old:
  976. dput(olddentry);
  977. out_unlock:
  978. unlock_rename(new_upperdir, old_upperdir);
  979. out_revert_creds:
  980. revert_creds(old_cred);
  981. ovl_nlink_end(new, locked);
  982. out_drop_write:
  983. ovl_drop_write(old);
  984. out:
  985. dput(opaquedir);
  986. ovl_cache_free(&list);
  987. return err;
  988. }
  989. const struct inode_operations ovl_dir_inode_operations = {
  990. .lookup = ovl_lookup,
  991. .mkdir = ovl_mkdir,
  992. .symlink = ovl_symlink,
  993. .unlink = ovl_unlink,
  994. .rmdir = ovl_rmdir,
  995. .rename = ovl_rename,
  996. .link = ovl_link,
  997. .setattr = ovl_setattr,
  998. .create = ovl_create,
  999. .mknod = ovl_mknod,
  1000. .permission = ovl_permission,
  1001. .getattr = ovl_getattr,
  1002. .listxattr = ovl_listxattr,
  1003. .get_acl = ovl_get_acl,
  1004. .update_time = ovl_update_time,
  1005. };