1 #include <linux/reiserfs_fs.h> 2 #include <linux/errno.h> 3 #include <linux/fs.h> 4 #include <linux/pagemap.h> 5 #include <linux/xattr.h> 6 #include <linux/reiserfs_xattr.h> 7 #include <asm/uaccess.h> 8 9 static int 10 security_get(struct inode *inode, const char *name, void *buffer, size_t size) 11 { 12 if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX)) 13 return -EINVAL; 14 15 if (IS_PRIVATE(inode)) 16 return -EPERM; 17 18 return reiserfs_xattr_get(inode, name, buffer, size); 19 } 20 21 static int 22 security_set(struct inode *inode, const char *name, const void *buffer, 23 size_t size, int flags) 24 { 25 if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX)) 26 return -EINVAL; 27 28 if (IS_PRIVATE(inode)) 29 return -EPERM; 30 31 return reiserfs_xattr_set(inode, name, buffer, size, flags); 32 } 33 34 static size_t security_list(struct inode *inode, char *list, size_t list_len, 35 const char *name, size_t namelen) 36 { 37 const size_t len = namelen + 1; 38 39 if (IS_PRIVATE(inode)) 40 return 0; 41 42 if (list && len <= list_len) { 43 memcpy(list, name, namelen); 44 list[namelen] = '\0'; 45 } 46 47 return len; 48 } 49 50 struct xattr_handler reiserfs_xattr_security_handler = { 51 .prefix = XATTR_SECURITY_PREFIX, 52 .get = security_get, 53 .set = security_set, 54 .list = security_list, 55 }; 56