lsm: use default hook return value in call_int_hook()
authorOndrej Mosnacek <omosnace@redhat.com>
Tue, 30 Jan 2024 12:56:59 +0000 (13:56 +0100)
committerPaul Moore <paul@paul-moore.com>
Thu, 22 Feb 2024 21:52:22 +0000 (16:52 -0500)
Change the definition of call_int_hook() to treat LSM_RET_DEFAULT(...)
as the "continue" value instead of 0. To further simplify this macro,
also drop the IRC argument and replace it with LSM_RET_DEFAULT(...).

After this the macro can be used in a couple more hooks, where similar
logic is currently open-coded. At the same time, some other existing
call_int_hook() users now need to be open-coded, but overall it's still
a net simplification.

There should be no functional change resulting from this patch.

Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
Reviewed-by: Casey Schaufler <casey@schaufler-ca.com>
[PM: merge fuzz due to other hook changes, tweaks from list discussion]
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/security.c

index c31e45da672b481907503e1a8115d8c510d828bd..4cb832b00c407b8063dccbe4f9fa4e6589962216 100644 (file)
@@ -855,14 +855,14 @@ out:
                        P->hook.FUNC(__VA_ARGS__);              \
        } while (0)
 
-#define call_int_hook(FUNC, IRC, ...) ({                       \
-       int RC = IRC;                                           \
+#define call_int_hook(FUNC, ...) ({                            \
+       int RC = LSM_RET_DEFAULT(FUNC);                         \
        do {                                                    \
                struct security_hook_list *P;                   \
                                                                \
                hlist_for_each_entry(P, &security_hook_heads.FUNC, list) { \
                        RC = P->hook.FUNC(__VA_ARGS__);         \
-                       if (RC != 0)                            \
+                       if (RC != LSM_RET_DEFAULT(FUNC))        \
                                break;                          \
                }                                               \
        } while (0);                                            \
@@ -881,7 +881,7 @@ out:
  */
 int security_binder_set_context_mgr(const struct cred *mgr)
 {
-       return call_int_hook(binder_set_context_mgr, 0, mgr);
+       return call_int_hook(binder_set_context_mgr, mgr);
 }
 
 /**
@@ -896,7 +896,7 @@ int security_binder_set_context_mgr(const struct cred *mgr)
 int security_binder_transaction(const struct cred *from,
                                const struct cred *to)
 {
-       return call_int_hook(binder_transaction, 0, from, to);
+       return call_int_hook(binder_transaction, from, to);
 }
 
 /**
@@ -911,7 +911,7 @@ int security_binder_transaction(const struct cred *from,
 int security_binder_transfer_binder(const struct cred *from,
                                    const struct cred *to)
 {
-       return call_int_hook(binder_transfer_binder, 0, from, to);
+       return call_int_hook(binder_transfer_binder, from, to);
 }
 
 /**
@@ -927,7 +927,7 @@ int security_binder_transfer_binder(const struct cred *from,
 int security_binder_transfer_file(const struct cred *from,
                                  const struct cred *to, const struct file *file)
 {
-       return call_int_hook(binder_transfer_file, 0, from, to, file);
+       return call_int_hook(binder_transfer_file, from, to, file);
 }
 
 /**
@@ -946,7 +946,7 @@ int security_binder_transfer_file(const struct cred *from,
  */
 int security_ptrace_access_check(struct task_struct *child, unsigned int mode)
 {
-       return call_int_hook(ptrace_access_check, 0, child, mode);
+       return call_int_hook(ptrace_access_check, child, mode);
 }
 
 /**
@@ -961,7 +961,7 @@ int security_ptrace_access_check(struct task_struct *child, unsigned int mode)
  */
 int security_ptrace_traceme(struct task_struct *parent)
 {
-       return call_int_hook(ptrace_traceme, 0, parent);
+       return call_int_hook(ptrace_traceme, parent);
 }
 
 /**
@@ -983,8 +983,7 @@ int security_capget(const struct task_struct *target,
                    kernel_cap_t *inheritable,
                    kernel_cap_t *permitted)
 {
-       return call_int_hook(capget, 0, target,
-                            effective, inheritable, permitted);
+       return call_int_hook(capget, target, effective, inheritable, permitted);
 }
 
 /**
@@ -1005,8 +1004,8 @@ int security_capset(struct cred *new, const struct cred *old,
                    const kernel_cap_t *inheritable,
                    const kernel_cap_t *permitted)
 {
-       return call_int_hook(capset, 0, new, old,
-                            effective, inheritable, permitted);
+       return call_int_hook(capset, new, old, effective, inheritable,
+                            permitted);
 }
 
 /**
@@ -1027,7 +1026,7 @@ int security_capable(const struct cred *cred,
                     int cap,
                     unsigned int opts)
 {
-       return call_int_hook(capable, 0, cred, ns, cap, opts);
+       return call_int_hook(capable, cred, ns, cap, opts);
 }
 
 /**
@@ -1043,7 +1042,7 @@ int security_capable(const struct cred *cred,
  */
 int security_quotactl(int cmds, int type, int id, const struct super_block *sb)
 {
-       return call_int_hook(quotactl, 0, cmds, type, id, sb);
+       return call_int_hook(quotactl, cmds, type, id, sb);
 }
 
 /**
@@ -1056,7 +1055,7 @@ int security_quotactl(int cmds, int type, int id, const struct super_block *sb)
  */
 int security_quota_on(struct dentry *dentry)
 {
-       return call_int_hook(quota_on, 0, dentry);
+       return call_int_hook(quota_on, dentry);
 }
 
 /**
@@ -1071,7 +1070,7 @@ int security_quota_on(struct dentry *dentry)
  */
 int security_syslog(int type)
 {
-       return call_int_hook(syslog, 0, type);
+       return call_int_hook(syslog, type);
 }
 
 /**
@@ -1086,7 +1085,7 @@ int security_syslog(int type)
  */
 int security_settime64(const struct timespec64 *ts, const struct timezone *tz)
 {
-       return call_int_hook(settime, 0, ts, tz);
+       return call_int_hook(settime, ts, tz);
 }
 
 /**
@@ -1141,7 +1140,7 @@ int security_vm_enough_memory_mm(struct mm_struct *mm, long pages)
  */
 int security_bprm_creds_for_exec(struct linux_binprm *bprm)
 {
-       return call_int_hook(bprm_creds_for_exec, 0, bprm);
+       return call_int_hook(bprm_creds_for_exec, bprm);
 }
 
 /**
@@ -1165,7 +1164,7 @@ int security_bprm_creds_for_exec(struct linux_binprm *bprm)
  */
 int security_bprm_creds_from_file(struct linux_binprm *bprm, const struct file *file)
 {
-       return call_int_hook(bprm_creds_from_file, 0, bprm, file);
+       return call_int_hook(bprm_creds_from_file, bprm, file);
 }
 
 /**
@@ -1182,7 +1181,7 @@ int security_bprm_creds_from_file(struct linux_binprm *bprm, const struct file *
  */
 int security_bprm_check(struct linux_binprm *bprm)
 {
-       return call_int_hook(bprm_check_security, 0, bprm);
+       return call_int_hook(bprm_check_security, bprm);
 }
 
 /**
@@ -1229,7 +1228,7 @@ void security_bprm_committed_creds(const struct linux_binprm *bprm)
  */
 int security_fs_context_submount(struct fs_context *fc, struct super_block *reference)
 {
-       return call_int_hook(fs_context_submount, 0, fc, reference);
+       return call_int_hook(fs_context_submount, fc, reference);
 }
 
 /**
@@ -1245,7 +1244,7 @@ int security_fs_context_submount(struct fs_context *fc, struct super_block *refe
  */
 int security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc)
 {
-       return call_int_hook(fs_context_dup, 0, fc, src_fc);
+       return call_int_hook(fs_context_dup, fc, src_fc);
 }
 
 /**
@@ -1294,7 +1293,7 @@ int security_sb_alloc(struct super_block *sb)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(sb_alloc_security, 0, sb);
+       rc = call_int_hook(sb_alloc_security, sb);
        if (unlikely(rc))
                security_sb_free(sb);
        return rc;
@@ -1352,7 +1351,7 @@ EXPORT_SYMBOL(security_free_mnt_opts);
  */
 int security_sb_eat_lsm_opts(char *options, void **mnt_opts)
 {
-       return call_int_hook(sb_eat_lsm_opts, 0, options, mnt_opts);
+       return call_int_hook(sb_eat_lsm_opts, options, mnt_opts);
 }
 EXPORT_SYMBOL(security_sb_eat_lsm_opts);
 
@@ -1369,7 +1368,7 @@ EXPORT_SYMBOL(security_sb_eat_lsm_opts);
 int security_sb_mnt_opts_compat(struct super_block *sb,
                                void *mnt_opts)
 {
-       return call_int_hook(sb_mnt_opts_compat, 0, sb, mnt_opts);
+       return call_int_hook(sb_mnt_opts_compat, sb, mnt_opts);
 }
 EXPORT_SYMBOL(security_sb_mnt_opts_compat);
 
@@ -1386,7 +1385,7 @@ EXPORT_SYMBOL(security_sb_mnt_opts_compat);
 int security_sb_remount(struct super_block *sb,
                        void *mnt_opts)
 {
-       return call_int_hook(sb_remount, 0, sb, mnt_opts);
+       return call_int_hook(sb_remount, sb, mnt_opts);
 }
 EXPORT_SYMBOL(security_sb_remount);
 
