diff options
Diffstat (limited to 'fs/ext3/xattr_security.c')
| -rw-r--r-- | fs/ext3/xattr_security.c | 36 | 
1 files changed, 20 insertions, 16 deletions
diff --git a/fs/ext3/xattr_security.c b/fs/ext3/xattr_security.c index b8d9f83aa5c..3c218b8a51d 100644 --- a/fs/ext3/xattr_security.c +++ b/fs/ext3/xattr_security.c @@ -48,28 +48,32 @@ ext3_xattr_security_set(struct dentry *dentry, const char *name,  			      name, value, size, flags);  } -int -ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir, -		   const struct qstr *qstr) +int ext3_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, qstr, &name, &value, &len); -	if (err) { -		if (err == -EOPNOTSUPP) -			return 0; -		return err; +	for (xattr = xattr_array; xattr->name != NULL; xattr++) { +		err = ext3_xattr_set_handle(handle, inode, +					    EXT3_XATTR_INDEX_SECURITY, +					    xattr->name, xattr->value, +					    xattr->value_len, 0); +		if (err < 0) +			break;  	} -	err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY, -				    name, value, len, 0); -	kfree(name); -	kfree(value);  	return err;  } +int +ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir, +		   const struct qstr *qstr) +{ +	return security_inode_init_security(inode, dir, qstr, +					    &ext3_initxattrs, handle); +} +  const struct xattr_handler ext3_xattr_security_handler = {  	.prefix	= XATTR_SECURITY_PREFIX,  	.list	= ext3_xattr_security_list,  |