Merge tag 'notifications-20200601' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-starfive.git] / security / security.c
index af32d4c..2a652e5 100644 (file)
@@ -823,9 +823,14 @@ int security_vm_enough_memory_mm(struct mm_struct *mm, long pages)
        return __vm_enough_memory(mm, pages, cap_sys_admin);
 }
 
-int security_bprm_set_creds(struct linux_binprm *bprm)
+int security_bprm_creds_for_exec(struct linux_binprm *bprm)
 {
-       return call_int_hook(bprm_set_creds, 0, bprm);
+       return call_int_hook(bprm_creds_for_exec, 0, bprm);
+}
+
+int security_bprm_creds_from_file(struct linux_binprm *bprm, struct file *file)
+{
+       return call_int_hook(bprm_creds_from_file, 0, bprm, file);
 }
 
 int security_bprm_check(struct linux_binprm *bprm)
@@ -1459,6 +1464,7 @@ int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        return call_int_hook(file_ioctl, 0, file, cmd, arg);
 }
+EXPORT_SYMBOL_GPL(security_file_ioctl);
 
 static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
 {
@@ -1512,7 +1518,12 @@ int security_mmap_addr(unsigned long addr)
 int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
                            unsigned long prot)
 {
-       return call_int_hook(file_mprotect, 0, vma, reqprot, prot);
+       int ret;
+
+       ret = call_int_hook(file_mprotect, 0, vma, reqprot, prot);
+       if (ret)
+               return ret;
+       return ima_file_mprotect(vma, prot);
 }
 
 int security_file_lock(struct file *file, unsigned int cmd)
@@ -1965,8 +1976,20 @@ EXPORT_SYMBOL(security_ismaclabel);
 
 int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
 {
-       return call_int_hook(secid_to_secctx, -EOPNOTSUPP, secid, secdata,
-                               seclen);
+       struct security_hook_list *hp;
+       int rc;
+
+       /*
+        * Currently, only one LSM can implement secid_to_secctx (i.e this
+        * LSM hook is not "stackable").
+        */
+       hlist_for_each_entry(hp, &security_hook_heads.secid_to_secctx, list) {
+               rc = hp->hook.secid_to_secctx(secid, secdata, seclen);
+               if (rc != LSM_RET_DEFAULT(secid_to_secctx))
+                       return rc;
+       }
+
+       return LSM_RET_DEFAULT(secid_to_secctx);
 }
 EXPORT_SYMBOL(security_secid_to_secctx);