@@ -1400,7 +1399,7 @@ EXPORT_SYMBOL(security_sb_remount);
  */
 int security_sb_kern_mount(const struct super_block *sb)
 {
-       return call_int_hook(sb_kern_mount, 0, sb);
+       return call_int_hook(sb_kern_mount, sb);
 }
 
 /**
@@ -1414,7 +1413,7 @@ int security_sb_kern_mount(const struct super_block *sb)
  */
 int security_sb_show_options(struct seq_file *m, struct super_block *sb)
 {
-       return call_int_hook(sb_show_options, 0, m, sb);
+       return call_int_hook(sb_show_options, m, sb);
 }
 
 /**
@@ -1428,7 +1427,7 @@ int security_sb_show_options(struct seq_file *m, struct super_block *sb)
  */
 int security_sb_statfs(struct dentry *dentry)
 {
-       return call_int_hook(sb_statfs, 0, dentry);
+       return call_int_hook(sb_statfs, dentry);
 }
 
 /**
@@ -1451,7 +1450,7 @@ int security_sb_statfs(struct dentry *dentry)
 int security_sb_mount(const char *dev_name, const struct path *path,
                      const char *type, unsigned long flags, void *data)
 {
-       return call_int_hook(sb_mount, 0, dev_name, path, type, flags, data);
+       return call_int_hook(sb_mount, dev_name, path, type, flags, data);
 }
 
 /**
@@ -1465,7 +1464,7 @@ int security_sb_mount(const char *dev_name, const struct path *path,
  */
 int security_sb_umount(struct vfsmount *mnt, int flags)
 {
-       return call_int_hook(sb_umount, 0, mnt, flags);
+       return call_int_hook(sb_umount, mnt, flags);
 }
 
 /**
@@ -1480,7 +1479,7 @@ int security_sb_umount(struct vfsmount *mnt, int flags)
 int security_sb_pivotroot(const struct path *old_path,
                          const struct path *new_path)
 {
-       return call_int_hook(sb_pivotroot, 0, old_path, new_path);
+       return call_int_hook(sb_pivotroot, old_path, new_path);
 }
 
 /**
@@ -1499,9 +1498,17 @@ int security_sb_set_mnt_opts(struct super_block *sb,
                             unsigned long kern_flags,
                             unsigned long *set_kern_flags)
 {
-       return call_int_hook(sb_set_mnt_opts,
-                            mnt_opts ? -EOPNOTSUPP : 0, sb,
-                            mnt_opts, kern_flags, set_kern_flags);
+       struct security_hook_list *hp;
+       int rc = mnt_opts ? -EOPNOTSUPP : LSM_RET_DEFAULT(sb_set_mnt_opts);
+
+       hlist_for_each_entry(hp, &security_hook_heads.sb_set_mnt_opts,
+                            list) {
+               rc = hp->hook.sb_set_mnt_opts(sb, mnt_opts, kern_flags,
+                                             set_kern_flags);
+               if (rc != LSM_RET_DEFAULT(sb_set_mnt_opts))
+                       break;
+       }
+       return rc;
 }
 EXPORT_SYMBOL(security_sb_set_mnt_opts);
 
@@ -1521,7 +1528,7 @@ int security_sb_clone_mnt_opts(const struct super_block *oldsb,
                               unsigned long kern_flags,
                               unsigned long *set_kern_flags)
 {
-       return call_int_hook(sb_clone_mnt_opts, 0, oldsb, newsb,
+       return call_int_hook(sb_clone_mnt_opts, oldsb, newsb,
                             kern_flags, set_kern_flags);
 }
 EXPORT_SYMBOL(security_sb_clone_mnt_opts);
@@ -1538,7 +1545,7 @@ EXPORT_SYMBOL(security_sb_clone_mnt_opts);
 int security_move_mount(const struct path *from_path,
                        const struct path *to_path)
 {
-       return call_int_hook(move_mount, 0, from_path, to_path);
+       return call_int_hook(move_mount, from_path, to_path);
 }
 
 /**
@@ -1555,7 +1562,7 @@ int security_move_mount(const struct path *from_path,
 int security_path_notify(const struct path *path, u64 mask,
                         unsigned int obj_type)
 {
-       return call_int_hook(path_notify, 0, path, mask, obj_type);
+       return call_int_hook(path_notify, path, mask, obj_type);
 }
 
 /**
@@ -1574,7 +1581,7 @@ int security_inode_alloc(struct inode *inode)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(inode_alloc_security, 0, inode);
+       rc = call_int_hook(inode_alloc_security, inode);
        if (unlikely(rc))
                security_inode_free(inode);
        return rc;
@@ -1631,20 +1638,8 @@ int security_dentry_init_security(struct dentry *dentry, int mode,
                                  const char **xattr_name, void **ctx,
                                  u32 *ctxlen)
 {
-       struct security_hook_list *hp;
-       int rc;
-
-       /*
-        * Only one module will provide a security context.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.dentry_init_security,
-                            list) {
-               rc = hp->hook.dentry_init_security(dentry, mode, name,
-                                                  xattr_name, ctx, ctxlen);
-               if (rc != LSM_RET_DEFAULT(dentry_init_security))
-                       return rc;
-       }
-       return LSM_RET_DEFAULT(dentry_init_security);
+       return call_int_hook(dentry_init_security, dentry, mode, name,
+                            xattr_name, ctx, ctxlen);
 }
 EXPORT_SYMBOL(security_dentry_init_security);
 
@@ -1667,7 +1662,7 @@ int security_dentry_create_files_as(struct dentry *dentry, int mode,
                                    struct qstr *name,
                                    const struct cred *old, struct cred *new)
 {
-       return call_int_hook(dentry_create_files_as, 0, dentry, mode,
+       return call_int_hook(dentry_create_files_as, dentry, mode,
                             name, old, new);
 }
 EXPORT_SYMBOL(security_dentry_create_files_as);
@@ -1764,7 +1759,7 @@ int security_inode_init_security_anon(struct inode *inode,
                                      const struct qstr *name,
                                      const struct inode *context_inode)
 {
-       return call_int_hook(inode_init_security_anon, 0, inode, name,
+       return call_int_hook(inode_init_security_anon, inode, name,
                             context_inode);
 }
 
@@ -1786,7 +1781,7 @@ int security_path_mknod(const struct path *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry))))
                return 0;
-       return call_int_hook(path_mknod, 0, dir, dentry, mode, dev);
+       return call_int_hook(path_mknod, dir, dentry, mode, dev);
 }
 EXPORT_SYMBOL(security_path_mknod);
 
@@ -1819,7 +1814,7 @@ int security_path_mkdir(const struct path *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry))))
                return 0;
-       return call_int_hook(path_mkdir, 0, dir, dentry, mode);
+       return call_int_hook(path_mkdir, dir, dentry, mode);
 }
 EXPORT_SYMBOL(security_path_mkdir);
 
@@ -1836,7 +1831,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry))))
                return 0;
-       return call_int_hook(path_rmdir, 0, dir, dentry);
+       return call_int_hook(path_rmdir, dir, dentry);
 }
 
 /**
@@ -1852,7 +1847,7 @@ int security_path_unlink(const struct path *dir, struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry))))
                return 0;
-       return call_int_hook(path_unlink, 0, dir, dentry);
+       return call_int_hook(path_unlink, dir, dentry);
 }
 EXPORT_SYMBOL(security_path_unlink);
 
@@ -1871,7 +1866,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry))))
                return 0;
-       return call_int_hook(path_symlink, 0, dir, dentry, old_name);
+       return call_int_hook(path_symlink, dir, dentry, old_name);
 }
 
 /**
@@ -1889,7 +1884,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry))))
                return 0;
-       return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
+       return call_int_hook(path_link, old_dentry, new_dir, new_dentry);
 }
 
 /**
@@ -1913,7 +1908,7 @@ int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
                      IS_PRIVATE(d_backing_inode(new_dentry)))))
                return 0;
 
-       return call_int_hook(path_rename, 0, old_dir, old_dentry, new_dir,
+       return call_int_hook(path_rename, old_dir, old_dentry, new_dir,
                             new_dentry, flags);
 }
 EXPORT_SYMBOL(security_path_rename);
@@ -1932,7 +1927,7 @@ int security_path_truncate(const struct path *path)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry))))
                return 0;
-       return call_int_hook(path_truncate, 0, path);
+       return call_int_hook(path_truncate, path);
 }
 
 /**
@@ -1950,7 +1945,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry))))
                return 0;
-       return call_int_hook(path_chmod, 0, path, mode);
+       return call_int_hook(path_chmod, path, mode);
 }
 
 /**
@@ -1967,7 +1962,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry))))
                return 0;
-       return call_int_hook(path_chown, 0, path, uid, gid);
+       return call_int_hook(path_chown, path, uid, gid);
 }
 
 /**
@@ -1980,7 +1975,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
  */
 int security_path_chroot(const struct path *path)
 {
-       return call_int_hook(path_chroot, 0, path);
+       return call_int_hook(path_chroot, path);
 }
 #endif /* CONFIG_SECURITY_PATH */
 
@@ -1999,7 +1994,7 @@ int security_inode_create(struct inode *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(dir)))
                return 0;
-       return call_int_hook(inode_create, 0, dir, dentry, mode);
+       return call_int_hook(inode_create, dir, dentry, mode);
 }
 EXPORT_SYMBOL_GPL(security_inode_create);
 
