inode.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * fs/kernfs/inode.c - kernfs inode implementation
  4. *
  5. * Copyright (c) 2001-3 Patrick Mochel
  6. * Copyright (c) 2007 SUSE Linux Products GmbH
  7. * Copyright (c) 2007, 2013 Tejun Heo <tj@kernel.org>
  8. */
  9. #include <linux/pagemap.h>
  10. #include <linux/backing-dev.h>
  11. #include <linux/capability.h>
  12. #include <linux/errno.h>
  13. #include <linux/slab.h>
  14. #include <linux/xattr.h>
  15. #include <linux/security.h>
  16. #include "kernfs-internal.h"
  17. static const struct inode_operations kernfs_iops = {
  18. .permission = kernfs_iop_permission,
  19. .setattr = kernfs_iop_setattr,
  20. .getattr = kernfs_iop_getattr,
  21. .listxattr = kernfs_iop_listxattr,
  22. };
  23. static struct kernfs_iattrs *__kernfs_iattrs(struct kernfs_node *kn, bool alloc)
  24. {
  25. struct kernfs_iattrs *ret __free(kfree) = NULL;
  26. struct kernfs_iattrs *attr;
  27. attr = READ_ONCE(kn->iattr);
  28. if (attr || !alloc)
  29. return attr;
  30. ret = kmem_cache_zalloc(kernfs_iattrs_cache, GFP_KERNEL);
  31. if (!ret)
  32. return NULL;
  33. /* assign default attributes */
  34. ret->ia_uid = GLOBAL_ROOT_UID;
  35. ret->ia_gid = GLOBAL_ROOT_GID;
  36. ktime_get_real_ts64(&ret->ia_atime);
  37. ret->ia_mtime = ret->ia_atime;
  38. ret->ia_ctime = ret->ia_atime;
  39. simple_xattrs_init(&ret->xattrs);
  40. atomic_set(&ret->nr_user_xattrs, 0);
  41. atomic_set(&ret->user_xattr_size, 0);
  42. /* If someone raced us, recognize it. */
  43. if (!try_cmpxchg(&kn->iattr, &attr, ret))
  44. return READ_ONCE(kn->iattr);
  45. return no_free_ptr(ret);
  46. }
  47. static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn)
  48. {
  49. return __kernfs_iattrs(kn, true);
  50. }
  51. static struct kernfs_iattrs *kernfs_iattrs_noalloc(struct kernfs_node *kn)
  52. {
  53. return __kernfs_iattrs(kn, false);
  54. }
  55. int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr)
  56. {
  57. struct kernfs_iattrs *attrs;
  58. unsigned int ia_valid = iattr->ia_valid;
  59. attrs = kernfs_iattrs(kn);
  60. if (!attrs)
  61. return -ENOMEM;
  62. if (ia_valid & ATTR_UID)
  63. attrs->ia_uid = iattr->ia_uid;
  64. if (ia_valid & ATTR_GID)
  65. attrs->ia_gid = iattr->ia_gid;
  66. if (ia_valid & ATTR_ATIME)
  67. attrs->ia_atime = iattr->ia_atime;
  68. if (ia_valid & ATTR_MTIME)
  69. attrs->ia_mtime = iattr->ia_mtime;
  70. if (ia_valid & ATTR_CTIME)
  71. attrs->ia_ctime = iattr->ia_ctime;
  72. if (ia_valid & ATTR_MODE)
  73. kn->mode = iattr->ia_mode;
  74. return 0;
  75. }
  76. /**
  77. * kernfs_setattr - set iattr on a node
  78. * @kn: target node
  79. * @iattr: iattr to set
  80. *
  81. * Return: %0 on success, -errno on failure.
  82. */
  83. int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr)
  84. {
  85. int ret;
  86. struct kernfs_root *root = kernfs_root(kn);
  87. down_write(&root->kernfs_iattr_rwsem);
  88. ret = __kernfs_setattr(kn, iattr);
  89. up_write(&root->kernfs_iattr_rwsem);
  90. return ret;
  91. }
  92. int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
  93. struct iattr *iattr)
  94. {
  95. struct inode *inode = d_inode(dentry);
  96. struct kernfs_node *kn = inode->i_private;
  97. struct kernfs_root *root;
  98. int error;
  99. if (!kn)
  100. return -EINVAL;
  101. root = kernfs_root(kn);
  102. down_write(&root->kernfs_iattr_rwsem);
  103. error = setattr_prepare(&nop_mnt_idmap, dentry, iattr);
  104. if (error)
  105. goto out;
  106. error = __kernfs_setattr(kn, iattr);
  107. if (error)
  108. goto out;
  109. /* this ignores size changes */
  110. setattr_copy(&nop_mnt_idmap, inode, iattr);
  111. out:
  112. up_write(&root->kernfs_iattr_rwsem);
  113. return error;
  114. }
  115. ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size)
  116. {
  117. struct kernfs_node *kn = kernfs_dentry_node(dentry);
  118. struct kernfs_iattrs *attrs;
  119. attrs = kernfs_iattrs(kn);
  120. if (!attrs)
  121. return -ENOMEM;
  122. return simple_xattr_list(d_inode(dentry), &attrs->xattrs, buf, size);
  123. }
  124. static inline void set_default_inode_attr(struct inode *inode, umode_t mode)
  125. {
  126. inode->i_mode = mode;
  127. simple_inode_init_ts(inode);
  128. }
  129. static inline void set_inode_attr(struct inode *inode,
  130. struct kernfs_iattrs *attrs)
  131. {
  132. inode->i_uid = attrs->ia_uid;
  133. inode->i_gid = attrs->ia_gid;
  134. inode_set_atime_to_ts(inode, attrs->ia_atime);
  135. inode_set_mtime_to_ts(inode, attrs->ia_mtime);
  136. inode_set_ctime_to_ts(inode, attrs->ia_ctime);
  137. }
  138. static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode)
  139. {
  140. struct kernfs_iattrs *attrs;
  141. inode->i_mode = kn->mode;
  142. attrs = kernfs_iattrs_noalloc(kn);
  143. if (attrs)
  144. /*
  145. * kernfs_node has non-default attributes get them from
  146. * persistent copy in kernfs_node.
  147. */
  148. set_inode_attr(inode, attrs);
  149. if (kernfs_type(kn) == KERNFS_DIR)
  150. set_nlink(inode, kn->dir.subdirs + 2);
  151. }
  152. int kernfs_iop_getattr(struct mnt_idmap *idmap,
  153. const struct path *path, struct kstat *stat,
  154. u32 request_mask, unsigned int query_flags)
  155. {
  156. struct inode *inode = d_inode(path->dentry);
  157. struct kernfs_node *kn = inode->i_private;
  158. struct kernfs_root *root = kernfs_root(kn);
  159. down_read(&root->kernfs_iattr_rwsem);
  160. kernfs_refresh_inode(kn, inode);
  161. generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat);
  162. up_read(&root->kernfs_iattr_rwsem);
  163. return 0;
  164. }
  165. static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode)
  166. {
  167. kernfs_get(kn);
  168. inode->i_private = kn;
  169. inode->i_mapping->a_ops = &ram_aops;
  170. inode->i_op = &kernfs_iops;
  171. inode->i_generation = kernfs_gen(kn);
  172. set_default_inode_attr(inode, kn->mode);
  173. kernfs_refresh_inode(kn, inode);
  174. /* initialize inode according to type */
  175. switch (kernfs_type(kn)) {
  176. case KERNFS_DIR:
  177. inode->i_op = &kernfs_dir_iops;
  178. inode->i_fop = &kernfs_dir_fops;
  179. if (kn->flags & KERNFS_EMPTY_DIR)
  180. make_empty_dir_inode(inode);
  181. break;
  182. case KERNFS_FILE:
  183. inode->i_size = kn->attr.size;
  184. inode->i_fop = &kernfs_file_fops;
  185. break;
  186. case KERNFS_LINK:
  187. inode->i_op = &kernfs_symlink_iops;
  188. break;
  189. default:
  190. BUG();
  191. }
  192. unlock_new_inode(inode);
  193. }
  194. /**
  195. * kernfs_get_inode - get inode for kernfs_node
  196. * @sb: super block
  197. * @kn: kernfs_node to allocate inode for
  198. *
  199. * Get inode for @kn. If such inode doesn't exist, a new inode is
  200. * allocated and basics are initialized. New inode is returned
  201. * locked.
  202. *
  203. * Locking:
  204. * Kernel thread context (may sleep).
  205. *
  206. * Return:
  207. * Pointer to allocated inode on success, %NULL on failure.
  208. */
  209. struct inode *kernfs_get_inode(struct super_block *sb, struct kernfs_node *kn)
  210. {
  211. struct inode *inode;
  212. inode = iget_locked(sb, kernfs_ino(kn));
  213. if (inode && (inode_state_read_once(inode) & I_NEW))
  214. kernfs_init_inode(kn, inode);
  215. return inode;
  216. }
  217. /*
  218. * The kernfs_node serves as both an inode and a directory entry for
  219. * kernfs. To prevent the kernfs inode numbers from being freed
  220. * prematurely we take a reference to kernfs_node from the kernfs inode. A
  221. * super_operations.evict_inode() implementation is needed to drop that
  222. * reference upon inode destruction.
  223. */
  224. void kernfs_evict_inode(struct inode *inode)
  225. {
  226. struct kernfs_node *kn = inode->i_private;
  227. truncate_inode_pages_final(&inode->i_data);
  228. clear_inode(inode);
  229. kernfs_put(kn);
  230. }
  231. int kernfs_iop_permission(struct mnt_idmap *idmap,
  232. struct inode *inode, int mask)
  233. {
  234. struct kernfs_node *kn;
  235. struct kernfs_root *root;
  236. int ret;
  237. if (mask & MAY_NOT_BLOCK)
  238. return -ECHILD;
  239. kn = inode->i_private;
  240. root = kernfs_root(kn);
  241. down_read(&root->kernfs_iattr_rwsem);
  242. kernfs_refresh_inode(kn, inode);
  243. ret = generic_permission(&nop_mnt_idmap, inode, mask);
  244. up_read(&root->kernfs_iattr_rwsem);
  245. return ret;
  246. }
  247. int kernfs_xattr_get(struct kernfs_node *kn, const char *name,
  248. void *value, size_t size)
  249. {
  250. struct kernfs_iattrs *attrs = kernfs_iattrs_noalloc(kn);
  251. if (!attrs)
  252. return -ENODATA;
  253. return simple_xattr_get(&attrs->xattrs, name, value, size);
  254. }
  255. int kernfs_xattr_set(struct kernfs_node *kn, const char *name,
  256. const void *value, size_t size, int flags)
  257. {
  258. struct simple_xattr *old_xattr;
  259. struct kernfs_iattrs *attrs;
  260. attrs = kernfs_iattrs(kn);
  261. if (!attrs)
  262. return -ENOMEM;
  263. old_xattr = simple_xattr_set(&attrs->xattrs, name, value, size, flags);
  264. if (IS_ERR(old_xattr))
  265. return PTR_ERR(old_xattr);
  266. simple_xattr_free(old_xattr);
  267. return 0;
  268. }
  269. static int kernfs_vfs_xattr_get(const struct xattr_handler *handler,
  270. struct dentry *unused, struct inode *inode,
  271. const char *suffix, void *value, size_t size)
  272. {
  273. const char *name = xattr_full_name(handler, suffix);
  274. struct kernfs_node *kn = inode->i_private;
  275. return kernfs_xattr_get(kn, name, value, size);
  276. }
  277. static int kernfs_vfs_xattr_set(const struct xattr_handler *handler,
  278. struct mnt_idmap *idmap,
  279. struct dentry *unused, struct inode *inode,
  280. const char *suffix, const void *value,
  281. size_t size, int flags)
  282. {
  283. const char *name = xattr_full_name(handler, suffix);
  284. struct kernfs_node *kn = inode->i_private;
  285. return kernfs_xattr_set(kn, name, value, size, flags);
  286. }
  287. static int kernfs_vfs_user_xattr_add(struct kernfs_node *kn,
  288. const char *full_name,
  289. struct simple_xattrs *xattrs,
  290. const void *value, size_t size, int flags)
  291. {
  292. struct kernfs_iattrs *attr = kernfs_iattrs_noalloc(kn);
  293. atomic_t *sz = &attr->user_xattr_size;
  294. atomic_t *nr = &attr->nr_user_xattrs;
  295. struct simple_xattr *old_xattr;
  296. int ret;
  297. if (atomic_inc_return(nr) > KERNFS_MAX_USER_XATTRS) {
  298. ret = -ENOSPC;
  299. goto dec_count_out;
  300. }
  301. if (atomic_add_return(size, sz) > KERNFS_USER_XATTR_SIZE_LIMIT) {
  302. ret = -ENOSPC;
  303. goto dec_size_out;
  304. }
  305. old_xattr = simple_xattr_set(xattrs, full_name, value, size, flags);
  306. if (!old_xattr)
  307. return 0;
  308. if (IS_ERR(old_xattr)) {
  309. ret = PTR_ERR(old_xattr);
  310. goto dec_size_out;
  311. }
  312. ret = 0;
  313. size = old_xattr->size;
  314. simple_xattr_free(old_xattr);
  315. dec_size_out:
  316. atomic_sub(size, sz);
  317. dec_count_out:
  318. atomic_dec(nr);
  319. return ret;
  320. }
  321. static int kernfs_vfs_user_xattr_rm(struct kernfs_node *kn,
  322. const char *full_name,
  323. struct simple_xattrs *xattrs,
  324. const void *value, size_t size, int flags)
  325. {
  326. struct kernfs_iattrs *attr = kernfs_iattrs_noalloc(kn);
  327. atomic_t *sz = &attr->user_xattr_size;
  328. atomic_t *nr = &attr->nr_user_xattrs;
  329. struct simple_xattr *old_xattr;
  330. old_xattr = simple_xattr_set(xattrs, full_name, value, size, flags);
  331. if (!old_xattr)
  332. return 0;
  333. if (IS_ERR(old_xattr))
  334. return PTR_ERR(old_xattr);
  335. atomic_sub(old_xattr->size, sz);
  336. atomic_dec(nr);
  337. simple_xattr_free(old_xattr);
  338. return 0;
  339. }
  340. static int kernfs_vfs_user_xattr_set(const struct xattr_handler *handler,
  341. struct mnt_idmap *idmap,
  342. struct dentry *unused, struct inode *inode,
  343. const char *suffix, const void *value,
  344. size_t size, int flags)
  345. {
  346. const char *full_name = xattr_full_name(handler, suffix);
  347. struct kernfs_node *kn = inode->i_private;
  348. struct kernfs_iattrs *attrs;
  349. if (!(kernfs_root(kn)->flags & KERNFS_ROOT_SUPPORT_USER_XATTR))
  350. return -EOPNOTSUPP;
  351. attrs = kernfs_iattrs(kn);
  352. if (!attrs)
  353. return -ENOMEM;
  354. if (value)
  355. return kernfs_vfs_user_xattr_add(kn, full_name, &attrs->xattrs,
  356. value, size, flags);
  357. else
  358. return kernfs_vfs_user_xattr_rm(kn, full_name, &attrs->xattrs,
  359. value, size, flags);
  360. }
  361. static const struct xattr_handler kernfs_trusted_xattr_handler = {
  362. .prefix = XATTR_TRUSTED_PREFIX,
  363. .get = kernfs_vfs_xattr_get,
  364. .set = kernfs_vfs_xattr_set,
  365. };
  366. static const struct xattr_handler kernfs_security_xattr_handler = {
  367. .prefix = XATTR_SECURITY_PREFIX,
  368. .get = kernfs_vfs_xattr_get,
  369. .set = kernfs_vfs_xattr_set,
  370. };
  371. static const struct xattr_handler kernfs_user_xattr_handler = {
  372. .prefix = XATTR_USER_PREFIX,
  373. .get = kernfs_vfs_xattr_get,
  374. .set = kernfs_vfs_user_xattr_set,
  375. };
  376. const struct xattr_handler * const kernfs_xattr_handlers[] = {
  377. &kernfs_trusted_xattr_handler,
  378. &kernfs_security_xattr_handler,
  379. &kernfs_user_xattr_handler,
  380. NULL
  381. };