Option 2: security_inode_init_security function callback parameter Changelog v7: - moved the EVM xattr initialization call to security_inode_init_security, renaming evm_inode_post_init_security to evm_inode_init_security - increase size of xattr array for EVM xattr Signed-off-by: Mimi Zohar <zohar@xxxxxxxxxx> --- security/security.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-) diff --git a/security/security.c b/security/security.c index b4b997d..0480fb2 100644 --- a/security/security.c +++ b/security/security.c @@ -20,7 +20,7 @@ #include <linux/ima.h> #include <linux/evm.h> -#define MAX_LSM_XATTR 1 +#define MAX_LSM_EVM_XATTR 2 /* Boot-time LSM user choice */ static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = @@ -350,8 +350,8 @@ int security_inode_init_security(struct inode *inode, struct inode *dir, void *fs_data ) { - struct xattr new_xattrs[MAX_LSM_XATTR + 1]; - struct xattr *lsm_xattr; + struct xattr new_xattrs[MAX_LSM_EVM_XATTR + 1]; + struct xattr *lsm_xattr, *evm_xattr, *xattr; int ret; if (unlikely(IS_PRIVATE(inode))) @@ -368,11 +368,16 @@ int security_inode_init_security(struct inode *inode, struct inode *dir, &lsm_xattr->value_len); if (ret) goto out; + evm_xattr = lsm_xattr + 1; + ret = evm_inode_init_security(inode, lsm_xattr, evm_xattr); + if (ret) + goto out; ret = initxattrs(inode, new_xattrs, 0, fs_data); out: - kfree(lsm_xattr->name); - kfree(lsm_xattr->value); - + for (xattr = new_xattrs; xattr->name != NULL; xattr++) { + kfree(xattr->name); + kfree(xattr->value); + } return (ret == -EOPNOTSUPP) ? 0 : ret; } EXPORT_SYMBOL(security_inode_init_security); -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html