@@ -2033,7 +2028,7 @@ int security_inode_link(struct dentry *old_dentry, struct inode *dir,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry))))
                return 0;
-       return call_int_hook(inode_link, 0, old_dentry, dir, new_dentry);
+       return call_int_hook(inode_link, old_dentry, dir, new_dentry);
 }
 
 /**
@@ -2049,7 +2044,7 @@ int security_inode_unlink(struct inode *dir, struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_unlink, 0, dir, dentry);
+       return call_int_hook(inode_unlink, dir, dentry);
 }
 
 /**
@@ -2067,7 +2062,7 @@ int security_inode_symlink(struct inode *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(dir)))
                return 0;
-       return call_int_hook(inode_symlink, 0, dir, dentry, old_name);
+       return call_int_hook(inode_symlink, dir, dentry, old_name);
 }
 
 /**
@@ -2085,7 +2080,7 @@ int security_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 {
        if (unlikely(IS_PRIVATE(dir)))
                return 0;
-       return call_int_hook(inode_mkdir, 0, dir, dentry, mode);
+       return call_int_hook(inode_mkdir, dir, dentry, mode);
 }
 EXPORT_SYMBOL_GPL(security_inode_mkdir);
 
@@ -2102,7 +2097,7 @@ int security_inode_rmdir(struct inode *dir, struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_rmdir, 0, dir, dentry);
+       return call_int_hook(inode_rmdir, dir, dentry);
 }
 
 /**
@@ -2124,7 +2119,7 @@ int security_inode_mknod(struct inode *dir, struct dentry *dentry,
 {
        if (unlikely(IS_PRIVATE(dir)))
                return 0;
-       return call_int_hook(inode_mknod, 0, dir, dentry, mode, dev);
+       return call_int_hook(inode_mknod, dir, dentry, mode, dev);
 }
 
 /**
@@ -2149,13 +2144,13 @@ int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
                return 0;
 
        if (flags & RENAME_EXCHANGE) {
-               int err = call_int_hook(inode_rename, 0, new_dir, new_dentry,
+               int err = call_int_hook(inode_rename, new_dir, new_dentry,
                                        old_dir, old_dentry);
                if (err)
                        return err;
        }
 
-       return call_int_hook(inode_rename, 0, old_dir, old_dentry,
+       return call_int_hook(inode_rename, old_dir, old_dentry,
                             new_dir, new_dentry);
 }
 
@@ -2171,7 +2166,7 @@ int security_inode_readlink(struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_readlink, 0, dentry);
+       return call_int_hook(inode_readlink, dentry);
 }
 
 /**
@@ -2190,7 +2185,7 @@ int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
 {
        if (unlikely(IS_PRIVATE(inode)))
                return 0;
-       return call_int_hook(inode_follow_link, 0, dentry, inode, rcu);
+       return call_int_hook(inode_follow_link, dentry, inode, rcu);
 }
 
 /**
@@ -2211,7 +2206,7 @@ int security_inode_permission(struct inode *inode, int mask)
 {
        if (unlikely(IS_PRIVATE(inode)))
                return 0;
-       return call_int_hook(inode_permission, 0, inode, mask);
+       return call_int_hook(inode_permission, inode, mask);
 }
 
 /**
@@ -2232,7 +2227,7 @@ int security_inode_setattr(struct mnt_idmap *idmap,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_setattr, 0, idmap, dentry, attr);
+       return call_int_hook(inode_setattr, idmap, dentry, attr);
 }
 EXPORT_SYMBOL_GPL(security_inode_setattr);
 
@@ -2264,7 +2259,7 @@ int security_inode_getattr(const struct path *path)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry))))
                return 0;
-       return call_int_hook(inode_getattr, 0, path);
+       return call_int_hook(inode_getattr, path);
 }
 
 /**
@@ -2292,8 +2287,8 @@ int security_inode_setxattr(struct mnt_idmap *idmap,
         * SELinux and Smack integrate the cap call,
         * so assume that all LSMs supplying this call do so.
         */
-       ret = call_int_hook(inode_setxattr, 1, idmap, dentry, name, value,
-                           size, flags);
+       ret = call_int_hook(inode_setxattr, idmap, dentry, name, value, size,
+                           flags);
 
        if (ret == 1)
                ret = cap_inode_setxattr(dentry, name, value, size, flags);
@@ -2318,8 +2313,7 @@ int security_inode_set_acl(struct mnt_idmap *idmap,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_set_acl, 0, idmap, dentry, acl_name,
-                            kacl);
+       return call_int_hook(inode_set_acl, idmap, dentry, acl_name, kacl);
 }
 
 /**
@@ -2355,7 +2349,7 @@ int security_inode_get_acl(struct mnt_idmap *idmap,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_get_acl, 0, idmap, dentry, acl_name);
+       return call_int_hook(inode_get_acl, idmap, dentry, acl_name);
 }
 
 /**
@@ -2374,7 +2368,7 @@ int security_inode_remove_acl(struct mnt_idmap *idmap,
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_remove_acl, 0, idmap, dentry, acl_name);
+       return call_int_hook(inode_remove_acl, idmap, dentry, acl_name);
 }
 
 /**
@@ -2426,7 +2420,7 @@ int security_inode_getxattr(struct dentry *dentry, const char *name)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_getxattr, 0, dentry, name);
+       return call_int_hook(inode_getxattr, dentry, name);
 }
 
 /**
@@ -2442,7 +2436,7 @@ int security_inode_listxattr(struct dentry *dentry)
 {
        if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
                return 0;
-       return call_int_hook(inode_listxattr, 0, dentry);
+       return call_int_hook(inode_listxattr, dentry);
 }
 
 /**
@@ -2467,7 +2461,7 @@ int security_inode_removexattr(struct mnt_idmap *idmap,
         * SELinux and Smack integrate the cap call,
         * so assume that all LSMs supplying this call do so.
         */
-       ret = call_int_hook(inode_removexattr, 1, idmap, dentry, name);
+       ret = call_int_hook(inode_removexattr, idmap, dentry, name);
        if (ret == 1)
                ret = cap_inode_removexattr(idmap, dentry, name);
        return ret;
@@ -2500,7 +2494,7 @@ void security_inode_post_removexattr(struct dentry *dentry, const char *name)
  */
 int security_inode_need_killpriv(struct dentry *dentry)
 {
-       return call_int_hook(inode_need_killpriv, 0, dentry);
+       return call_int_hook(inode_need_killpriv, dentry);
 }
 
 /**
@@ -2517,7 +2511,7 @@ int security_inode_need_killpriv(struct dentry *dentry)
 int security_inode_killpriv(struct mnt_idmap *idmap,
                            struct dentry *dentry)
 {
-       return call_int_hook(inode_killpriv, 0, idmap, dentry);
+       return call_int_hook(inode_killpriv, idmap, dentry);
 }
 
 /**
@@ -2540,21 +2534,11 @@ int security_inode_getsecurity(struct mnt_idmap *idmap,
                               struct inode *inode, const char *name,
                               void **buffer, bool alloc)
 {
-       struct security_hook_list *hp;
-       int rc;
-
        if (unlikely(IS_PRIVATE(inode)))
                return LSM_RET_DEFAULT(inode_getsecurity);
-       /*
-        * Only one module will provide an attribute with a given name.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.inode_getsecurity, list) {
-               rc = hp->hook.inode_getsecurity(idmap, inode, name, buffer,
-                                               alloc);
-               if (rc != LSM_RET_DEFAULT(inode_getsecurity))
-                       return rc;
-       }
-       return LSM_RET_DEFAULT(inode_getsecurity);
+
+       return call_int_hook(inode_getsecurity, idmap, inode, name, buffer,
+                            alloc);
 }
 
 /**
@@ -2575,21 +2559,11 @@ int security_inode_getsecurity(struct mnt_idmap *idmap,
 int security_inode_setsecurity(struct inode *inode, const char *name,
                               const void *value, size_t size, int flags)
 {
-       struct security_hook_list *hp;
-       int rc;
-
        if (unlikely(IS_PRIVATE(inode)))
                return LSM_RET_DEFAULT(inode_setsecurity);
-       /*
-        * Only one module will provide an attribute with a given name.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.inode_setsecurity, list) {
-               rc = hp->hook.inode_setsecurity(inode, name, value, size,
-                                               flags);
-               if (rc != LSM_RET_DEFAULT(inode_setsecurity))
-                       return rc;
-       }
-       return LSM_RET_DEFAULT(inode_setsecurity);
+
+       return call_int_hook(inode_setsecurity, inode, name, value, size,
+                            flags);
 }
 
 /**
@@ -2610,7 +2584,7 @@ int security_inode_listsecurity(struct inode *inode,
 {
        if (unlikely(IS_PRIVATE(inode)))
                return 0;
-       return call_int_hook(inode_listsecurity, 0, inode, buffer, buffer_size);
+       return call_int_hook(inode_listsecurity, inode, buffer, buffer_size);
 }
 EXPORT_SYMBOL(security_inode_listsecurity);
 
@@ -2641,7 +2615,7 @@ void security_inode_getsecid(struct inode *inode, u32 *secid)
  */
 int security_inode_copy_up(struct dentry *src, struct cred **new)
 {
-       return call_int_hook(inode_copy_up, 0, src, new);
+       return call_int_hook(inode_copy_up, src, new);
 }
 EXPORT_SYMBOL(security_inode_copy_up);
 
