]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/exec.c
integrity: IMA hooks
[net-next-2.6.git] / fs / exec.c
index 02d2e120542d76ca26ee233e638749e53bc227f0..9c789a525cc419fbadad01e192821878f57d9d14 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -45,6 +45,7 @@
 #include <linux/proc_fs.h>
 #include <linux/mount.h>
 #include <linux/security.h>
+#include <linux/ima.h>
 #include <linux/syscalls.h>
 #include <linux/tsacct_kern.h>
 #include <linux/cn_proc.h>
@@ -128,6 +129,9 @@ asmlinkage long sys_uselib(const char __user * library)
                goto exit;
 
        error = vfs_permission(&nd, MAY_READ | MAY_EXEC | MAY_OPEN);
+       if (error)
+               goto exit;
+       error = ima_path_check(&nd.path, MAY_READ | MAY_EXEC | MAY_OPEN);
        if (error)
                goto exit;
 
@@ -681,6 +685,9 @@ struct file *open_exec(const char *name)
                goto out_path_put;
 
        err = vfs_permission(&nd, MAY_EXEC | MAY_OPEN);
+       if (err)
+               goto out_path_put;
+       err = ima_path_check(&nd.path, MAY_EXEC | MAY_OPEN);
        if (err)
                goto out_path_put;
 
@@ -1207,6 +1214,9 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
        }
 #endif
        retval = security_bprm_check(bprm);
+       if (retval)
+               return retval;
+       retval = ima_bprm_check(bprm);
        if (retval)
                return retval;