18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include "reiserfs.h" 38c2ecf20Sopenharmony_ci#include <linux/capability.h> 48c2ecf20Sopenharmony_ci#include <linux/errno.h> 58c2ecf20Sopenharmony_ci#include <linux/fs.h> 68c2ecf20Sopenharmony_ci#include <linux/pagemap.h> 78c2ecf20Sopenharmony_ci#include <linux/xattr.h> 88c2ecf20Sopenharmony_ci#include "xattr.h" 98c2ecf20Sopenharmony_ci#include <linux/uaccess.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic int 128c2ecf20Sopenharmony_citrusted_get(const struct xattr_handler *handler, struct dentry *unused, 138c2ecf20Sopenharmony_ci struct inode *inode, const char *name, void *buffer, size_t size) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode)) 168c2ecf20Sopenharmony_ci return -EPERM; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci return reiserfs_xattr_get(inode, xattr_full_name(handler, name), 198c2ecf20Sopenharmony_ci buffer, size); 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic int 238c2ecf20Sopenharmony_citrusted_set(const struct xattr_handler *handler, struct dentry *unused, 248c2ecf20Sopenharmony_ci struct inode *inode, const char *name, const void *buffer, 258c2ecf20Sopenharmony_ci size_t size, int flags) 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode)) 288c2ecf20Sopenharmony_ci return -EPERM; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci return reiserfs_xattr_set(inode, 318c2ecf20Sopenharmony_ci xattr_full_name(handler, name), 328c2ecf20Sopenharmony_ci buffer, size, flags); 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic bool trusted_list(struct dentry *dentry) 368c2ecf20Sopenharmony_ci{ 378c2ecf20Sopenharmony_ci return capable(CAP_SYS_ADMIN) && !IS_PRIVATE(d_inode(dentry)); 388c2ecf20Sopenharmony_ci} 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ciconst struct xattr_handler reiserfs_xattr_trusted_handler = { 418c2ecf20Sopenharmony_ci .prefix = XATTR_TRUSTED_PREFIX, 428c2ecf20Sopenharmony_ci .get = trusted_get, 438c2ecf20Sopenharmony_ci .set = trusted_set, 448c2ecf20Sopenharmony_ci .list = trusted_list, 458c2ecf20Sopenharmony_ci}; 46