@@ -2659,7 +2633,6 @@ EXPORT_SYMBOL(security_inode_copy_up);
  */
 int security_inode_copy_up_xattr(const char *name)
 {
-       struct security_hook_list *hp;
        int rc;
 
        /*
@@ -2667,12 +2640,9 @@ int security_inode_copy_up_xattr(const char *name)
         * xattr), -EOPNOTSUPP if it does not know anything about the xattr or
         * any other error code in case of an error.
         */
-       hlist_for_each_entry(hp,
-                            &security_hook_heads.inode_copy_up_xattr, list) {
-               rc = hp->hook.inode_copy_up_xattr(name);
-               if (rc != LSM_RET_DEFAULT(inode_copy_up_xattr))
-                       return rc;
-       }
+       rc = call_int_hook(inode_copy_up_xattr, name);
+       if (rc != LSM_RET_DEFAULT(inode_copy_up_xattr))
+               return rc;
 
        return LSM_RET_DEFAULT(inode_copy_up_xattr);
 }
@@ -2691,7 +2661,7 @@ EXPORT_SYMBOL(security_inode_copy_up_xattr);
 int security_kernfs_init_security(struct kernfs_node *kn_dir,
                                  struct kernfs_node *kn)
 {
-       return call_int_hook(kernfs_init_security, 0, kn_dir, kn);
+       return call_int_hook(kernfs_init_security, kn_dir, kn);
 }
 
 /**
@@ -2715,7 +2685,7 @@ int security_kernfs_init_security(struct kernfs_node *kn_dir,
  */
 int security_file_permission(struct file *file, int mask)
 {
-       return call_int_hook(file_permission, 0, file, mask);
+       return call_int_hook(file_permission, file, mask);
 }
 
 /**
@@ -2733,7 +2703,7 @@ int security_file_alloc(struct file *file)
 
        if (rc)
                return rc;
-       rc = call_int_hook(file_alloc_security, 0, file);
+       rc = call_int_hook(file_alloc_security, file);
        if (unlikely(rc))
                security_file_free(file);
        return rc;
@@ -2784,7 +2754,7 @@ void security_file_free(struct file *file)
  */
 int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
-       return call_int_hook(file_ioctl, 0, file, cmd, arg);
+       return call_int_hook(file_ioctl, file, cmd, arg);
 }
 EXPORT_SYMBOL_GPL(security_file_ioctl);
 
@@ -2802,7 +2772,7 @@ EXPORT_SYMBOL_GPL(security_file_ioctl);
 int security_file_ioctl_compat(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
-       return call_int_hook(file_ioctl_compat, 0, file, cmd, arg);
+       return call_int_hook(file_ioctl_compat, file, cmd, arg);
 }
 EXPORT_SYMBOL_GPL(security_file_ioctl_compat);
 
