LSM: imbed ima calls in the security hooks
Based on discussions on LKML and LSM, where there are consecutive security_ and ima_ calls in the vfs layer, move the ima_ calls to the existing security_ hooks. Signed-off-by: Mimi Zohar <zohar@us.ibm.com> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/security.h>
|
||||
#include <linux/ima.h>
|
||||
|
||||
/* Boot-time LSM user choice */
|
||||
static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1];
|
||||
@@ -235,7 +236,12 @@ int security_bprm_set_creds(struct linux_binprm *bprm)
|
||||
|
||||
int security_bprm_check(struct linux_binprm *bprm)
|
||||
{
|
||||
return security_ops->bprm_check_security(bprm);
|
||||
int ret;
|
||||
|
||||
ret = security_ops->bprm_check_security(bprm);
|
||||
if (ret)
|
||||
return ret;
|
||||
return ima_bprm_check(bprm);
|
||||
}
|
||||
|
||||
void security_bprm_committing_creds(struct linux_binprm *bprm)
|
||||
@@ -352,12 +358,21 @@ EXPORT_SYMBOL(security_sb_parse_opts_str);
|
||||
|
||||
int security_inode_alloc(struct inode *inode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
inode->i_security = NULL;
|
||||
return security_ops->inode_alloc_security(inode);
|
||||
ret = security_ops->inode_alloc_security(inode);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = ima_inode_alloc(inode);
|
||||
if (ret)
|
||||
security_inode_free(inode);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void security_inode_free(struct inode *inode)
|
||||
{
|
||||
ima_inode_free(inode);
|
||||
security_ops->inode_free_security(inode);
|
||||
}
|
||||
|
||||
@@ -648,6 +663,8 @@ int security_file_alloc(struct file *file)
|
||||
void security_file_free(struct file *file)
|
||||
{
|
||||
security_ops->file_free_security(file);
|
||||
if (file->f_dentry)
|
||||
ima_file_free(file);
|
||||
}
|
||||
|
||||
int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
@@ -659,7 +676,12 @@ int security_file_mmap(struct file *file, unsigned long reqprot,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long addr, unsigned long addr_only)
|
||||
{
|
||||
return security_ops->file_mmap(file, reqprot, prot, flags, addr, addr_only);
|
||||
int ret;
|
||||
|
||||
ret = security_ops->file_mmap(file, reqprot, prot, flags, addr, addr_only);
|
||||
if (ret)
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
|
||||
int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
|
||||
|
Reference in New Issue
Block a user