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_user.c
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 4) * Handler for extended user attributes.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 5) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 6) * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 7) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 8)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 9) #include <linux/init.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 10) #include <linux/string.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 11) #include "ext2.h"
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 12) #include "xattr.h"
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 13)
764a5c6b1fa43 (Andreas Gruenbacher 2015-12-02 14:44:43 +0100 14) static bool
764a5c6b1fa43 (Andreas Gruenbacher 2015-12-02 14:44:43 +0100 15) ext2_xattr_user_list(struct dentry *dentry)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 16) {
764a5c6b1fa43 (Andreas Gruenbacher 2015-12-02 14:44:43 +0100 17) return test_opt(dentry->d_sb, XATTR_USER);
^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_user_get(const struct xattr_handler *handler,
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 22) struct dentry *unused, struct inode *inode,
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 23) const char *name, void *buffer, size_t size)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 24) {
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 25) if (!test_opt(inode->i_sb, XATTR_USER))
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 26) return -EOPNOTSUPP;
b296821a7c42f (Al Viro 2016-04-10 20:48:24 -0400 27) return ext2_xattr_get(inode, EXT2_XATTR_INDEX_USER,
431547b3c4533 (Christoph Hellwig 2009-11-13 09:52:56 +0000 28) name, buffer, size);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 29) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 30)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 31) static int
d9a82a04033f8 (Andreas Gruenbacher 2015-10-04 19:18:51 +0200 32) ext2_xattr_user_set(const struct xattr_handler *handler,
e65ce2a50cf6a (Christian Brauner 2021-01-21 14:19:27 +0100 33) struct user_namespace *mnt_userns,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 34) struct dentry *unused, struct inode *inode,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 35) const char *name, const void *value,
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 36) size_t size, int flags)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 37) {
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 38) if (!test_opt(inode->i_sb, XATTR_USER))
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 39) return -EOPNOTSUPP;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 40)
5930122683dff (Al Viro 2016-05-27 10:19:30 -0400 41) return ext2_xattr_set(inode, EXT2_XATTR_INDEX_USER,
431547b3c4533 (Christoph Hellwig 2009-11-13 09:52:56 +0000 42) name, value, size, flags);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 43) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 44)
749c72efa4bd9 (Stephen Hemminger 2010-05-13 17:53:16 -0700 45) const struct xattr_handler ext2_xattr_user_handler = {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 46) .prefix = XATTR_USER_PREFIX,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 47) .list = ext2_xattr_user_list,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 48) .get = ext2_xattr_user_get,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 49) .set = ext2_xattr_user_set,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 50) };