@@ -2853,7 +2823,7 @@ static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
 int security_mmap_file(struct file *file, unsigned long prot,
                       unsigned long flags)
 {
-       return call_int_hook(mmap_file, 0, file, prot, mmap_prot(file, prot),
+       return call_int_hook(mmap_file, file, prot, mmap_prot(file, prot),
                             flags);
 }
 
@@ -2867,7 +2837,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
  */
 int security_mmap_addr(unsigned long addr)
 {
-       return call_int_hook(mmap_addr, 0, addr);
+       return call_int_hook(mmap_addr, addr);
 }
 
 /**
@@ -2883,7 +2853,7 @@ 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);
+       return call_int_hook(file_mprotect, vma, reqprot, prot);
 }
 
 /**
@@ -2898,7 +2868,7 @@ int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
  */
 int security_file_lock(struct file *file, unsigned int cmd)
 {
-       return call_int_hook(file_lock, 0, file, cmd);
+       return call_int_hook(file_lock, file, cmd);
 }
 
 /**
@@ -2917,7 +2887,7 @@ int security_file_lock(struct file *file, unsigned int cmd)
  */
 int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
 {
-       return call_int_hook(file_fcntl, 0, file, cmd, arg);
+       return call_int_hook(file_fcntl, file, cmd, arg);
 }
 
 /**
@@ -2951,7 +2921,7 @@ void security_file_set_fowner(struct file *file)
 int security_file_send_sigiotask(struct task_struct *tsk,
                                 struct fown_struct *fown, int sig)
 {
-       return call_int_hook(file_send_sigiotask, 0, tsk, fown, sig);
+       return call_int_hook(file_send_sigiotask, tsk, fown, sig);
 }
 
 /**
@@ -2965,7 +2935,7 @@ int security_file_send_sigiotask(struct task_struct *tsk,
  */
 int security_file_receive(struct file *file)
 {
-       return call_int_hook(file_receive, 0, file);
+       return call_int_hook(file_receive, file);
 }
 
 /**
@@ -2981,7 +2951,7 @@ int security_file_open(struct file *file)
 {
        int ret;
 
-       ret = call_int_hook(file_open, 0, file);
+       ret = call_int_hook(file_open, file);
        if (ret)
                return ret;
 
@@ -3001,7 +2971,7 @@ int security_file_open(struct file *file)
  */
 int security_file_post_open(struct file *file, int mask)
 {
-       return call_int_hook(file_post_open, 0, file, mask);
+       return call_int_hook(file_post_open, file, mask);
 }
 EXPORT_SYMBOL_GPL(security_file_post_open);
 
@@ -3017,7 +2987,7 @@ EXPORT_SYMBOL_GPL(security_file_post_open);
  */
 int security_file_truncate(struct file *file)
 {
-       return call_int_hook(file_truncate, 0, file);
+       return call_int_hook(file_truncate, file);
 }
 
 /**
@@ -3035,7 +3005,7 @@ int security_task_alloc(struct task_struct *task, unsigned long clone_flags)
 
        if (rc)
                return rc;
-       rc = call_int_hook(task_alloc, 0, task, clone_flags);
+       rc = call_int_hook(task_alloc, task, clone_flags);
        if (unlikely(rc))
                security_task_free(task);
        return rc;
@@ -3073,7 +3043,7 @@ int security_cred_alloc_blank(struct cred *cred, gfp_t gfp)
        if (rc)
                return rc;
 
-       rc = call_int_hook(cred_alloc_blank, 0, cred, gfp);
+       rc = call_int_hook(cred_alloc_blank, cred, gfp);
        if (unlikely(rc))
                security_cred_free(cred);
        return rc;
@@ -3117,7 +3087,7 @@ int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp)
        if (rc)
                return rc;
 
-       rc = call_int_hook(cred_prepare, 0, new, old, gfp);
+       rc = call_int_hook(cred_prepare, new, old, gfp);
        if (unlikely(rc))
                security_cred_free(new);
        return rc;
@@ -3162,7 +3132,7 @@ EXPORT_SYMBOL(security_cred_getsecid);
  */
 int security_kernel_act_as(struct cred *new, u32 secid)
 {
-       return call_int_hook(kernel_act_as, 0, new, secid);
+       return call_int_hook(kernel_act_as, new, secid);
 }
 
 /**
@@ -3178,7 +3148,7 @@ int security_kernel_act_as(struct cred *new, u32 secid)
  */
 int security_kernel_create_files_as(struct cred *new, struct inode *inode)
 {
-       return call_int_hook(kernel_create_files_as, 0, new, inode);
+       return call_int_hook(kernel_create_files_as, new, inode);
 }
 
 /**
@@ -3192,7 +3162,7 @@ int security_kernel_create_files_as(struct cred *new, struct inode *inode)
  */
 int security_kernel_module_request(char *kmod_name)
 {
-       return call_int_hook(kernel_module_request, 0, kmod_name);
+       return call_int_hook(kernel_module_request, kmod_name);
 }
 
 /**
@@ -3208,7 +3178,7 @@ int security_kernel_module_request(char *kmod_name)
 int security_kernel_read_file(struct file *file, enum kernel_read_file_id id,
                              bool contents)
 {
-       return call_int_hook(kernel_read_file, 0, file, id, contents);
+       return call_int_hook(kernel_read_file, file, id, contents);
 }
 EXPORT_SYMBOL_GPL(security_kernel_read_file);
 
@@ -3228,7 +3198,7 @@ EXPORT_SYMBOL_GPL(security_kernel_read_file);
 int security_kernel_post_read_file(struct file *file, char *buf, loff_t size,
                                   enum kernel_read_file_id id)
 {
-       return call_int_hook(kernel_post_read_file, 0, file, buf, size, id);
+       return call_int_hook(kernel_post_read_file, file, buf, size, id);
 }
 EXPORT_SYMBOL_GPL(security_kernel_post_read_file);
 
@@ -3243,7 +3213,7 @@ EXPORT_SYMBOL_GPL(security_kernel_post_read_file);
  */
 int security_kernel_load_data(enum kernel_load_data_id id, bool contents)
 {
-       return call_int_hook(kernel_load_data, 0, id, contents);
+       return call_int_hook(kernel_load_data, id, contents);
 }
 EXPORT_SYMBOL_GPL(security_kernel_load_data);
 
@@ -3265,8 +3235,7 @@ int security_kernel_post_load_data(char *buf, loff_t size,
                                   enum kernel_load_data_id id,
                                   char *description)
 {
-       return call_int_hook(kernel_post_load_data, 0, buf, size, id,
-                            description);
+       return call_int_hook(kernel_post_load_data, buf, size, id, description);
 }
 EXPORT_SYMBOL_GPL(security_kernel_post_load_data);
 
@@ -3287,7 +3256,7 @@ EXPORT_SYMBOL_GPL(security_kernel_post_load_data);
 int security_task_fix_setuid(struct cred *new, const struct cred *old,
                             int flags)
 {
-       return call_int_hook(task_fix_setuid, 0, new, old, flags);
+       return call_int_hook(task_fix_setuid, new, old, flags);
 }
 
 /**
@@ -3307,7 +3276,7 @@ int security_task_fix_setuid(struct cred *new, const struct cred *old,
 int security_task_fix_setgid(struct cred *new, const struct cred *old,
                             int flags)
 {
-       return call_int_hook(task_fix_setgid, 0, new, old, flags);
+       return call_int_hook(task_fix_setgid, new, old, flags);
 }
 
 /**
@@ -3324,7 +3293,7 @@ int security_task_fix_setgid(struct cred *new, const struct cred *old,
  */
 int security_task_fix_setgroups(struct cred *new, const struct cred *old)
 {
-       return call_int_hook(task_fix_setgroups, 0, new, old);
+       return call_int_hook(task_fix_setgroups, new, old);
 }
 
 /**
@@ -3339,7 +3308,7 @@ int security_task_fix_setgroups(struct cred *new, const struct cred *old)
  */
 int security_task_setpgid(struct task_struct *p, pid_t pgid)
 {
-       return call_int_hook(task_setpgid, 0, p, pgid);
+       return call_int_hook(task_setpgid, p, pgid);
 }
 
 /**
@@ -3353,7 +3322,7 @@ int security_task_setpgid(struct task_struct *p, pid_t pgid)
  */
 int security_task_getpgid(struct task_struct *p)
 {
-       return call_int_hook(task_getpgid, 0, p);
+       return call_int_hook(task_getpgid, p);
 }
 
 /**
@@ -3366,7 +3335,7 @@ int security_task_getpgid(struct task_struct *p)
  */
 int security_task_getsid(struct task_struct *p)
 {
-       return call_int_hook(task_getsid, 0, p);
+       return call_int_hook(task_getsid, p);
 }
 
 /**
@@ -3409,7 +3378,7 @@ EXPORT_SYMBOL(security_task_getsecid_obj);
  */
 int security_task_setnice(struct task_struct *p, int nice)
 {
-       return call_int_hook(task_setnice, 0, p, nice);
+       return call_int_hook(task_setnice, p, nice);
 }
 
 /**
@@ -3423,7 +3392,7 @@ int security_task_setnice(struct task_struct *p, int nice)
  */
 int security_task_setioprio(struct task_struct *p, int ioprio)
 {
-       return call_int_hook(task_setioprio, 0, p, ioprio);
+       return call_int_hook(task_setioprio, p, ioprio);
 }
 
 /**
@@ -3436,7 +3405,7 @@ int security_task_setioprio(struct task_struct *p, int ioprio)
  */
 int security_task_getioprio(struct task_struct *p)
 {
-       return call_int_hook(task_getioprio, 0, p);
+       return call_int_hook(task_getioprio, p);
 }
 
 /**
@@ -3453,7 +3422,7 @@ int security_task_getioprio(struct task_struct *p)
 int security_task_prlimit(const struct cred *cred, const struct cred *tcred,
                          unsigned int flags)
 {
-       return call_int_hook(task_prlimit, 0, cred, tcred, flags);
+       return call_int_hook(task_prlimit, cred, tcred, flags);
 }
 
 /**
@@ -3471,7 +3440,7 @@ int security_task_prlimit(const struct cred *cred, const struct cred *tcred,
 int security_task_setrlimit(struct task_struct *p, unsigned int resource,
                            struct rlimit *new_rlim)
 {
-       return call_int_hook(task_setrlimit, 0, p, resource, new_rlim);
+       return call_int_hook(task_setrlimit, p, resource, new_rlim);
 }
 
 /**
@@ -3485,7 +3454,7 @@ int security_task_setrlimit(struct task_struct *p, unsigned int resource,
  */
 int security_task_setscheduler(struct task_struct *p)
 {
-       return call_int_hook(task_setscheduler, 0, p);
+       return call_int_hook(task_setscheduler, p);
 }
 
 /**
@@ -3498,7 +3467,7 @@ int security_task_setscheduler(struct task_struct *p)
  */
 int security_task_getscheduler(struct task_struct *p)
 {
-       return call_int_hook(task_getscheduler, 0, p);
+       return call_int_hook(task_getscheduler, p);
 }
 
 /**
@@ -3511,7 +3480,7 @@ int security_task_getscheduler(struct task_struct *p)
  */
 int security_task_movememory(struct task_struct *p)
 {
-       return call_int_hook(task_movememory, 0, p);
+       return call_int_hook(task_movememory, p);
 }
 
 /**
@@ -3532,7 +3501,7 @@ int security_task_movememory(struct task_struct *p)
 int security_task_kill(struct task_struct *p, struct kernel_siginfo *info,
                       int sig, const struct cred *cred)
 {
-       return call_int_hook(task_kill, 0, p, info, sig, cred);
+       return call_int_hook(task_kill, p, info, sig, cred);
 }
 
 /**
@@ -3590,7 +3559,7 @@ void security_task_to_inode(struct task_struct *p, struct inode *inode)
  */
 int security_create_user_ns(const struct cred *cred)
 {
-       return call_int_hook(userns_create, 0, cred);
+       return call_int_hook(userns_create, cred);
 }
 
 /**
@@ -3604,7 +3573,7 @@ int security_create_user_ns(const struct cred *cred)
  */
 int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
 {
-       return call_int_hook(ipc_permission, 0, ipcp, flag);
+       return call_int_hook(ipc_permission, ipcp, flag);
 }
 
 /**
@@ -3636,7 +3605,7 @@ int security_msg_msg_alloc(struct msg_msg *msg)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(msg_msg_alloc_security, 0, msg);
+       rc = call_int_hook(msg_msg_alloc_security, msg);
        if (unlikely(rc))
                security_msg_msg_free(msg);
        return rc;
@@ -3670,7 +3639,7 @@ int security_msg_queue_alloc(struct kern_ipc_perm *msq)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(msg_queue_alloc_security, 0, msq);
+       rc = call_int_hook(msg_queue_alloc_security, msq);
        if (unlikely(rc))
                security_msg_queue_free(msq);
        return rc;
@@ -3702,7 +3671,7 @@ void security_msg_queue_free(struct kern_ipc_perm *msq)
  */
 int security_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)
 {
-       return call_int_hook(msg_queue_associate, 0, msq, msqflg);
+       return call_int_hook(msg_queue_associate, msq, msqflg);
 }
 
 /**
@@ -3717,7 +3686,7 @@ int security_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)
  */
 int security_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)
 {
-       return call_int_hook(msg_queue_msgctl, 0, msq, cmd);
+       return call_int_hook(msg_queue_msgctl, msq, cmd);
 }
 
 /**
@@ -3734,7 +3703,7 @@ int security_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)
 int security_msg_queue_msgsnd(struct kern_ipc_perm *msq,
                              struct msg_msg *msg, int msqflg)
 {
-       return call_int_hook(msg_queue_msgsnd, 0, msq, msg, msqflg);
+       return call_int_hook(msg_queue_msgsnd, msq, msg, msqflg);
 }
 
 /**
@@ -3755,7 +3724,7 @@ int security_msg_queue_msgsnd(struct kern_ipc_perm *msq,
 int security_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg,
                              struct task_struct *target, long type, int mode)
 {
-       return call_int_hook(msg_queue_msgrcv, 0, msq, msg, target, type, mode);
+       return call_int_hook(msg_queue_msgrcv, msq, msg, target, type, mode);
 }
 
 /**
@@ -3773,7 +3742,7 @@ int security_shm_alloc(struct kern_ipc_perm *shp)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(shm_alloc_security, 0, shp);
+       rc = call_int_hook(shm_alloc_security, shp);
        if (unlikely(rc))
                security_shm_free(shp);
        return rc;
@@ -3806,7 +3775,7 @@ void security_shm_free(struct kern_ipc_perm *shp)
  */
 int security_shm_associate(struct kern_ipc_perm *shp, int shmflg)
 {
-       return call_int_hook(shm_associate, 0, shp, shmflg);
+       return call_int_hook(shm_associate, shp, shmflg);
 }
 
 /**
@@ -3821,7 +3790,7 @@ int security_shm_associate(struct kern_ipc_perm *shp, int shmflg)
  */
 int security_shm_shmctl(struct kern_ipc_perm *shp, int cmd)
 {
-       return call_int_hook(shm_shmctl, 0, shp, cmd);
+       return call_int_hook(shm_shmctl, shp, cmd);
 }
 
 /**
@@ -3839,7 +3808,7 @@ int security_shm_shmctl(struct kern_ipc_perm *shp, int cmd)
 int security_shm_shmat(struct kern_ipc_perm *shp,
                       char __user *shmaddr, int shmflg)
 {
-       return call_int_hook(shm_shmat, 0, shp, shmaddr, shmflg);
+       return call_int_hook(shm_shmat, shp, shmaddr, shmflg);
 }
 
 /**
@@ -3857,7 +3826,7 @@ int security_sem_alloc(struct kern_ipc_perm *sma)
 
        if (unlikely(rc))
                return rc;
-       rc = call_int_hook(sem_alloc_security, 0, sma);
+       rc = call_int_hook(sem_alloc_security, sma);
        if (unlikely(rc))
                security_sem_free(sma);
        return rc;
@@ -3889,7 +3858,7 @@ void security_sem_free(struct kern_ipc_perm *sma)
  */
 int security_sem_associate(struct kern_ipc_perm *sma, int semflg)
 {
-       return call_int_hook(sem_associate, 0, sma, semflg);
+       return call_int_hook(sem_associate, sma, semflg);
 }
 
 /**
@@ -3904,7 +3873,7 @@ int security_sem_associate(struct kern_ipc_perm *sma, int semflg)
  */
 int security_sem_semctl(struct kern_ipc_perm *sma, int cmd)
 {
-       return call_int_hook(sem_semctl, 0, sma, cmd);
+       return call_int_hook(sem_semctl, sma, cmd);
 }
 
 /**
@@ -3922,7 +3891,7 @@ int security_sem_semctl(struct kern_ipc_perm *sma, int cmd)
 int security_sem_semop(struct kern_ipc_perm *sma, struct sembuf *sops,
                       unsigned nsops, int alter)
 {
-       return call_int_hook(sem_semop, 0, sma, sops, nsops, alter);
+       return call_int_hook(sem_semop, sma, sops, nsops, alter);
 }
 
 /**
@@ -4151,7 +4120,7 @@ int security_setprocattr(int lsmid, const char *name, void *value, size_t size)
  */
 int security_netlink_send(struct sock *sk, struct sk_buff *skb)
 {
-       return call_int_hook(netlink_send, 0, sk, skb);
+       return call_int_hook(netlink_send, sk, skb);
 }
 
 /**
@@ -4164,7 +4133,7 @@ int security_netlink_send(struct sock *sk, struct sk_buff *skb)
  */
 int security_ismaclabel(const char *name)
 {
-       return call_int_hook(ismaclabel, 0, name);
+       return call_int_hook(ismaclabel, name);
 }
 EXPORT_SYMBOL(security_ismaclabel);
 
