diff options
Diffstat (limited to 'fs/ext2/xattr_security.c')
| -rw-r--r-- | fs/ext2/xattr_security.c | 34 | 
1 files changed, 18 insertions, 16 deletions
diff --git a/fs/ext2/xattr_security.c b/fs/ext2/xattr_security.c index 5d979b4347b..c922adc8ef4 100644 --- a/fs/ext2/xattr_security.c +++ b/fs/ext2/xattr_security.c @@ -46,28 +46,30 @@ ext2_xattr_security_set(struct dentry *dentry, const char *name,  			      value, size, flags);  } -int -ext2_init_security(struct inode *inode, struct inode *dir, -		   const struct qstr *qstr) +int ext2_initxattrs(struct inode *inode, const struct xattr *xattr_array, +		    void *fs_info)  { -	int err; -	size_t len; -	void *value; -	char *name; +	const struct xattr *xattr; +	int err = 0; -	err = security_inode_init_security(inode, dir, qstr, &name, &value, &len); -	if (err) { -		if (err == -EOPNOTSUPP) -			return 0; -		return err; +	for (xattr = xattr_array; xattr->name != NULL; xattr++) { +		err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY, +				     xattr->name, xattr->value, +				     xattr->value_len, 0); +		if (err < 0) +			break;  	} -	err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY, -			     name, value, len, 0); -	kfree(name); -	kfree(value);  	return err;  } +int +ext2_init_security(struct inode *inode, struct inode *dir, +		   const struct qstr *qstr) +{ +	return security_inode_init_security(inode, dir, qstr, +					    &ext2_initxattrs, NULL); +} +  const struct xattr_handler ext2_xattr_security_handler = {  	.prefix	= XATTR_SECURITY_PREFIX,  	.list	= ext2_xattr_security_list,  |