b24413180f560 (Greg Kroah-Hartman 2017-11-01 15:07:57 +0100 1) // SPDX-License-Identifier: GPL-2.0
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 2) /*
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 3) * linux/fs/ext2/xattr_security.c
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 4) * Handler for storing security labels as extended attributes.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 5) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 6)
f7699f2b0114f (Al Viro 2012-03-23 16:45:51 -0400 7) #include "ext2.h"
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 8) #include <linux/security.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 9) #include "xattr.h"
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 10)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 11) static int
d9a82a04033f8 (Andreas Gruenbacher 2015-10-04 19:18:51 +0200 12) ext2_xattr_security_get(const struct xattr_handler *handler,
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 13) struct dentry *unused, struct inode *inode,
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 14) const char *name, void *buffer, size_t size)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 15) {
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 16) return ext2_xattr_get(inode, EXT2_XATTR_INDEX_SECURITY, name,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 17) buffer, size);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 18) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 19)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 20) static int
d9a82a04033f8 (Andreas Gruenbacher 2015-10-04 19:18:51 +0200 21) ext2_xattr_security_set(const struct xattr_handler *handler,
e65ce2a50cf6a (Christian Brauner 2021-01-21 14:19:27 +0100 22) struct user_namespace *mnt_userns,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 23) struct dentry *unused, struct inode *inode,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 24) const char *name, const void *value,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 25) size_t size, int flags)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 26) {
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 27) return ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY, name,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 28) value, size, flags);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 29) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 30)
17cd48e488c0a (Rashika Kheria 2014-02-09 18:34:10 +0530 31) static int ext2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
17cd48e488c0a (Rashika Kheria 2014-02-09 18:34:10 +0530 32) void *fs_info)
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 33) {
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 34) const struct xattr *xattr;
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 35) int err = 0;
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 36)
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 37) for (xattr = xattr_array; xattr->name != NULL; xattr++) {
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 38) err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY,
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 39) xattr->name, xattr->value,
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 40) xattr->value_len, 0);
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 41) if (err < 0)
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 42) break;
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 43) }
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 44) return err;
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 45) }
10f47e6a1b8b2 (Stephen Smalley 2005-09-09 13:01:39 -0700 46)
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 47) int
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 48) ext2_init_security(struct inode *inode, struct inode *dir,
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 49) const struct qstr *qstr)
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 50) {
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 51) return security_inode_init_security(inode, dir, qstr,
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 52) &ext2_initxattrs, NULL);
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 53) }
9d8f13ba3f483 (Mimi Zohar 2011-06-06 15:29:25 -0400 54)
749c72efa4bd9 (Stephen Hemminger 2010-05-13 17:53:16 -0700 55) const struct xattr_handler ext2_xattr_security_handler = {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 56) .prefix = XATTR_SECURITY_PREFIX,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 57) .get = ext2_xattr_security_get,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 58) .set = ext2_xattr_security_set,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 59) };