@@ -4183,20 +4152,7 @@ EXPORT_SYMBOL(security_ismaclabel);
  */
 int security_secid_to_secctx(u32 secid, char **secdata, u32 *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);
+       return call_int_hook(secid_to_secctx, secid, secdata, seclen);
 }
 EXPORT_SYMBOL(security_secid_to_secctx);
 
@@ -4213,7 +4169,7 @@ EXPORT_SYMBOL(security_secid_to_secctx);
 int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
 {
        *secid = 0;
-       return call_int_hook(secctx_to_secid, 0, secdata, seclen, secid);
+       return call_int_hook(secctx_to_secid, secdata, seclen, secid);
 }
 EXPORT_SYMBOL(security_secctx_to_secid);
 
@@ -4260,7 +4216,7 @@ EXPORT_SYMBOL(security_inode_invalidate_secctx);
  */
 int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)
 {
-       return call_int_hook(inode_notifysecctx, 0, inode, ctx, ctxlen);
+       return call_int_hook(inode_notifysecctx, inode, ctx, ctxlen);
 }
 EXPORT_SYMBOL(security_inode_notifysecctx);
 
@@ -4282,7 +4238,7 @@ EXPORT_SYMBOL(security_inode_notifysecctx);
  */
 int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen)
 {
-       return call_int_hook(inode_setsecctx, 0, dentry, ctx, ctxlen);
+       return call_int_hook(inode_setsecctx, dentry, ctx, ctxlen);
 }
 EXPORT_SYMBOL(security_inode_setsecctx);
 
