Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.6-rc7 63 lines 1.6 kB view raw
1/* 2 * linux/fs/ext4/xattr_security.c 3 * Handler for storing security labels as extended attributes. 4 */ 5 6#include <linux/string.h> 7#include <linux/fs.h> 8#include <linux/security.h> 9#include <linux/slab.h> 10#include "ext4_jbd2.h" 11#include "ext4.h" 12#include "xattr.h" 13 14static int 15ext4_xattr_security_get(const struct xattr_handler *handler, 16 struct dentry *dentry, const char *name, 17 void *buffer, size_t size) 18{ 19 return ext4_xattr_get(d_inode(dentry), EXT4_XATTR_INDEX_SECURITY, 20 name, buffer, size); 21} 22 23static int 24ext4_xattr_security_set(const struct xattr_handler *handler, 25 struct dentry *dentry, const char *name, 26 const void *value, size_t size, int flags) 27{ 28 return ext4_xattr_set(d_inode(dentry), EXT4_XATTR_INDEX_SECURITY, 29 name, value, size, flags); 30} 31 32static int 33ext4_initxattrs(struct inode *inode, const struct xattr *xattr_array, 34 void *fs_info) 35{ 36 const struct xattr *xattr; 37 handle_t *handle = fs_info; 38 int err = 0; 39 40 for (xattr = xattr_array; xattr->name != NULL; xattr++) { 41 err = ext4_xattr_set_handle(handle, inode, 42 EXT4_XATTR_INDEX_SECURITY, 43 xattr->name, xattr->value, 44 xattr->value_len, 0); 45 if (err < 0) 46 break; 47 } 48 return err; 49} 50 51int 52ext4_init_security(handle_t *handle, struct inode *inode, struct inode *dir, 53 const struct qstr *qstr) 54{ 55 return security_inode_init_security(inode, dir, qstr, 56 &ext4_initxattrs, handle); 57} 58 59const struct xattr_handler ext4_xattr_security_handler = { 60 .prefix = XATTR_SECURITY_PREFIX, 61 .get = ext4_xattr_security_get, 62 .set = ext4_xattr_security_set, 63};