diff options
Diffstat (limited to 'fs/ext4/xattr_security.c')
| -rw-r--r-- | fs/ext4/xattr_security.c | 37 | 
1 files changed, 21 insertions, 16 deletions
diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c index 9b21268e121..d2a200624af 100644 --- a/fs/ext4/xattr_security.c +++ b/fs/ext4/xattr_security.c @@ -3,7 +3,6 @@   * Handler for storing security labels as extended attributes.   */ -#include <linux/module.h>  #include <linux/string.h>  #include <linux/fs.h>  #include <linux/security.h> @@ -48,27 +47,33 @@ ext4_xattr_security_set(struct dentry *dentry, const char *name,  			      name, value, size, flags);  } -int -ext4_init_security(handle_t *handle, struct inode *inode, struct inode *dir) +static int +ext4_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; +	handle_t *handle = fs_info; +	int err = 0; -	err = security_inode_init_security(inode, dir, &name, &value, &len); -	if (err) { -		if (err == -EOPNOTSUPP) -			return 0; -		return err; +	for (xattr = xattr_array; xattr->name != NULL; xattr++) { +		err = ext4_xattr_set_handle(handle, inode, +					    EXT4_XATTR_INDEX_SECURITY, +					    xattr->name, xattr->value, +					    xattr->value_len, 0); +		if (err < 0) +			break;  	} -	err = ext4_xattr_set_handle(handle, inode, EXT4_XATTR_INDEX_SECURITY, -				    name, value, len, 0); -	kfree(name); -	kfree(value);  	return err;  } +int +ext4_init_security(handle_t *handle, struct inode *inode, struct inode *dir, +		   const struct qstr *qstr) +{ +	return security_inode_init_security(inode, dir, qstr, +					    &ext4_initxattrs, handle); +} +  const struct xattr_handler ext4_xattr_security_handler = {  	.prefix	= XATTR_SECURITY_PREFIX,  	.list	= ext4_xattr_security_list,  | 