@@ -4299,19 +4255,7 @@ EXPORT_SYMBOL(security_inode_setsecctx);
  */
 int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
 {
-       struct security_hook_list *hp;
-       int rc;
-
-       /*
-        * Only one module will provide a security context.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.inode_getsecctx, list) {
-               rc = hp->hook.inode_getsecctx(inode, ctx, ctxlen);
-               if (rc != LSM_RET_DEFAULT(inode_getsecctx))
-                       return rc;
-       }
-
-       return LSM_RET_DEFAULT(inode_getsecctx);
+       return call_int_hook(inode_getsecctx, inode, ctx, ctxlen);
 }
 EXPORT_SYMBOL(security_inode_getsecctx);
 
@@ -4330,7 +4274,7 @@ int security_post_notification(const struct cred *w_cred,
                               const struct cred *cred,
                               struct watch_notification *n)
 {
-       return call_int_hook(post_notification, 0, w_cred, cred, n);
+       return call_int_hook(post_notification, w_cred, cred, n);
 }
 #endif /* CONFIG_WATCH_QUEUE */
 
@@ -4346,7 +4290,7 @@ int security_post_notification(const struct cred *w_cred,
  */
 int security_watch_key(struct key *key)
 {
-       return call_int_hook(watch_key, 0, key);
+       return call_int_hook(watch_key, key);
 }
 #endif /* CONFIG_KEY_NOTIFICATIONS */
 
@@ -4375,7 +4319,7 @@ int security_watch_key(struct key *key)
 int security_unix_stream_connect(struct sock *sock, struct sock *other,
                                 struct sock *newsk)
 {
-       return call_int_hook(unix_stream_connect, 0, sock, other, newsk);
+       return call_int_hook(unix_stream_connect, sock, other, newsk);
 }
 EXPORT_SYMBOL(security_unix_stream_connect);
 
@@ -4401,7 +4345,7 @@ EXPORT_SYMBOL(security_unix_stream_connect);
  */
 int security_unix_may_send(struct socket *sock,  struct socket *other)
 {
-       return call_int_hook(unix_may_send, 0, sock, other);
+       return call_int_hook(unix_may_send, sock, other);
 }
 EXPORT_SYMBOL(security_unix_may_send);
 
@@ -4418,7 +4362,7 @@ EXPORT_SYMBOL(security_unix_may_send);
  */
 int security_socket_create(int family, int type, int protocol, int kern)
 {
-       return call_int_hook(socket_create, 0, family, type, protocol, kern);
+       return call_int_hook(socket_create, family, type, protocol, kern);
 }
 
 /**
@@ -4442,7 +4386,7 @@ int security_socket_create(int family, int type, int protocol, int kern)
 int security_socket_post_create(struct socket *sock, int family,
                                int type, int protocol, int kern)
 {
-       return call_int_hook(socket_post_create, 0, sock, family, type,
+       return call_int_hook(socket_post_create, sock, family, type,
                             protocol, kern);
 }
 
@@ -4458,7 +4402,7 @@ int security_socket_post_create(struct socket *sock, int family,
  */
 int security_socket_socketpair(struct socket *socka, struct socket *sockb)
 {
-       return call_int_hook(socket_socketpair, 0, socka, sockb);
+       return call_int_hook(socket_socketpair, socka, sockb);
 }
 EXPORT_SYMBOL(security_socket_socketpair);
 
@@ -4477,7 +4421,7 @@ EXPORT_SYMBOL(security_socket_socketpair);
 int security_socket_bind(struct socket *sock,
                         struct sockaddr *address, int addrlen)
 {
-       return call_int_hook(socket_bind, 0, sock, address, addrlen);
+       return call_int_hook(socket_bind, sock, address, addrlen);
 }
 
 /**
@@ -4494,7 +4438,7 @@ int security_socket_bind(struct socket *sock,
 int security_socket_connect(struct socket *sock,
                            struct sockaddr *address, int addrlen)
 {
-       return call_int_hook(socket_connect, 0, sock, address, addrlen);
+       return call_int_hook(socket_connect, sock, address, addrlen);
 }
 
 /**
@@ -4508,7 +4452,7 @@ int security_socket_connect(struct socket *sock,
  */
 int security_socket_listen(struct socket *sock, int backlog)
 {
-       return call_int_hook(socket_listen, 0, sock, backlog);
+       return call_int_hook(socket_listen, sock, backlog);
 }
 
 /**
@@ -4524,7 +4468,7 @@ int security_socket_listen(struct socket *sock, int backlog)
  */
 int security_socket_accept(struct socket *sock, struct socket *newsock)
 {
-       return call_int_hook(socket_accept, 0, sock, newsock);
+       return call_int_hook(socket_accept, sock, newsock);
 }
 
 /**
@@ -4539,7 +4483,7 @@ int security_socket_accept(struct socket *sock, struct socket *newsock)
  */
 int security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size)
 {
-       return call_int_hook(socket_sendmsg, 0, sock, msg, size);
+       return call_int_hook(socket_sendmsg, sock, msg, size);
 }
 
 /**
@@ -4556,7 +4500,7 @@ int security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size)
 int security_socket_recvmsg(struct socket *sock, struct msghdr *msg,
                            int size, int flags)
 {
-       return call_int_hook(socket_recvmsg, 0, sock, msg, size, flags);
+       return call_int_hook(socket_recvmsg, sock, msg, size, flags);
 }
 
 /**
@@ -4570,7 +4514,7 @@ int security_socket_recvmsg(struct socket *sock, struct msghdr *msg,
  */
 int security_socket_getsockname(struct socket *sock)
 {
-       return call_int_hook(socket_getsockname, 0, sock);
+       return call_int_hook(socket_getsockname, sock);
 }
 
 /**
@@ -4583,7 +4527,7 @@ int security_socket_getsockname(struct socket *sock)
  */
 int security_socket_getpeername(struct socket *sock)
 {
-       return call_int_hook(socket_getpeername, 0, sock);
+       return call_int_hook(socket_getpeername, sock);
 }
 
 /**
@@ -4599,7 +4543,7 @@ int security_socket_getpeername(struct socket *sock)
  */
 int security_socket_getsockopt(struct socket *sock, int level, int optname)
 {
-       return call_int_hook(socket_getsockopt, 0, sock, level, optname);
+       return call_int_hook(socket_getsockopt, sock, level, optname);
 }
 
 /**
@@ -4614,7 +4558,7 @@ int security_socket_getsockopt(struct socket *sock, int level, int optname)
  */
 int security_socket_setsockopt(struct socket *sock, int level, int optname)
 {
-       return call_int_hook(socket_setsockopt, 0, sock, level, optname);
+       return call_int_hook(socket_setsockopt, sock, level, optname);
 }
 
 /**
@@ -4629,7 +4573,7 @@ int security_socket_setsockopt(struct socket *sock, int level, int optname)
  */
 int security_socket_shutdown(struct socket *sock, int how)
 {
-       return call_int_hook(socket_shutdown, 0, sock, how);
+       return call_int_hook(socket_shutdown, sock, how);
 }
 
 /**
@@ -4646,7 +4590,7 @@ int security_socket_shutdown(struct socket *sock, int how)
  */
 int security_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
 {
-       return call_int_hook(socket_sock_rcv_skb, 0, sk, skb);
+       return call_int_hook(socket_sock_rcv_skb, sk, skb);
 }
 EXPORT_SYMBOL(security_sock_rcv_skb);
 
@@ -4668,20 +4612,8 @@ EXPORT_SYMBOL(security_sock_rcv_skb);
 int security_socket_getpeersec_stream(struct socket *sock, sockptr_t optval,
                                      sockptr_t optlen, unsigned int len)
 {
-       struct security_hook_list *hp;
-       int rc;
-
-       /*
-        * Only one module will provide a security context.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.socket_getpeersec_stream,
-                            list) {
-               rc = hp->hook.socket_getpeersec_stream(sock, optval, optlen,
-                                                      len);
-               if (rc != LSM_RET_DEFAULT(socket_getpeersec_stream))
-                       return rc;
-       }
-       return LSM_RET_DEFAULT(socket_getpeersec_stream);
+       return call_int_hook(socket_getpeersec_stream, sock, optval, optlen,
+                            len);
 }
 
 /**
@@ -4701,19 +4633,7 @@ int security_socket_getpeersec_stream(struct socket *sock, sockptr_t optval,
 int security_socket_getpeersec_dgram(struct socket *sock,
                                     struct sk_buff *skb, u32 *secid)
 {
-       struct security_hook_list *hp;
-       int rc;
-
-       /*
-        * Only one module will provide a security context.
-        */
-       hlist_for_each_entry(hp, &security_hook_heads.socket_getpeersec_dgram,
-                            list) {
-               rc = hp->hook.socket_getpeersec_dgram(sock, skb, secid);
-               if (rc != LSM_RET_DEFAULT(socket_getpeersec_dgram))
-                       return rc;
-       }
-       return LSM_RET_DEFAULT(socket_getpeersec_dgram);
+       return call_int_hook(socket_getpeersec_dgram, sock, skb, secid);
 }
 EXPORT_SYMBOL(security_socket_getpeersec_dgram);
 
@@ -4730,7 +4650,7 @@ EXPORT_SYMBOL(security_socket_getpeersec_dgram);
  */
 int security_sk_alloc(struct sock *sk, int family, gfp_t priority)
 {
-       return call_int_hook(sk_alloc_security, 0, sk, family, priority);
+       return call_int_hook(sk_alloc_security, sk, family, priority);
 }
 
 /**
@@ -4811,7 +4731,7 @@ EXPORT_SYMBOL(security_sock_graft);
 int security_inet_conn_request(const struct sock *sk,
                               struct sk_buff *skb, struct request_sock *req)
 {
-       return call_int_hook(inet_conn_request, 0, sk, skb, req);
+       return call_int_hook(inet_conn_request, sk, skb, req);
 }
 EXPORT_SYMBOL(security_inet_conn_request);
 
@@ -4852,7 +4772,7 @@ EXPORT_SYMBOL(security_inet_conn_established);
  */
 int security_secmark_relabel_packet(u32 secid)
 {
-       return call_int_hook(secmark_relabel_packet, 0, secid);
+       return call_int_hook(secmark_relabel_packet, secid);
 }
 EXPORT_SYMBOL(security_secmark_relabel_packet);
 
@@ -4889,7 +4809,7 @@ EXPORT_SYMBOL(security_secmark_refcount_dec);
  */
 int security_tun_dev_alloc_security(void **security)
 {
-       return call_int_hook(tun_dev_alloc_security, 0, security);
+       return call_int_hook(tun_dev_alloc_security, security);
 }
 EXPORT_SYMBOL(security_tun_dev_alloc_security);
 
@@ -4914,7 +4834,7 @@ EXPORT_SYMBOL(security_tun_dev_free_security);
  */
 int security_tun_dev_create(void)
 {
-       return call_int_hook(tun_dev_create, 0);
+       return call_int_hook(tun_dev_create);
 }
 EXPORT_SYMBOL(security_tun_dev_create);
 
@@ -4928,7 +4848,7 @@ EXPORT_SYMBOL(security_tun_dev_create);
  */
 int security_tun_dev_attach_queue(void *security)
 {
-       return call_int_hook(tun_dev_attach_queue, 0, security);
+       return call_int_hook(tun_dev_attach_queue, security);
 }
 EXPORT_SYMBOL(security_tun_dev_attach_queue);
 
@@ -4944,7 +4864,7 @@ EXPORT_SYMBOL(security_tun_dev_attach_queue);
  */
 int security_tun_dev_attach(struct sock *sk, void *security)
 {
-       return call_int_hook(tun_dev_attach, 0, sk, security);
+       return call_int_hook(tun_dev_attach, sk, security);
 }
 EXPORT_SYMBOL(security_tun_dev_attach);
 
@@ -4959,7 +4879,7 @@ EXPORT_SYMBOL(security_tun_dev_attach);
  */
 int security_tun_dev_open(void *security)
 {
-       return call_int_hook(tun_dev_open, 0, security);
+       return call_int_hook(tun_dev_open, security);
 }
 EXPORT_SYMBOL(security_tun_dev_open);
 
@@ -4975,7 +4895,7 @@ EXPORT_SYMBOL(security_tun_dev_open);
 int security_sctp_assoc_request(struct sctp_association *asoc,
                                struct sk_buff *skb)
 {
-       return call_int_hook(sctp_assoc_request, 0, asoc, skb);
+       return call_int_hook(sctp_assoc_request, asoc, skb);
 }
 EXPORT_SYMBOL(security_sctp_assoc_request);
 
@@ -4996,8 +4916,7 @@ EXPORT_SYMBOL(security_sctp_assoc_request);
 int security_sctp_bind_connect(struct sock *sk, int optname,
                               struct sockaddr *address, int addrlen)
 {
-       return call_int_hook(sctp_bind_connect, 0, sk, optname,
-                            address, addrlen);
+       return call_int_hook(sctp_bind_connect, sk, optname, address, addrlen);
 }
 EXPORT_SYMBOL(security_sctp_bind_connect);
 
@@ -5031,7 +4950,7 @@ EXPORT_SYMBOL(security_sctp_sk_clone);
 int security_sctp_assoc_established(struct sctp_association *asoc,
                                    struct sk_buff *skb)
 {
-       return call_int_hook(sctp_assoc_established, 0, asoc, skb);
+       return call_int_hook(sctp_assoc_established, asoc, skb);
 }
 EXPORT_SYMBOL(security_sctp_assoc_established);
 
@@ -5049,7 +4968,7 @@ EXPORT_SYMBOL(security_sctp_assoc_established);
  */
 int security_mptcp_add_subflow(struct sock *sk, struct sock *ssk)
 {
-       return call_int_hook(mptcp_add_subflow, 0, sk, ssk);
+       return call_int_hook(mptcp_add_subflow, sk, ssk);
 }
 
 #endif /* CONFIG_SECURITY_NETWORK */
@@ -5067,7 +4986,7 @@ int security_mptcp_add_subflow(struct sock *sk, struct sock *ssk)
  */
 int security_ib_pkey_access(void *sec, u64 subnet_prefix, u16 pkey)
 {
-       return call_int_hook(ib_pkey_access, 0, sec, subnet_prefix, pkey);
+       return call_int_hook(ib_pkey_access, sec, subnet_prefix, pkey);
 }
 EXPORT_SYMBOL(security_ib_pkey_access);
 
@@ -5084,8 +5003,7 @@ EXPORT_SYMBOL(security_ib_pkey_access);
 int security_ib_endport_manage_subnet(void *sec,
                                      const char *dev_name, u8 port_num)
 {
-       return call_int_hook(ib_endport_manage_subnet, 0, sec,
-                            dev_name, port_num);
+       return call_int_hook(ib_endport_manage_subnet, sec, dev_name, port_num);
 }
 EXPORT_SYMBOL(security_ib_endport_manage_subnet);
 
@@ -5099,7 +5017,7 @@ EXPORT_SYMBOL(security_ib_endport_manage_subnet);
  */
 int security_ib_alloc_security(void **sec)
 {
-       return call_int_hook(ib_alloc_security, 0, sec);
+       return call_int_hook(ib_alloc_security, sec);
 }
 EXPORT_SYMBOL(security_ib_alloc_security);
 
@@ -5132,7 +5050,7 @@ int security_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp,
                               struct xfrm_user_sec_ctx *sec_ctx,
                               gfp_t gfp)
 {
-       return call_int_hook(xfrm_policy_alloc_security, 0, ctxp, sec_ctx, gfp);
+       return call_int_hook(xfrm_policy_alloc_security, ctxp, sec_ctx, gfp);
 }
 EXPORT_SYMBOL(security_xfrm_policy_alloc);
 
