Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.7 77 lines 2.0 kB view raw
1/* 2 * linux/fs/ext3/xattr_security.c 3 * Handler for storing security labels as extended attributes. 4 */ 5 6#include <linux/security.h> 7#include "ext3.h" 8#include "xattr.h" 9 10static size_t 11ext3_xattr_security_list(struct dentry *dentry, char *list, size_t list_size, 12 const char *name, size_t name_len, int type) 13{ 14 const size_t prefix_len = XATTR_SECURITY_PREFIX_LEN; 15 const size_t total_len = prefix_len + name_len + 1; 16 17 18 if (list && total_len <= list_size) { 19 memcpy(list, XATTR_SECURITY_PREFIX, prefix_len); 20 memcpy(list+prefix_len, name, name_len); 21 list[prefix_len + name_len] = '\0'; 22 } 23 return total_len; 24} 25 26static int 27ext3_xattr_security_get(struct dentry *dentry, const char *name, 28 void *buffer, size_t size, int type) 29{ 30 if (strcmp(name, "") == 0) 31 return -EINVAL; 32 return ext3_xattr_get(dentry->d_inode, EXT3_XATTR_INDEX_SECURITY, 33 name, buffer, size); 34} 35 36static int 37ext3_xattr_security_set(struct dentry *dentry, const char *name, 38 const void *value, size_t size, int flags, int type) 39{ 40 if (strcmp(name, "") == 0) 41 return -EINVAL; 42 return ext3_xattr_set(dentry->d_inode, EXT3_XATTR_INDEX_SECURITY, 43 name, value, size, flags); 44} 45 46int ext3_initxattrs(struct inode *inode, const struct xattr *xattr_array, 47 void *fs_info) 48{ 49 const struct xattr *xattr; 50 handle_t *handle = fs_info; 51 int err = 0; 52 53 for (xattr = xattr_array; xattr->name != NULL; xattr++) { 54 err = ext3_xattr_set_handle(handle, inode, 55 EXT3_XATTR_INDEX_SECURITY, 56 xattr->name, xattr->value, 57 xattr->value_len, 0); 58 if (err < 0) 59 break; 60 } 61 return err; 62} 63 64int 65ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir, 66 const struct qstr *qstr) 67{ 68 return security_inode_init_security(inode, dir, qstr, 69 &ext3_initxattrs, handle); 70} 71 72const struct xattr_handler ext3_xattr_security_handler = { 73 .prefix = XATTR_SECURITY_PREFIX, 74 .list = ext3_xattr_security_list, 75 .get = ext3_xattr_security_get, 76 .set = ext3_xattr_security_set, 77};