@@ -5149,7 +5067,7 @@ EXPORT_SYMBOL(security_xfrm_policy_alloc);
 int security_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx,
                               struct xfrm_sec_ctx **new_ctxp)
 {
-       return call_int_hook(xfrm_policy_clone_security, 0, old_ctx, new_ctxp);
+       return call_int_hook(xfrm_policy_clone_security, old_ctx, new_ctxp);
 }
 
 /**
@@ -5174,7 +5092,7 @@ EXPORT_SYMBOL(security_xfrm_policy_free);
  */
 int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx)
 {
-       return call_int_hook(xfrm_policy_delete_security, 0, ctx);
+       return call_int_hook(xfrm_policy_delete_security, ctx);
 }
 
 /**
@@ -5191,7 +5109,7 @@ int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx)
 int security_xfrm_state_alloc(struct xfrm_state *x,
                              struct xfrm_user_sec_ctx *sec_ctx)
 {
-       return call_int_hook(xfrm_state_alloc, 0, x, sec_ctx);
+       return call_int_hook(xfrm_state_alloc, x, sec_ctx);
 }
 EXPORT_SYMBOL(security_xfrm_state_alloc);
 
@@ -5210,7 +5128,7 @@ EXPORT_SYMBOL(security_xfrm_state_alloc);
 int security_xfrm_state_alloc_acquire(struct xfrm_state *x,
                                      struct xfrm_sec_ctx *polsec, u32 secid)
 {
-       return call_int_hook(xfrm_state_alloc_acquire, 0, x, polsec, secid);
+       return call_int_hook(xfrm_state_alloc_acquire, x, polsec, secid);
 }
 
 /**
@@ -5223,7 +5141,7 @@ int security_xfrm_state_alloc_acquire(struct xfrm_state *x,
  */
 int security_xfrm_state_delete(struct xfrm_state *x)
 {
-       return call_int_hook(xfrm_state_delete_security, 0, x);
+       return call_int_hook(xfrm_state_delete_security, x);
 }
 EXPORT_SYMBOL(security_xfrm_state_delete);
 
@@ -5252,7 +5170,7 @@ void security_xfrm_state_free(struct xfrm_state *x)
  */
 int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid)
 {
-       return call_int_hook(xfrm_policy_lookup, 0, ctx, fl_secid);
+       return call_int_hook(xfrm_policy_lookup, ctx, fl_secid);
 }
 
 /**
@@ -5300,12 +5218,12 @@ int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
  */
 int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid)
 {
-       return call_int_hook(xfrm_decode_session, 0, skb, secid, 1);
+       return call_int_hook(xfrm_decode_session, skb, secid, 1);
 }
 
 void security_skb_classify_flow(struct sk_buff *skb, struct flowi_common *flic)
 {
-       int rc = call_int_hook(xfrm_decode_session, 0, skb, &flic->flowic_secid,
+       int rc = call_int_hook(xfrm_decode_session, skb, &flic->flowic_secid,
                               0);
 
        BUG_ON(rc);
@@ -5328,7 +5246,7 @@ EXPORT_SYMBOL(security_skb_classify_flow);
 int security_key_alloc(struct key *key, const struct cred *cred,
                       unsigned long flags)
 {
-       return call_int_hook(key_alloc, 0, key, cred, flags);
+       return call_int_hook(key_alloc, key, cred, flags);
 }
 
 /**
@@ -5355,7 +5273,7 @@ void security_key_free(struct key *key)
 int security_key_permission(key_ref_t key_ref, const struct cred *cred,
                            enum key_need_perm need_perm)
 {
-       return call_int_hook(key_permission, 0, key_ref, cred, need_perm);
+       return call_int_hook(key_permission, key_ref, cred, need_perm);
 }
 
 /**
@@ -5374,7 +5292,7 @@ int security_key_permission(key_ref_t key_ref, const struct cred *cred,
 int security_key_getsecurity(struct key *key, char **buffer)
 {
        *buffer = NULL;
-       return call_int_hook(key_getsecurity, 0, key, buffer);
+       return call_int_hook(key_getsecurity, key, buffer);
 }
 
 /**
@@ -5412,7 +5330,7 @@ void security_key_post_create_or_update(struct key *keyring, struct key *key,
  */
 int security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule)
 {
-       return call_int_hook(audit_rule_init, 0, field, op, rulestr, lsmrule);
+       return call_int_hook(audit_rule_init, field, op, rulestr, lsmrule);
 }
 
 /**
@@ -5426,7 +5344,7 @@ int security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule)
  */
 int security_audit_rule_known(struct audit_krule *krule)
 {
-       return call_int_hook(audit_rule_known, 0, krule);
+       return call_int_hook(audit_rule_known, krule);
 }
 
 /**
@@ -5456,7 +5374,7 @@ void security_audit_rule_free(void *lsmrule)
  */
 int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule)
 {
-       return call_int_hook(audit_rule_match, 0, secid, field, op, lsmrule);
+       return call_int_hook(audit_rule_match, secid, field, op, lsmrule);
 }
 #endif /* CONFIG_AUDIT */
 
@@ -5475,7 +5393,7 @@ int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule)
  */
 int security_bpf(int cmd, union bpf_attr *attr, unsigned int size)
 {
-       return call_int_hook(bpf, 0, cmd, attr, size);
+       return call_int_hook(bpf, cmd, attr, size);
 }
 
 /**
@@ -5490,7 +5408,7 @@ int security_bpf(int cmd, union bpf_attr *attr, unsigned int size)
  */
 int security_bpf_map(struct bpf_map *map, fmode_t fmode)
 {
-       return call_int_hook(bpf_map, 0, map, fmode);
+       return call_int_hook(bpf_map, map, fmode);
 }
 
 /**
@@ -5504,7 +5422,7 @@ int security_bpf_map(struct bpf_map *map, fmode_t fmode)
  */
 int security_bpf_prog(struct bpf_prog *prog)
 {
-       return call_int_hook(bpf_prog, 0, prog);
+       return call_int_hook(bpf_prog, prog);
 }
 
 /**
@@ -5517,7 +5435,7 @@ int security_bpf_prog(struct bpf_prog *prog)
  */
 int security_bpf_map_alloc(struct bpf_map *map)
 {
-       return call_int_hook(bpf_map_alloc_security, 0, map);
+       return call_int_hook(bpf_map_alloc_security, map);
 }
 
 /**
@@ -5530,7 +5448,7 @@ int security_bpf_map_alloc(struct bpf_map *map)
  */
 int security_bpf_prog_alloc(struct bpf_prog_aux *aux)
 {
-       return call_int_hook(bpf_prog_alloc_security, 0, aux);
+       return call_int_hook(bpf_prog_alloc_security, aux);
 }
 
 /**
@@ -5567,7 +5485,7 @@ void security_bpf_prog_free(struct bpf_prog_aux *aux)
  */
 int security_locked_down(enum lockdown_reason what)
 {
-       return call_int_hook(locked_down, 0, what);
+       return call_int_hook(locked_down, what);
 }
 EXPORT_SYMBOL(security_locked_down);
 
@@ -5583,7 +5501,7 @@ EXPORT_SYMBOL(security_locked_down);
  */
 int security_perf_event_open(struct perf_event_attr *attr, int type)
 {
-       return call_int_hook(perf_event_open, 0, attr, type);
+       return call_int_hook(perf_event_open, attr, type);
 }
 
 /**
@@ -5596,7 +5514,7 @@ int security_perf_event_open(struct perf_event_attr *attr, int type)
  */
 int security_perf_event_alloc(struct perf_event *event)
 {
-       return call_int_hook(perf_event_alloc, 0, event);
+       return call_int_hook(perf_event_alloc, event);
 }
 
 /**
@@ -5620,7 +5538,7 @@ void security_perf_event_free(struct perf_event *event)
  */
 int security_perf_event_read(struct perf_event *event)
 {
-       return call_int_hook(perf_event_read, 0, event);
+       return call_int_hook(perf_event_read, event);
 }
 
 /**
@@ -5633,7 +5551,7 @@ int security_perf_event_read(struct perf_event *event)
  */
 int security_perf_event_write(struct perf_event *event)
 {
-       return call_int_hook(perf_event_write, 0, event);
+       return call_int_hook(perf_event_write, event);
 }
 #endif /* CONFIG_PERF_EVENTS */
 
@@ -5649,7 +5567,7 @@ int security_perf_event_write(struct perf_event *event)
  */
 int security_uring_override_creds(const struct cred *new)
 {
-       return call_int_hook(uring_override_creds, 0, new);
+       return call_int_hook(uring_override_creds, new);
 }
 
 /**
@@ -5662,7 +5580,7 @@ int security_uring_override_creds(const struct cred *new)
  */
 int security_uring_sqpoll(void)
 {
-       return call_int_hook(uring_sqpoll, 0);
+       return call_int_hook(uring_sqpoll);
 }
 
 /**
@@ -5675,6 +5593,6 @@ int security_uring_sqpoll(void)
  */
 int security_uring_cmd(struct io_uring_cmd *ioucmd)
 {
-       return call_int_hook(uring_cmd, 0, ioucmd);
+       return call_int_hook(uring_cmd, ioucmd);
 }
 #endif /* CONFIG_IO_URING */