summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2013-11-25 16:23:23 -0500
committerAnthony G. Basile <blueness@gentoo.org>2013-11-25 16:23:23 -0500
commitad78e98f9915054d3fd826482ebccc7021634c26 (patch)
tree364f478452ab3ed4ae0c0a75e774dc95c9647fe3
parentGrsec/PaX: 2.9.1-{3.2.52,3.11.9}-201311222137 (diff)
downloadhardened-patchset-ad78e98f9915054d3fd826482ebccc7021634c26.tar.gz
hardened-patchset-ad78e98f9915054d3fd826482ebccc7021634c26.tar.bz2
hardened-patchset-ad78e98f9915054d3fd826482ebccc7021634c26.zip
Grsec/PaX: 3.0-{3.2.52,3.11.9}-20131124203120131124
-rw-r--r--3.11.9/0000_README2
-rw-r--r--3.11.9/4420_grsecurity-3.0-3.11.9-201311242034.patch (renamed from 3.11.9/4420_grsecurity-2.9.1-3.11.9-201311222137.patch)4166
-rw-r--r--3.2.52/0000_README2
-rw-r--r--3.2.52/4420_grsecurity-3.0-3.2.52-201311242031.patch (renamed from 3.2.52/4420_grsecurity-2.9.1-3.2.52-201311222106.patch)11095
4 files changed, 9574 insertions, 5691 deletions
diff --git a/3.11.9/0000_README b/3.11.9/0000_README
index f24611c..2d88c58 100644
--- a/3.11.9/0000_README
+++ b/3.11.9/0000_README
@@ -2,7 +2,7 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 4420_grsecurity-2.9.1-3.11.9-201311222137.patch
+Patch: 4420_grsecurity-3.0-3.11.9-201311242034.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/3.11.9/4420_grsecurity-2.9.1-3.11.9-201311222137.patch b/3.11.9/4420_grsecurity-3.0-3.11.9-201311242034.patch
index 0fbfd44..e9cd387 100644
--- a/3.11.9/4420_grsecurity-2.9.1-3.11.9-201311222137.patch
+++ b/3.11.9/4420_grsecurity-3.0-3.11.9-201311242034.patch
@@ -3782,7 +3782,7 @@ index 4a05444..d21968c 100644
atomic64_set(&mm->context.id, asid);
}
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
-index c97f794..6461880 100644
+index c97f794..3e603c4 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -25,6 +25,7 @@
@@ -3793,10 +3793,21 @@ index c97f794..6461880 100644
#include "fault.h"
-@@ -138,6 +139,20 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
+@@ -138,6 +139,31 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
if (fixup_exception(regs))
return;
++#ifdef CONFIG_PAX_MEMORY_UDEREF
++ if (addr < TASK_SIZE) {
++ if (current->signal->curr_ip)
++ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", &current->signal->curr_ip, current->comm, task_pid_nr(current),
++ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
++ else
++ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", current->comm, task_pid_nr(current),
++ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
++ }
++#endif
++
+#ifdef CONFIG_PAX_KERNEXEC
+ if ((fsr & FSR_WRITE) &&
+ (((unsigned long)_stext <= addr && addr < init_mm.end_code) ||
@@ -3814,7 +3825,7 @@ index c97f794..6461880 100644
/*
* No handler, we'll have to terminate things with extreme prejudice.
*/
-@@ -174,6 +189,13 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
+@@ -174,6 +200,13 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
}
#endif
@@ -3828,7 +3839,7 @@ index c97f794..6461880 100644
tsk->thread.address = addr;
tsk->thread.error_code = fsr;
tsk->thread.trap_no = 14;
-@@ -398,6 +420,33 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+@@ -398,6 +431,33 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
}
#endif /* CONFIG_MMU */
@@ -3862,7 +3873,7 @@ index c97f794..6461880 100644
/*
* First Level Translation Fault Handler
*
-@@ -545,9 +594,22 @@ do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+@@ -545,9 +605,22 @@ do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
const struct fsr_info *inf = fsr_info + fsr_fs(fsr);
struct siginfo info;
@@ -3885,7 +3896,7 @@ index c97f794..6461880 100644
printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n",
inf->name, fsr, addr);
-@@ -571,15 +633,92 @@ hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *
+@@ -571,15 +644,92 @@ hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *
ifsr_info[nr].name = name;
}
@@ -54573,7 +54584,7 @@ index e4141f2..d8263e8 100644
i += packet_length_size;
if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size))
diff --git a/fs/exec.c b/fs/exec.c
-index fd774c7..1c6a7bf 100644
+index fd774c7..d08c9ec 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -55,8 +55,20 @@
@@ -55054,7 +55065,7 @@ index fd774c7..1c6a7bf 100644
out:
if (bprm->mm) {
acct_arg_size(bprm, 0);
-@@ -1702,3 +1876,287 @@ asmlinkage long compat_sys_execve(const char __user * filename,
+@@ -1702,3 +1876,295 @@ asmlinkage long compat_sys_execve(const char __user * filename,
return error;
}
#endif
@@ -55284,6 +55295,14 @@ index fd774c7..1c6a7bf 100644
+#else
+ unsigned long textlow = (unsigned long)_stext;
+ unsigned long texthigh = (unsigned long)_etext;
++
++#ifdef CONFIG_X86_64
++ /* check against linear mapping as well */
++ if (high > (unsigned long)__va(__pa(textlow)) &&
++ low <= (unsigned long)__va(__pa(texthigh)))
++ return true;
++#endif
++
+#endif
+
+ if (high <= textlow || low > texthigh)
@@ -61042,7 +61061,7 @@ index 96dda62..d6c6a52 100644
kfree(s);
diff --git a/grsecurity/Kconfig b/grsecurity/Kconfig
new file mode 100644
-index 0000000..a326c8d
+index 0000000..6d22fbe
--- /dev/null
+++ b/grsecurity/Kconfig
@@ -0,0 +1,1112 @@
@@ -61651,7 +61670,7 @@ index 0000000..a326c8d
+config GRKERNSEC_CHROOT_INITRD
+ bool "Exempt initrd tasks from restrictions"
+ default y if GRKERNSEC_CONFIG_AUTO
-+ depends on GRKERNSEC_CHROOT && BLK_DEV_RAM
++ depends on GRKERNSEC_CHROOT && BLK_DEV_INITRD
+ help
+ If you say Y here, tasks started prior to init will be exempted from
+ grsecurity's chroot restrictions. This option is mainly meant to
@@ -62160,7 +62179,7 @@ index 0000000..a326c8d
+endmenu
diff --git a/grsecurity/Makefile b/grsecurity/Makefile
new file mode 100644
-index 0000000..0bc0a5c
+index 0000000..85beb79
--- /dev/null
+++ b/grsecurity/Makefile
@@ -0,0 +1,43 @@
@@ -62181,7 +62200,7 @@ index 0000000..0bc0a5c
+
+obj-$(CONFIG_GRKERNSEC) += grsec_init.o grsum.o gracl.o gracl_segv.o \
+ gracl_cap.o gracl_alloc.o gracl_shm.o grsec_mem.o gracl_fs.o \
-+ gracl_learn.o grsec_log.o
++ gracl_learn.o grsec_log.o gracl_policy.o
+ifdef CONFIG_COMPAT
+obj-$(CONFIG_GRKERNSEC) += gracl_compat.o
+endif
@@ -62209,10 +62228,10 @@ index 0000000..0bc0a5c
+endif
diff --git a/grsecurity/gracl.c b/grsecurity/gracl.c
new file mode 100644
-index 0000000..c0793fd
+index 0000000..857c960
--- /dev/null
+++ b/grsecurity/gracl.c
-@@ -0,0 +1,4178 @@
+@@ -0,0 +1,2623 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -62254,48 +62273,27 @@ index 0000000..c0793fd
+#include <asm/errno.h>
+#include <asm/mman.h>
+
-+extern struct lglock vfsmount_lock;
-+
-+static struct acl_role_db acl_role_set;
-+static struct name_db name_set;
-+static struct inodev_db inodev_set;
-+
-+/* for keeping track of userspace pointers used for subjects, so we
-+ can share references in the kernel as well
-+*/
-+
-+static struct path real_root;
++#define FOR_EACH_ROLE_START(role) \
++ role = running_polstate.role_list; \
++ while (role) {
+
-+static struct acl_subj_map_db subj_map_set;
++#define FOR_EACH_ROLE_END(role) \
++ role = role->prev; \
++ }
+
-+static struct acl_role_label *default_role;
++extern struct lglock vfsmount_lock;
+
-+static struct acl_role_label *role_list;
++extern struct path gr_real_root;
+
-+static u16 acl_sp_role_value;
++static struct gr_policy_state running_polstate;
++struct gr_policy_state *polstate = &running_polstate;
++extern struct gr_alloc_state *current_alloc_state;
+
+extern char *gr_shared_page[4];
-+static DEFINE_MUTEX(gr_dev_mutex);
+DEFINE_RWLOCK(gr_inode_lock);
+
-+struct gr_arg *gr_usermode;
-+
+static unsigned int gr_status __read_only = GR_STATUS_INIT;
+
-+extern int chkpw(struct gr_arg *entry, unsigned char *salt, unsigned char *sum);
-+extern void gr_clear_learn_entries(void);
-+
-+unsigned char *gr_system_salt;
-+unsigned char *gr_system_sum;
-+
-+static struct sprole_pw **acl_special_roles = NULL;
-+static __u16 num_sprole_pws = 0;
-+
-+static struct acl_role_label *kernel_role = NULL;
-+
-+static unsigned int gr_auth_attempts = 0;
-+static unsigned long gr_auth_expires = 0UL;
-+
+#ifdef CONFIG_NET
+extern struct vfsmount *sock_mnt;
+#endif
@@ -62307,156 +62305,29 @@ index 0000000..c0793fd
+extern struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
+#endif
+
-+static struct acl_object_label *fakefs_obj_rw;
-+static struct acl_object_label *fakefs_obj_rwx;
-+
-+extern int gr_init_uidset(void);
-+extern void gr_free_uidset(void);
-+extern void gr_remove_uid(uid_t uid);
-+extern int gr_find_uid(uid_t uid);
-+
-+static int copy_acl_object_label_normal(struct acl_object_label *obj, const struct acl_object_label *userp)
-+{
-+ if (copy_from_user(obj, userp, sizeof(struct acl_object_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_acl_ip_label_normal(struct acl_ip_label *ip, const struct acl_ip_label *userp)
-+{
-+ if (copy_from_user(ip, userp, sizeof(struct acl_ip_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_acl_subject_label_normal(struct acl_subject_label *subj, const struct acl_subject_label *userp)
-+{
-+ if (copy_from_user(subj, userp, sizeof(struct acl_subject_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_acl_role_label_normal(struct acl_role_label *role, const struct acl_role_label *userp)
-+{
-+ if (copy_from_user(role, userp, sizeof(struct acl_role_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_role_allowed_ip_normal(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp)
-+{
-+ if (copy_from_user(roleip, userp, sizeof(struct role_allowed_ip)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_sprole_pw_normal(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp)
-+{
-+ if (copy_from_user(pw, userp + idx, sizeof(struct sprole_pw)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_gr_hash_struct_normal(struct gr_hash_struct *hash, const struct gr_hash_struct *userp)
-+{
-+ if (copy_from_user(hash, userp, sizeof(struct gr_hash_struct)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
++extern u16 acl_sp_role_value;
++extern struct acl_object_label *fakefs_obj_rw;
++extern struct acl_object_label *fakefs_obj_rwx;
+
-+static int copy_role_transition_normal(struct role_transition *trans, const struct role_transition *userp)
++int gr_acl_is_enabled(void)
+{
-+ if (copy_from_user(trans, userp, sizeof(struct role_transition)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+int copy_pointer_from_array_normal(void *ptr, unsigned long idx, const void *userp)
-+{
-+ if (copy_from_user(ptr, userp + (idx * sizeof(void *)), sizeof(void *)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_gr_arg_wrapper_normal(const char __user *buf, struct gr_arg_wrapper *uwrap)
-+{
-+ if (copy_from_user(uwrap, buf, sizeof (struct gr_arg_wrapper)))
-+ return -EFAULT;
-+
-+ if ((uwrap->version != GRSECURITY_VERSION) || (uwrap->size != sizeof(struct gr_arg)))
-+ return -EINVAL;
-+
-+ return 0;
++ return (gr_status & GR_READY);
+}
+
-+static int copy_gr_arg_normal(const struct gr_arg __user *buf, struct gr_arg *arg)
++void gr_enable_rbac_system(void)
+{
-+ if (copy_from_user(arg, buf, sizeof (struct gr_arg)))
-+ return -EFAULT;
-+
-+ return 0;
++ pax_open_kernel();
++ gr_status |= GR_READY;
++ pax_close_kernel();
+}
+
-+static size_t get_gr_arg_wrapper_size_normal(void)
++int gr_rbac_disable(void *unused)
+{
-+ return sizeof(struct gr_arg_wrapper);
-+}
-+
-+#ifdef CONFIG_COMPAT
-+extern int copy_gr_arg_wrapper_compat(const char *buf, struct gr_arg_wrapper *uwrap);
-+extern int copy_gr_arg_compat(const struct gr_arg __user *buf, struct gr_arg *arg);
-+extern int copy_acl_object_label_compat(struct acl_object_label *obj, const struct acl_object_label *userp);
-+extern int copy_acl_subject_label_compat(struct acl_subject_label *subj, const struct acl_subject_label *userp);
-+extern int copy_acl_role_label_compat(struct acl_role_label *role, const struct acl_role_label *userp);
-+extern int copy_role_allowed_ip_compat(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp);
-+extern int copy_role_transition_compat(struct role_transition *trans, const struct role_transition *userp);
-+extern int copy_gr_hash_struct_compat(struct gr_hash_struct *hash, const struct gr_hash_struct *userp);
-+extern int copy_pointer_from_array_compat(void *ptr, unsigned long idx, const void *userp);
-+extern int copy_acl_ip_label_compat(struct acl_ip_label *ip, const struct acl_ip_label *userp);
-+extern int copy_sprole_pw_compat(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp);
-+extern size_t get_gr_arg_wrapper_size_compat(void);
++ pax_open_kernel();
++ gr_status &= ~GR_READY;
++ pax_close_kernel();
+
-+int (* copy_gr_arg_wrapper)(const char *buf, struct gr_arg_wrapper *uwrap) __read_only;
-+int (* copy_gr_arg)(const struct gr_arg *buf, struct gr_arg *arg) __read_only;
-+int (* copy_acl_object_label)(struct acl_object_label *obj, const struct acl_object_label *userp) __read_only;
-+int (* copy_acl_subject_label)(struct acl_subject_label *subj, const struct acl_subject_label *userp) __read_only;
-+int (* copy_acl_role_label)(struct acl_role_label *role, const struct acl_role_label *userp) __read_only;
-+int (* copy_acl_ip_label)(struct acl_ip_label *ip, const struct acl_ip_label *userp) __read_only;
-+int (* copy_pointer_from_array)(void *ptr, unsigned long idx, const void *userp) __read_only;
-+int (* copy_sprole_pw)(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp) __read_only;
-+int (* copy_gr_hash_struct)(struct gr_hash_struct *hash, const struct gr_hash_struct *userp) __read_only;
-+int (* copy_role_transition)(struct role_transition *trans, const struct role_transition *userp) __read_only;
-+int (* copy_role_allowed_ip)(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp) __read_only;
-+size_t (* get_gr_arg_wrapper_size)(void) __read_only;
-+
-+#else
-+#define copy_gr_arg_wrapper copy_gr_arg_wrapper_normal
-+#define copy_gr_arg copy_gr_arg_normal
-+#define copy_gr_hash_struct copy_gr_hash_struct_normal
-+#define copy_acl_object_label copy_acl_object_label_normal
-+#define copy_acl_subject_label copy_acl_subject_label_normal
-+#define copy_acl_role_label copy_acl_role_label_normal
-+#define copy_acl_ip_label copy_acl_ip_label_normal
-+#define copy_pointer_from_array copy_pointer_from_array_normal
-+#define copy_sprole_pw copy_sprole_pw_normal
-+#define copy_role_transition copy_role_transition_normal
-+#define copy_role_allowed_ip copy_role_allowed_ip_normal
-+#define get_gr_arg_wrapper_size get_gr_arg_wrapper_size_normal
-+#endif
-+
-+__inline__ int
-+gr_acl_is_enabled(void)
-+{
-+ return (gr_status & GR_READY);
++ return 0;
+}
+
+static inline dev_t __get_dev(const struct dentry *dentry)
@@ -62520,7 +62391,7 @@ index 0000000..c0793fd
+ return 0;
+}
+
-+static int
++int
+gr_streq(const char *a, const char *b, const unsigned int lena, const unsigned int lenb)
+{
+ if (likely(lena != lenb))
@@ -62627,9 +62498,9 @@ index 0000000..c0793fd
+ path.dentry = (struct dentry *)dentry;
+ path.mnt = (struct vfsmount *)vfsmnt;
+
-+ /* we can use real_root.dentry, real_root.mnt, because this is only called
++ /* we can use gr_real_root.dentry, gr_real_root.mnt, because this is only called
+ by the RBAC system */
-+ res = gen_full_path(&path, &real_root, buf, buflen);
++ res = gen_full_path(&path, &gr_real_root, buf, buflen);
+
+ return res;
+}
@@ -62646,7 +62517,7 @@ index 0000000..c0793fd
+ path.dentry = (struct dentry *)dentry;
+ path.mnt = (struct vfsmount *)vfsmnt;
+
-+ /* we can't use real_root.dentry, real_root.mnt, because they belong only to the RBAC system */
++ /* we can't use gr_real_root.dentry, gr_real_root.mnt, because they belong only to the RBAC system */
+ get_fs_root(reaper->fs, &root);
+
+ br_read_lock(&vfsmount_lock);
@@ -62659,7 +62530,7 @@ index 0000000..c0793fd
+ return res;
+}
+
-+static char *
++char *
+gr_to_filename_rbac(const struct dentry *dentry, const struct vfsmount *mnt)
+{
+ char *ret;
@@ -62737,54 +62608,17 @@ index 0000000..c0793fd
+ return (((reqmode & ~GR_AUDITS) << 10) | ((reqmode & GR_WRITE) ? GR_AUDIT_APPEND : 0));
+}
+
-+struct acl_subject_label *
-+lookup_subject_map(const struct acl_subject_label *userp)
-+{
-+ unsigned int index = gr_shash(userp, subj_map_set.s_size);
-+ struct subject_map *match;
-+
-+ match = subj_map_set.s_hash[index];
-+
-+ while (match && match->user != userp)
-+ match = match->next;
-+
-+ if (match != NULL)
-+ return match->kernel;
-+ else
-+ return NULL;
-+}
-+
-+static void
-+insert_subj_map_entry(struct subject_map *subjmap)
-+{
-+ unsigned int index = gr_shash(subjmap->user, subj_map_set.s_size);
-+ struct subject_map **curr;
-+
-+ subjmap->prev = NULL;
-+
-+ curr = &subj_map_set.s_hash[index];
-+ if (*curr != NULL)
-+ (*curr)->prev = subjmap;
-+
-+ subjmap->next = *curr;
-+ *curr = subjmap;
-+
-+ return;
-+}
-+
-+static struct acl_role_label *
-+lookup_acl_role_label(const struct task_struct *task, const uid_t uid,
++struct acl_role_label *
++__lookup_acl_role_label(const struct gr_policy_state *state, const struct task_struct *task, const uid_t uid,
+ const gid_t gid)
+{
-+ unsigned int index = gr_rhash(uid, GR_ROLE_USER, acl_role_set.r_size);
++ unsigned int index = gr_rhash(uid, GR_ROLE_USER, state->acl_role_set.r_size);
+ struct acl_role_label *match;
+ struct role_allowed_ip *ipp;
+ unsigned int x;
-+ u32 curr_ip = task->signal->curr_ip;
++ u32 curr_ip = task->signal->saved_ip;
+
-+ task->signal->saved_ip = curr_ip;
-+
-+ match = acl_role_set.r_hash[index];
++ match = state->acl_role_set.r_hash[index];
+
+ while (match) {
+ if ((match->roletype & (GR_ROLE_DOMAIN | GR_ROLE_USER)) == (GR_ROLE_DOMAIN | GR_ROLE_USER)) {
@@ -62799,8 +62633,8 @@ index 0000000..c0793fd
+found:
+ if (match == NULL) {
+ try_group:
-+ index = gr_rhash(gid, GR_ROLE_GROUP, acl_role_set.r_size);
-+ match = acl_role_set.r_hash[index];
++ index = gr_rhash(gid, GR_ROLE_GROUP, state->acl_role_set.r_size);
++ match = state->acl_role_set.r_hash[index];
+
+ while (match) {
+ if ((match->roletype & (GR_ROLE_DOMAIN | GR_ROLE_GROUP)) == (GR_ROLE_DOMAIN | GR_ROLE_GROUP)) {
@@ -62814,7 +62648,7 @@ index 0000000..c0793fd
+ }
+found2:
+ if (match == NULL)
-+ match = default_role;
++ match = state->default_role;
+ if (match->allowed_ips == NULL)
+ return match;
+ else {
@@ -62824,7 +62658,7 @@ index 0000000..c0793fd
+ (ntohl(ipp->addr) & ipp->netmask)))
+ return match;
+ }
-+ match = default_role;
++ match = state->default_role;
+ }
+ } else if (match->allowed_ips == NULL) {
+ return match;
@@ -62841,6 +62675,13 @@ index 0000000..c0793fd
+ return match;
+}
+
++static struct acl_role_label *
++lookup_acl_role_label(const struct task_struct *task, const uid_t uid,
++ const gid_t gid)
++{
++ return __lookup_acl_role_label(&running_polstate, task, uid, gid);
++}
++
+struct acl_subject_label *
+lookup_acl_subj_label(const ino_t ino, const dev_t dev,
+ const struct acl_role_label *role)
@@ -62931,15 +62772,15 @@ index 0000000..c0793fd
+ return NULL;
+}
+
-+static struct name_entry *
-+lookup_name_entry(const char *name)
++struct name_entry *
++__lookup_name_entry(const struct gr_policy_state *state, const char *name)
+{
+ unsigned int len = strlen(name);
+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
++ unsigned int index = key % state->name_set.n_size;
+ struct name_entry *match;
+
-+ match = name_set.n_hash[index];
++ match = state->name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len)))
+ match = match->next;
@@ -62948,14 +62789,20 @@ index 0000000..c0793fd
+}
+
+static struct name_entry *
++lookup_name_entry(const char *name)
++{
++ return __lookup_name_entry(&running_polstate, name);
++}
++
++static struct name_entry *
+lookup_name_entry_create(const char *name)
+{
+ unsigned int len = strlen(name);
+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
++ unsigned int index = key % running_polstate.name_set.n_size;
+ struct name_entry *match;
+
-+ match = name_set.n_hash[index];
++ match = running_polstate.name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len) ||
+ !match->deleted))
@@ -62964,7 +62811,7 @@ index 0000000..c0793fd
+ if (match && match->deleted)
+ return match;
+
-+ match = name_set.n_hash[index];
++ match = running_polstate.name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len) ||
+ match->deleted))
@@ -62979,10 +62826,10 @@ index 0000000..c0793fd
+static struct inodev_entry *
+lookup_inodev_entry(const ino_t ino, const dev_t dev)
+{
-+ unsigned int index = gr_fhash(ino, dev, inodev_set.i_size);
++ unsigned int index = gr_fhash(ino, dev, running_polstate.inodev_set.i_size);
+ struct inodev_entry *match;
+
-+ match = inodev_set.i_hash[index];
++ match = running_polstate.inodev_set.i_hash[index];
+
+ while (match && (match->nentry->inode != ino || match->nentry->device != dev))
+ match = match->next;
@@ -62990,16 +62837,16 @@ index 0000000..c0793fd
+ return match;
+}
+
-+static void
-+insert_inodev_entry(struct inodev_entry *entry)
++void
++__insert_inodev_entry(const struct gr_policy_state *state, struct inodev_entry *entry)
+{
+ unsigned int index = gr_fhash(entry->nentry->inode, entry->nentry->device,
-+ inodev_set.i_size);
++ state->inodev_set.i_size);
+ struct inodev_entry **curr;
+
+ entry->prev = NULL;
+
-+ curr = &inodev_set.i_hash[index];
++ curr = &state->inodev_set.i_hash[index];
+ if (*curr != NULL)
+ (*curr)->prev = entry;
+
@@ -63010,138 +62857,12 @@ index 0000000..c0793fd
+}
+
+static void
-+__insert_acl_role_label(struct acl_role_label *role, uid_t uidgid)
-+{
-+ unsigned int index =
-+ gr_rhash(uidgid, role->roletype & (GR_ROLE_USER | GR_ROLE_GROUP), acl_role_set.r_size);
-+ struct acl_role_label **curr;
-+ struct acl_role_label *tmp, *tmp2;
-+
-+ curr = &acl_role_set.r_hash[index];
-+
-+ /* simple case, slot is empty, just set it to our role */
-+ if (*curr == NULL) {
-+ *curr = role;
-+ } else {
-+ /* example:
-+ 1 -> 2 -> 3 (adding 2 -> 3 to here)
-+ 2 -> 3
-+ */
-+ /* first check to see if we can already be reached via this slot */
-+ tmp = *curr;
-+ while (tmp && tmp != role)
-+ tmp = tmp->next;
-+ if (tmp == role) {
-+ /* we don't need to add ourselves to this slot's chain */
-+ return;
-+ }
-+ /* we need to add ourselves to this chain, two cases */
-+ if (role->next == NULL) {
-+ /* simple case, append the current chain to our role */
-+ role->next = *curr;
-+ *curr = role;
-+ } else {
-+ /* 1 -> 2 -> 3 -> 4
-+ 2 -> 3 -> 4
-+ 3 -> 4 (adding 1 -> 2 -> 3 -> 4 to here)
-+ */
-+ /* trickier case: walk our role's chain until we find
-+ the role for the start of the current slot's chain */
-+ tmp = role;
-+ tmp2 = *curr;
-+ while (tmp->next && tmp->next != tmp2)
-+ tmp = tmp->next;
-+ if (tmp->next == tmp2) {
-+ /* from example above, we found 3, so just
-+ replace this slot's chain with ours */
-+ *curr = role;
-+ } else {
-+ /* we didn't find a subset of our role's chain
-+ in the current slot's chain, so append their
-+ chain to ours, and set us as the first role in
-+ the slot's chain
-+
-+ we could fold this case with the case above,
-+ but making it explicit for clarity
-+ */
-+ tmp->next = tmp2;
-+ *curr = role;
-+ }
-+ }
-+ }
-+
-+ return;
-+}
-+
-+static void
-+insert_acl_role_label(struct acl_role_label *role)
-+{
-+ int i;
-+
-+ if (role_list == NULL) {
-+ role_list = role;
-+ role->prev = NULL;
-+ } else {
-+ role->prev = role_list;
-+ role_list = role;
-+ }
-+
-+ /* used for hash chains */
-+ role->next = NULL;
-+
-+ if (role->roletype & GR_ROLE_DOMAIN) {
-+ for (i = 0; i < role->domain_child_num; i++)
-+ __insert_acl_role_label(role, role->domain_children[i]);
-+ } else
-+ __insert_acl_role_label(role, role->uidgid);
-+}
-+
-+static int
-+insert_name_entry(char *name, const ino_t inode, const dev_t device, __u8 deleted)
++insert_inodev_entry(struct inodev_entry *entry)
+{
-+ struct name_entry **curr, *nentry;
-+ struct inodev_entry *ientry;
-+ unsigned int len = strlen(name);
-+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
-+
-+ curr = &name_set.n_hash[index];
-+
-+ while (*curr && ((*curr)->key != key || !gr_streq((*curr)->name, name, (*curr)->len, len)))
-+ curr = &((*curr)->next);
-+
-+ if (*curr != NULL)
-+ return 1;
-+
-+ nentry = acl_alloc(sizeof (struct name_entry));
-+ if (nentry == NULL)
-+ return 0;
-+ ientry = acl_alloc(sizeof (struct inodev_entry));
-+ if (ientry == NULL)
-+ return 0;
-+ ientry->nentry = nentry;
-+
-+ nentry->key = key;
-+ nentry->name = name;
-+ nentry->inode = inode;
-+ nentry->device = device;
-+ nentry->len = len;
-+ nentry->deleted = deleted;
-+
-+ nentry->prev = NULL;
-+ curr = &name_set.n_hash[index];
-+ if (*curr != NULL)
-+ (*curr)->prev = nentry;
-+ nentry->next = *curr;
-+ *curr = nentry;
-+
-+ /* insert us into the table searchable by inode/dev */
-+ insert_inodev_entry(ientry);
-+
-+ return 1;
++ __insert_inodev_entry(&running_polstate, entry);
+}
+
-+static void
++void
+insert_acl_obj_label(struct acl_object_label *obj,
+ struct acl_subject_label *subj)
+{
@@ -63149,7 +62870,6 @@ index 0000000..c0793fd
+ gr_fhash(obj->inode, obj->device, subj->obj_hash_size);
+ struct acl_object_label **curr;
+
-+
+ obj->prev = NULL;
+
+ curr = &subj->obj_hash[index];
@@ -63162,7 +62882,7 @@ index 0000000..c0793fd
+ return;
+}
+
-+static void
++void
+insert_acl_subj_label(struct acl_subject_label *obj,
+ struct acl_role_label *role)
+{
@@ -63181,774 +62901,6 @@ index 0000000..c0793fd
+ return;
+}
+
-+/* allocating chained hash tables, so optimal size is where lambda ~ 1 */
-+
-+static void *
-+create_table(__u32 * len, int elementsize)
-+{
-+ unsigned int table_sizes[] = {
-+ 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381,
-+ 32749, 65521, 131071, 262139, 524287, 1048573, 2097143,
-+ 4194301, 8388593, 16777213, 33554393, 67108859
-+ };
-+ void *newtable = NULL;
-+ unsigned int pwr = 0;
-+
-+ while ((pwr < ((sizeof (table_sizes) / sizeof (table_sizes[0])) - 1)) &&
-+ table_sizes[pwr] <= *len)
-+ pwr++;
-+
-+ if (table_sizes[pwr] <= *len || (table_sizes[pwr] > ULONG_MAX / elementsize))
-+ return newtable;
-+
-+ if ((table_sizes[pwr] * elementsize) <= PAGE_SIZE)
-+ newtable =
-+ kmalloc(table_sizes[pwr] * elementsize, GFP_KERNEL);
-+ else
-+ newtable = vmalloc(table_sizes[pwr] * elementsize);
-+
-+ *len = table_sizes[pwr];
-+
-+ return newtable;
-+}
-+
-+static int
-+init_variables(const struct gr_arg *arg)
-+{
-+ struct task_struct *reaper = init_pid_ns.child_reaper;
-+ unsigned int stacksize;
-+
-+ subj_map_set.s_size = arg->role_db.num_subjects;
-+ acl_role_set.r_size = arg->role_db.num_roles + arg->role_db.num_domain_children;
-+ name_set.n_size = arg->role_db.num_objects;
-+ inodev_set.i_size = arg->role_db.num_objects;
-+
-+ if (!subj_map_set.s_size || !acl_role_set.r_size ||
-+ !name_set.n_size || !inodev_set.i_size)
-+ return 1;
-+
-+ if (!gr_init_uidset())
-+ return 1;
-+
-+ /* set up the stack that holds allocation info */
-+
-+ stacksize = arg->role_db.num_pointers + 5;
-+
-+ if (!acl_alloc_stack_init(stacksize))
-+ return 1;
-+
-+ /* grab reference for the real root dentry and vfsmount */
-+ get_fs_root(reaper->fs, &real_root);
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", __get_dev(real_root.dentry), real_root.dentry->d_inode->i_ino);
-+#endif
-+
-+ fakefs_obj_rw = acl_alloc(sizeof(struct acl_object_label));
-+ if (fakefs_obj_rw == NULL)
-+ return 1;
-+ fakefs_obj_rw->mode = GR_FIND | GR_READ | GR_WRITE;
-+
-+ fakefs_obj_rwx = acl_alloc(sizeof(struct acl_object_label));
-+ if (fakefs_obj_rwx == NULL)
-+ return 1;
-+ fakefs_obj_rwx->mode = GR_FIND | GR_READ | GR_WRITE | GR_EXEC;
-+
-+ subj_map_set.s_hash =
-+ (struct subject_map **) create_table(&subj_map_set.s_size, sizeof(void *));
-+ acl_role_set.r_hash =
-+ (struct acl_role_label **) create_table(&acl_role_set.r_size, sizeof(void *));
-+ name_set.n_hash = (struct name_entry **) create_table(&name_set.n_size, sizeof(void *));
-+ inodev_set.i_hash =
-+ (struct inodev_entry **) create_table(&inodev_set.i_size, sizeof(void *));
-+
-+ if (!subj_map_set.s_hash || !acl_role_set.r_hash ||
-+ !name_set.n_hash || !inodev_set.i_hash)
-+ return 1;
-+
-+ memset(subj_map_set.s_hash, 0,
-+ sizeof(struct subject_map *) * subj_map_set.s_size);
-+ memset(acl_role_set.r_hash, 0,
-+ sizeof (struct acl_role_label *) * acl_role_set.r_size);
-+ memset(name_set.n_hash, 0,
-+ sizeof (struct name_entry *) * name_set.n_size);
-+ memset(inodev_set.i_hash, 0,
-+ sizeof (struct inodev_entry *) * inodev_set.i_size);
-+
-+ return 0;
-+}
-+
-+/* free information not needed after startup
-+ currently contains user->kernel pointer mappings for subjects
-+*/
-+
-+static void
-+free_init_variables(void)
-+{
-+ __u32 i;
-+
-+ if (subj_map_set.s_hash) {
-+ for (i = 0; i < subj_map_set.s_size; i++) {
-+ if (subj_map_set.s_hash[i]) {
-+ kfree(subj_map_set.s_hash[i]);
-+ subj_map_set.s_hash[i] = NULL;
-+ }
-+ }
-+
-+ if ((subj_map_set.s_size * sizeof (struct subject_map *)) <=
-+ PAGE_SIZE)
-+ kfree(subj_map_set.s_hash);
-+ else
-+ vfree(subj_map_set.s_hash);
-+ }
-+
-+ return;
-+}
-+
-+static void
-+free_variables(void)
-+{
-+ struct acl_subject_label *s;
-+ struct acl_role_label *r;
-+ struct task_struct *task, *task2;
-+ unsigned int x;
-+
-+ gr_clear_learn_entries();
-+
-+ read_lock(&tasklist_lock);
-+ do_each_thread(task2, task) {
-+ task->acl_sp_role = 0;
-+ task->acl_role_id = 0;
-+ task->acl = NULL;
-+ task->role = NULL;
-+ } while_each_thread(task2, task);
-+ read_unlock(&tasklist_lock);
-+
-+ /* release the reference to the real root dentry and vfsmount */
-+ path_put(&real_root);
-+ memset(&real_root, 0, sizeof(real_root));
-+
-+ /* free all object hash tables */
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (r->subj_hash == NULL)
-+ goto next_role;
-+ FOR_EACH_SUBJECT_START(r, s, x)
-+ if (s->obj_hash == NULL)
-+ break;
-+ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
-+ kfree(s->obj_hash);
-+ else
-+ vfree(s->obj_hash);
-+ FOR_EACH_SUBJECT_END(s, x)
-+ FOR_EACH_NESTED_SUBJECT_START(r, s)
-+ if (s->obj_hash == NULL)
-+ break;
-+ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
-+ kfree(s->obj_hash);
-+ else
-+ vfree(s->obj_hash);
-+ FOR_EACH_NESTED_SUBJECT_END(s)
-+ if ((r->subj_hash_size * sizeof (struct acl_subject_label *)) <= PAGE_SIZE)
-+ kfree(r->subj_hash);
-+ else
-+ vfree(r->subj_hash);
-+ r->subj_hash = NULL;
-+next_role:
-+ FOR_EACH_ROLE_END(r)
-+
-+ acl_free_all();
-+
-+ if (acl_role_set.r_hash) {
-+ if ((acl_role_set.r_size * sizeof (struct acl_role_label *)) <=
-+ PAGE_SIZE)
-+ kfree(acl_role_set.r_hash);
-+ else
-+ vfree(acl_role_set.r_hash);
-+ }
-+ if (name_set.n_hash) {
-+ if ((name_set.n_size * sizeof (struct name_entry *)) <=
-+ PAGE_SIZE)
-+ kfree(name_set.n_hash);
-+ else
-+ vfree(name_set.n_hash);
-+ }
-+
-+ if (inodev_set.i_hash) {
-+ if ((inodev_set.i_size * sizeof (struct inodev_entry *)) <=
-+ PAGE_SIZE)
-+ kfree(inodev_set.i_hash);
-+ else
-+ vfree(inodev_set.i_hash);
-+ }
-+
-+ gr_free_uidset();
-+
-+ memset(&name_set, 0, sizeof (struct name_db));
-+ memset(&inodev_set, 0, sizeof (struct inodev_db));
-+ memset(&acl_role_set, 0, sizeof (struct acl_role_db));
-+ memset(&subj_map_set, 0, sizeof (struct acl_subj_map_db));
-+
-+ default_role = NULL;
-+ kernel_role = NULL;
-+ role_list = NULL;
-+
-+ return;
-+}
-+
-+static struct acl_subject_label *
-+do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied);
-+
-+static int alloc_and_copy_string(char **name, unsigned int maxlen)
-+{
-+ unsigned int len = strnlen_user(*name, maxlen);
-+ char *tmp;
-+
-+ if (!len || len >= maxlen)
-+ return -EINVAL;
-+
-+ if ((tmp = (char *) acl_alloc(len)) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(tmp, *name, len))
-+ return -EFAULT;
-+
-+ tmp[len-1] = '\0';
-+ *name = tmp;
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_glob(struct acl_object_label *obj)
-+{
-+ struct acl_object_label *g_tmp, **guser;
-+ int error;
-+
-+ if (obj->globbed == NULL)
-+ return 0;
-+
-+ guser = &obj->globbed;
-+ while (*guser) {
-+ g_tmp = (struct acl_object_label *)
-+ acl_alloc(sizeof (struct acl_object_label));
-+ if (g_tmp == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_acl_object_label(g_tmp, *guser))
-+ return -EFAULT;
-+
-+ error = alloc_and_copy_string(&g_tmp->filename, PATH_MAX);
-+ if (error)
-+ return error;
-+
-+ *guser = g_tmp;
-+ guser = &(g_tmp->next);
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_objs(struct acl_object_label *userp, struct acl_subject_label *subj,
-+ struct acl_role_label *role)
-+{
-+ struct acl_object_label *o_tmp;
-+ int ret;
-+
-+ while (userp) {
-+ if ((o_tmp = (struct acl_object_label *)
-+ acl_alloc(sizeof (struct acl_object_label))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_acl_object_label(o_tmp, userp))
-+ return -EFAULT;
-+
-+ userp = o_tmp->prev;
-+
-+ ret = alloc_and_copy_string(&o_tmp->filename, PATH_MAX);
-+ if (ret)
-+ return ret;
-+
-+ insert_acl_obj_label(o_tmp, subj);
-+ if (!insert_name_entry(o_tmp->filename, o_tmp->inode,
-+ o_tmp->device, (o_tmp->mode & GR_DELETED) ? 1 : 0))
-+ return -ENOMEM;
-+
-+ ret = copy_user_glob(o_tmp);
-+ if (ret)
-+ return ret;
-+
-+ if (o_tmp->nested) {
-+ int already_copied;
-+
-+ o_tmp->nested = do_copy_user_subj(o_tmp->nested, role, &already_copied);
-+ if (IS_ERR(o_tmp->nested))
-+ return PTR_ERR(o_tmp->nested);
-+
-+ /* insert into nested subject list if we haven't copied this one yet
-+ to prevent duplicate entries */
-+ if (!already_copied) {
-+ o_tmp->nested->next = role->hash->first;
-+ role->hash->first = o_tmp->nested;
-+ }
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static __u32
-+count_user_subjs(struct acl_subject_label *userp)
-+{
-+ struct acl_subject_label s_tmp;
-+ __u32 num = 0;
-+
-+ while (userp) {
-+ if (copy_acl_subject_label(&s_tmp, userp))
-+ break;
-+
-+ userp = s_tmp.prev;
-+ }
-+
-+ return num;
-+}
-+
-+static int
-+copy_user_allowedips(struct acl_role_label *rolep)
-+{
-+ struct role_allowed_ip *ruserip, *rtmp = NULL, *rlast;
-+
-+ ruserip = rolep->allowed_ips;
-+
-+ while (ruserip) {
-+ rlast = rtmp;
-+
-+ if ((rtmp = (struct role_allowed_ip *)
-+ acl_alloc(sizeof (struct role_allowed_ip))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_role_allowed_ip(rtmp, ruserip))
-+ return -EFAULT;
-+
-+ ruserip = rtmp->prev;
-+
-+ if (!rlast) {
-+ rtmp->prev = NULL;
-+ rolep->allowed_ips = rtmp;
-+ } else {
-+ rlast->next = rtmp;
-+ rtmp->prev = rlast;
-+ }
-+
-+ if (!ruserip)
-+ rtmp->next = NULL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_transitions(struct acl_role_label *rolep)
-+{
-+ struct role_transition *rusertp, *rtmp = NULL, *rlast;
-+ int error;
-+
-+ rusertp = rolep->transitions;
-+
-+ while (rusertp) {
-+ rlast = rtmp;
-+
-+ if ((rtmp = (struct role_transition *)
-+ acl_alloc(sizeof (struct role_transition))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_role_transition(rtmp, rusertp))
-+ return -EFAULT;
-+
-+ rusertp = rtmp->prev;
-+
-+ error = alloc_and_copy_string(&rtmp->rolename, GR_SPROLE_LEN);
-+ if (error)
-+ return error;
-+
-+ if (!rlast) {
-+ rtmp->prev = NULL;
-+ rolep->transitions = rtmp;
-+ } else {
-+ rlast->next = rtmp;
-+ rtmp->prev = rlast;
-+ }
-+
-+ if (!rusertp)
-+ rtmp->next = NULL;
-+ }
-+
-+ return 0;
-+}
-+
-+static __u32 count_user_objs(const struct acl_object_label __user *userp)
-+{
-+ struct acl_object_label o_tmp;
-+ __u32 num = 0;
-+
-+ while (userp) {
-+ if (copy_acl_object_label(&o_tmp, userp))
-+ break;
-+
-+ userp = o_tmp.prev;
-+ num++;
-+ }
-+
-+ return num;
-+}
-+
-+static struct acl_subject_label *
-+do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied)
-+{
-+ struct acl_subject_label *s_tmp = NULL, *s_tmp2;
-+ __u32 num_objs;
-+ struct acl_ip_label **i_tmp, *i_utmp2;
-+ struct gr_hash_struct ghash;
-+ struct subject_map *subjmap;
-+ unsigned int i_num;
-+ int err;
-+
-+ if (already_copied != NULL)
-+ *already_copied = 0;
-+
-+ s_tmp = lookup_subject_map(userp);
-+
-+ /* we've already copied this subject into the kernel, just return
-+ the reference to it, and don't copy it over again
-+ */
-+ if (s_tmp) {
-+ if (already_copied != NULL)
-+ *already_copied = 1;
-+ return(s_tmp);
-+ }
-+
-+ if ((s_tmp = (struct acl_subject_label *)
-+ acl_alloc(sizeof (struct acl_subject_label))) == NULL)
-+ return ERR_PTR(-ENOMEM);
-+
-+ subjmap = (struct subject_map *)kmalloc(sizeof (struct subject_map), GFP_KERNEL);
-+ if (subjmap == NULL)
-+ return ERR_PTR(-ENOMEM);
-+
-+ subjmap->user = userp;
-+ subjmap->kernel = s_tmp;
-+ insert_subj_map_entry(subjmap);
-+
-+ if (copy_acl_subject_label(s_tmp, userp))
-+ return ERR_PTR(-EFAULT);
-+
-+ err = alloc_and_copy_string(&s_tmp->filename, PATH_MAX);
-+ if (err)
-+ return ERR_PTR(err);
-+
-+ if (!strcmp(s_tmp->filename, "/"))
-+ role->root_label = s_tmp;
-+
-+ if (copy_gr_hash_struct(&ghash, s_tmp->hash))
-+ return ERR_PTR(-EFAULT);
-+
-+ /* copy user and group transition tables */
-+
-+ if (s_tmp->user_trans_num) {
-+ uid_t *uidlist;
-+
-+ uidlist = (uid_t *)acl_alloc_num(s_tmp->user_trans_num, sizeof(uid_t));
-+ if (uidlist == NULL)
-+ return ERR_PTR(-ENOMEM);
-+ if (copy_from_user(uidlist, s_tmp->user_transitions, s_tmp->user_trans_num * sizeof(uid_t)))
-+ return ERR_PTR(-EFAULT);
-+
-+ s_tmp->user_transitions = uidlist;
-+ }
-+
-+ if (s_tmp->group_trans_num) {
-+ gid_t *gidlist;
-+
-+ gidlist = (gid_t *)acl_alloc_num(s_tmp->group_trans_num, sizeof(gid_t));
-+ if (gidlist == NULL)
-+ return ERR_PTR(-ENOMEM);
-+ if (copy_from_user(gidlist, s_tmp->group_transitions, s_tmp->group_trans_num * sizeof(gid_t)))
-+ return ERR_PTR(-EFAULT);
-+
-+ s_tmp->group_transitions = gidlist;
-+ }
-+
-+ /* set up object hash table */
-+ num_objs = count_user_objs(ghash.first);
-+
-+ s_tmp->obj_hash_size = num_objs;
-+ s_tmp->obj_hash =
-+ (struct acl_object_label **)
-+ create_table(&(s_tmp->obj_hash_size), sizeof(void *));
-+
-+ if (!s_tmp->obj_hash)
-+ return ERR_PTR(-ENOMEM);
-+
-+ memset(s_tmp->obj_hash, 0,
-+ s_tmp->obj_hash_size *
-+ sizeof (struct acl_object_label *));
-+
-+ /* add in objects */
-+ err = copy_user_objs(ghash.first, s_tmp, role);
-+
-+ if (err)
-+ return ERR_PTR(err);
-+
-+ /* set pointer for parent subject */
-+ if (s_tmp->parent_subject) {
-+ s_tmp2 = do_copy_user_subj(s_tmp->parent_subject, role, NULL);
-+
-+ if (IS_ERR(s_tmp2))
-+ return s_tmp2;
-+
-+ s_tmp->parent_subject = s_tmp2;
-+ }
-+
-+ /* add in ip acls */
-+
-+ if (!s_tmp->ip_num) {
-+ s_tmp->ips = NULL;
-+ goto insert;
-+ }
-+
-+ i_tmp =
-+ (struct acl_ip_label **) acl_alloc_num(s_tmp->ip_num,
-+ sizeof (struct acl_ip_label *));
-+
-+ if (!i_tmp)
-+ return ERR_PTR(-ENOMEM);
-+
-+ for (i_num = 0; i_num < s_tmp->ip_num; i_num++) {
-+ *(i_tmp + i_num) =
-+ (struct acl_ip_label *)
-+ acl_alloc(sizeof (struct acl_ip_label));
-+ if (!*(i_tmp + i_num))
-+ return ERR_PTR(-ENOMEM);
-+
-+ if (copy_pointer_from_array(&i_utmp2, i_num, s_tmp->ips))
-+ return ERR_PTR(-EFAULT);
-+
-+ if (copy_acl_ip_label(*(i_tmp + i_num), i_utmp2))
-+ return ERR_PTR(-EFAULT);
-+
-+ if ((*(i_tmp + i_num))->iface == NULL)
-+ continue;
-+
-+ err = alloc_and_copy_string(&(*(i_tmp + i_num))->iface, IFNAMSIZ);
-+ if (err)
-+ return ERR_PTR(err);
-+ }
-+
-+ s_tmp->ips = i_tmp;
-+
-+insert:
-+ if (!insert_name_entry(s_tmp->filename, s_tmp->inode,
-+ s_tmp->device, (s_tmp->mode & GR_DELETED) ? 1 : 0))
-+ return ERR_PTR(-ENOMEM);
-+
-+ return s_tmp;
-+}
-+
-+static int
-+copy_user_subjs(struct acl_subject_label *userp, struct acl_role_label *role)
-+{
-+ struct acl_subject_label s_pre;
-+ struct acl_subject_label * ret;
-+ int err;
-+
-+ while (userp) {
-+ if (copy_acl_subject_label(&s_pre, userp))
-+ return -EFAULT;
-+
-+ ret = do_copy_user_subj(userp, role, NULL);
-+
-+ err = PTR_ERR(ret);
-+ if (IS_ERR(ret))
-+ return err;
-+
-+ insert_acl_subj_label(ret, role);
-+
-+ userp = s_pre.prev;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_acl(struct gr_arg *arg)
-+{
-+ struct acl_role_label *r_tmp = NULL, **r_utmp, *r_utmp2;
-+ struct acl_subject_label *subj_list;
-+ struct sprole_pw *sptmp;
-+ struct gr_hash_struct *ghash;
-+ uid_t *domainlist;
-+ unsigned int r_num;
-+ int err = 0;
-+ __u16 i;
-+ __u32 num_subjs;
-+
-+ /* we need a default and kernel role */
-+ if (arg->role_db.num_roles < 2)
-+ return -EINVAL;
-+
-+ /* copy special role authentication info from userspace */
-+
-+ num_sprole_pws = arg->num_sprole_pws;
-+ acl_special_roles = (struct sprole_pw **) acl_alloc_num(num_sprole_pws, sizeof(struct sprole_pw *));
-+
-+ if (!acl_special_roles && num_sprole_pws)
-+ return -ENOMEM;
-+
-+ for (i = 0; i < num_sprole_pws; i++) {
-+ sptmp = (struct sprole_pw *) acl_alloc(sizeof(struct sprole_pw));
-+ if (!sptmp)
-+ return -ENOMEM;
-+ if (copy_sprole_pw(sptmp, i, arg->sprole_pws))
-+ return -EFAULT;
-+
-+ err = alloc_and_copy_string((char **)&sptmp->rolename, GR_SPROLE_LEN);
-+ if (err)
-+ return err;
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Copying special role %s\n", sptmp->rolename);
-+#endif
-+
-+ acl_special_roles[i] = sptmp;
-+ }
-+
-+ r_utmp = (struct acl_role_label **) arg->role_db.r_table;
-+
-+ for (r_num = 0; r_num < arg->role_db.num_roles; r_num++) {
-+ r_tmp = acl_alloc(sizeof (struct acl_role_label));
-+
-+ if (!r_tmp)
-+ return -ENOMEM;
-+
-+ if (copy_pointer_from_array(&r_utmp2, r_num, r_utmp))
-+ return -EFAULT;
-+
-+ if (copy_acl_role_label(r_tmp, r_utmp2))
-+ return -EFAULT;
-+
-+ err = alloc_and_copy_string(&r_tmp->rolename, GR_SPROLE_LEN);
-+ if (err)
-+ return err;
-+
-+ if (!strcmp(r_tmp->rolename, "default")
-+ && (r_tmp->roletype & GR_ROLE_DEFAULT)) {
-+ default_role = r_tmp;
-+ } else if (!strcmp(r_tmp->rolename, ":::kernel:::")) {
-+ kernel_role = r_tmp;
-+ }
-+
-+ if ((ghash = (struct gr_hash_struct *) acl_alloc(sizeof(struct gr_hash_struct))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_gr_hash_struct(ghash, r_tmp->hash))
-+ return -EFAULT;
-+
-+ r_tmp->hash = ghash;
-+
-+ num_subjs = count_user_subjs(r_tmp->hash->first);
-+
-+ r_tmp->subj_hash_size = num_subjs;
-+ r_tmp->subj_hash =
-+ (struct acl_subject_label **)
-+ create_table(&(r_tmp->subj_hash_size), sizeof(void *));
-+
-+ if (!r_tmp->subj_hash)
-+ return -ENOMEM;
-+
-+ err = copy_user_allowedips(r_tmp);
-+ if (err)
-+ return err;
-+
-+ /* copy domain info */
-+ if (r_tmp->domain_children != NULL) {
-+ domainlist = acl_alloc_num(r_tmp->domain_child_num, sizeof(uid_t));
-+ if (domainlist == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(domainlist, r_tmp->domain_children, r_tmp->domain_child_num * sizeof(uid_t)))
-+ return -EFAULT;
-+
-+ r_tmp->domain_children = domainlist;
-+ }
-+
-+ err = copy_user_transitions(r_tmp);
-+ if (err)
-+ return err;
-+
-+ memset(r_tmp->subj_hash, 0,
-+ r_tmp->subj_hash_size *
-+ sizeof (struct acl_subject_label *));
-+
-+ /* acquire the list of subjects, then NULL out
-+ the list prior to parsing the subjects for this role,
-+ as during this parsing the list is replaced with a list
-+ of *nested* subjects for the role
-+ */
-+ subj_list = r_tmp->hash->first;
-+
-+ /* set nested subject list to null */
-+ r_tmp->hash->first = NULL;
-+
-+ err = copy_user_subjs(subj_list, r_tmp);
-+
-+ if (err)
-+ return err;
-+
-+ insert_acl_role_label(r_tmp);
-+ }
-+
-+ if (default_role == NULL || kernel_role == NULL)
-+ return -EINVAL;
-+
-+ return err;
-+}
-+
-+static int
-+gracl_init(struct gr_arg *args)
-+{
-+ int error = 0;
-+
-+ memcpy(gr_system_salt, args->salt, GR_SALT_LEN);
-+ memcpy(gr_system_sum, args->sum, GR_SHA_LEN);
-+
-+ if (init_variables(args)) {
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
-+ error = -ENOMEM;
-+ free_variables();
-+ goto out;
-+ }
-+
-+ error = copy_user_acl(args);
-+ free_init_variables();
-+ if (error) {
-+ free_variables();
-+ goto out;
-+ }
-+
-+ if ((error = gr_set_acls(0))) {
-+ free_variables();
-+ goto out;
-+ }
-+
-+ pax_open_kernel();
-+ gr_status |= GR_READY;
-+ pax_close_kernel();
-+
-+ out:
-+ return error;
-+}
-+
+/* derived from glibc fnmatch() 0: match, 1: no match*/
+
+static int
@@ -64188,7 +63140,7 @@ index 0000000..c0793fd
+ }
+
+ for (;;) {
-+ if (dentry == real_root.dentry && mnt == real_root.mnt)
++ if (dentry == gr_real_root.dentry && mnt == gr_real_root.mnt)
+ break;
+
+ if (dentry == mnt->mnt_root || IS_ROOT(dentry)) {
@@ -64215,9 +63167,9 @@ index 0000000..c0793fd
+
+ retval = full_lookup(l_dentry, l_mnt, dentry, subj, &path, checkglob);
+
-+ /* real_root is pinned so we don't have to hold a reference */
++ /* gr_real_root is pinned so we don't have to hold a reference */
+ if (retval == NULL)
-+ retval = full_lookup(l_dentry, l_mnt, real_root.dentry, subj, &path, checkglob);
++ retval = full_lookup(l_dentry, l_mnt, gr_real_root.dentry, subj, &path, checkglob);
+out:
+ write_sequnlock(&rename_lock);
+ br_read_unlock(&vfsmount_lock);
@@ -64250,7 +63202,7 @@ index 0000000..c0793fd
+ return __chk_obj_label(l_dentry, l_mnt, subj, path, GR_CREATE_GLOB);
+}
+
-+static struct acl_subject_label *
++struct acl_subject_label *
+chk_subj_label(const struct dentry *l_dentry, const struct vfsmount *l_mnt,
+ const struct acl_role_label *role)
+{
@@ -64264,7 +63216,7 @@ index 0000000..c0793fd
+ write_seqlock(&rename_lock);
+
+ for (;;) {
-+ if (dentry == real_root.dentry && mnt == real_root.mnt)
++ if (dentry == gr_real_root.dentry && mnt == gr_real_root.mnt)
+ break;
+ if (dentry == mnt->mnt_root || IS_ROOT(dentry)) {
+ if (!mnt_has_parent(real_mnt))
@@ -64308,10 +63260,10 @@ index 0000000..c0793fd
+ spin_unlock(&dentry->d_lock);
+
+ if (unlikely(retval == NULL)) {
-+ /* real_root is pinned, we don't need to hold a reference */
++ /* gr_real_root is pinned, we don't need to hold a reference */
+ read_lock(&gr_inode_lock);
-+ retval = lookup_acl_subj_label(real_root.dentry->d_inode->i_ino,
-+ __get_dev(real_root.dentry), role);
++ retval = lookup_acl_subj_label(gr_real_root.dentry->d_inode->i_ino,
++ __get_dev(gr_real_root.dentry), role);
+ read_unlock(&gr_inode_lock);
+ }
+out:
@@ -64323,6 +63275,66 @@ index 0000000..c0793fd
+ return retval;
+}
+
++void
++assign_special_role(const char *rolename)
++{
++ struct acl_object_label *obj;
++ struct acl_role_label *r;
++ struct acl_role_label *assigned = NULL;
++ struct task_struct *tsk;
++ struct file *filp;
++
++ FOR_EACH_ROLE_START(r)
++ if (!strcmp(rolename, r->rolename) &&
++ (r->roletype & GR_ROLE_SPECIAL)) {
++ assigned = r;
++ break;
++ }
++ FOR_EACH_ROLE_END(r)
++
++ if (!assigned)
++ return;
++
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++
++ tsk = current->real_parent;
++ if (tsk == NULL)
++ goto out_unlock;
++
++ filp = tsk->exec_file;
++ if (filp == NULL)
++ goto out_unlock;
++
++ tsk->is_writable = 0;
++ tsk->inherited = 0;
++
++ tsk->acl_sp_role = 1;
++ tsk->acl_role_id = ++acl_sp_role_value;
++ tsk->role = assigned;
++ tsk->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role);
++
++ /* ignore additional mmap checks for processes that are writable
++ by the default ACL */
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ tsk->is_writable = 1;
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ tsk->is_writable = 1;
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Assigning special role:%s subject:%s to process (%s:%d)\n", tsk->role->rolename,
++ tsk->acl->filename, tsk->comm, task_pid_nr(tsk));
++#endif
++
++out_unlock:
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ return;
++}
++
++
+static void
+gr_log_learn(const struct dentry *dentry, const struct vfsmount *mnt, const __u32 mode)
+{
@@ -64365,6 +63377,67 @@ index 0000000..c0793fd
+ return;
+}
+
++static void
++gr_set_proc_res(struct task_struct *task)
++{
++ struct acl_subject_label *proc;
++ unsigned short i;
++
++ proc = task->acl;
++
++ if (proc->mode & (GR_LEARN | GR_INHERITLEARN))
++ return;
++
++ for (i = 0; i < RLIM_NLIMITS; i++) {
++ if (!(proc->resmask & (1U << i)))
++ continue;
++
++ task->signal->rlim[i].rlim_cur = proc->res[i].rlim_cur;
++ task->signal->rlim[i].rlim_max = proc->res[i].rlim_max;
++
++ if (i == RLIMIT_CPU)
++ update_rlimit_cpu(task, proc->res[i].rlim_cur);
++ }
++
++ return;
++}
++
++/* both of the below must be called with
++ rcu_read_lock();
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++*/
++
++void __gr_apply_subject_to_task(const struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj)
++{
++ struct acl_object_label *obj;
++ struct file *filp;
++
++ filp = task->exec_file;
++
++ task->acl = subj;
++ task->is_writable = 0;
++ /* ignore additional mmap checks for processes that are writable
++ by the default ACL */
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, state->default_role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ task->is_writable = 1;
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ task->is_writable = 1;
++
++ gr_set_proc_res(task);
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "gr_set_acls for (%s:%d): role:%s, subject:%s\n", task->comm, task_pid_nr(task), task->role->rolename, task->acl->filename);
++#endif
++}
++
++static void gr_apply_subject_to_task(struct task_struct *task, struct acl_subject_label *subj)
++{
++ __gr_apply_subject_to_task(&running_polstate, task, subj);
++}
++
+__u32
+gr_search_file(const struct dentry * dentry, const __u32 mode,
+ const struct vfsmount * mnt)
@@ -64394,7 +63467,7 @@ index 0000000..c0793fd
+ task->role = current->role;
+ rcu_read_lock();
+ read_lock(&grsec_exec_file_lock);
-+ gr_apply_subject_to_task(task);
++ gr_apply_subject_to_task(task, NULL);
+ read_unlock(&grsec_exec_file_lock);
+ rcu_read_unlock();
+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_INIT_TRANSFER_MSG);
@@ -64589,45 +63662,23 @@ index 0000000..c0793fd
+void
+gr_copy_label(struct task_struct *tsk)
+{
-+ tsk->signal->used_accept = 0;
-+ tsk->acl_sp_role = 0;
-+ tsk->acl_role_id = current->acl_role_id;
-+ tsk->acl = current->acl;
-+ tsk->role = current->role;
-+ tsk->signal->curr_ip = current->signal->curr_ip;
-+ tsk->signal->saved_ip = current->signal->saved_ip;
-+ if (current->exec_file)
-+ get_file(current->exec_file);
-+ tsk->exec_file = current->exec_file;
-+ tsk->is_writable = current->is_writable;
-+ if (unlikely(current->signal->used_accept)) {
-+ current->signal->curr_ip = 0;
-+ current->signal->saved_ip = 0;
-+ }
-+
-+ return;
-+}
-+
-+static void
-+gr_set_proc_res(struct task_struct *task)
-+{
-+ struct acl_subject_label *proc;
-+ unsigned short i;
-+
-+ proc = task->acl;
-+
-+ if (proc->mode & (GR_LEARN | GR_INHERITLEARN))
-+ return;
-+
-+ for (i = 0; i < RLIM_NLIMITS; i++) {
-+ if (!(proc->resmask & (1U << i)))
-+ continue;
-+
-+ task->signal->rlim[i].rlim_cur = proc->res[i].rlim_cur;
-+ task->signal->rlim[i].rlim_max = proc->res[i].rlim_max;
++ struct task_struct *p = current;
+
-+ if (i == RLIMIT_CPU)
-+ update_rlimit_cpu(task, proc->res[i].rlim_cur);
++ tsk->inherited = p->inherited;
++ tsk->acl_sp_role = 0;
++ tsk->acl_role_id = p->acl_role_id;
++ tsk->acl = p->acl;
++ tsk->role = p->role;
++ tsk->signal->used_accept = 0;
++ tsk->signal->curr_ip = p->signal->curr_ip;
++ tsk->signal->saved_ip = p->signal->saved_ip;
++ if (p->exec_file)
++ get_file(p->exec_file);
++ tsk->exec_file = p->exec_file;
++ tsk->is_writable = p->is_writable;
++ if (unlikely(p->signal->used_accept)) {
++ p->signal->curr_ip = 0;
++ p->signal->saved_ip = 0;
+ }
+
+ return;
@@ -64841,11 +63892,15 @@ index 0000000..c0793fd
+
+ /* kernel process, we'll give them the kernel role */
+ if (unlikely(!filp)) {
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
++ task->role = running_polstate.kernel_role;
++ task->acl = running_polstate.kernel_role->root_label;
+ return;
-+ } else if (!task->role || !(task->role->roletype & GR_ROLE_SPECIAL))
++ } else if (!task->role || !(task->role->roletype & GR_ROLE_SPECIAL)) {
++ /* save the current ip at time of role lookup so that the proper
++ IP will be learned for role_allowed_ip */
++ task->signal->saved_ip = task->signal->curr_ip;
+ role = lookup_acl_role_label(task, uid, gid);
++ }
+
+ /* don't change the role if we're not a privileged process */
+ if (role && task->role != role &&
@@ -64868,13 +63923,15 @@ index 0000000..c0793fd
+ (subj == task->acl)))
+ task->acl = subj;
+
++ /* leave task->inherited unaffected */
++
+ task->role = role;
+
+ task->is_writable = 0;
+
+ /* ignore additional mmap checks for processes that are writable
+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
+ if (unlikely(obj->mode & GR_WRITE))
+ task->is_writable = 1;
+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
@@ -64940,14 +63997,18 @@ index 0000000..c0793fd
+ task->acl = obj->nested;
+ else
+ task->acl = newacl;
-+ } else if (retmode & GR_INHERIT && retmode & GR_AUDIT_INHERIT)
-+ gr_log_str_fs(GR_DO_AUDIT, GR_INHERIT_ACL_MSG, task->acl->filename, dentry, mnt);
++ task->inherited = 0;
++ } else {
++ task->inherited = 1;
++ if (retmode & GR_INHERIT && retmode & GR_AUDIT_INHERIT)
++ gr_log_str_fs(GR_DO_AUDIT, GR_INHERIT_ACL_MSG, task->acl->filename, dentry, mnt);
++ }
+
+ task->is_writable = 0;
+
+ /* ignore additional mmap checks for processes that are writable
+ by the default ACL */
-+ obj = chk_obj_label(dentry, mnt, default_role->root_label);
++ obj = chk_obj_label(dentry, mnt, running_polstate.default_role->root_label);
+ if (unlikely(obj->mode & GR_WRITE))
+ task->is_writable = 1;
+ obj = chk_obj_label(dentry, mnt, task->role->root_label);
@@ -65090,10 +64151,10 @@ index 0000000..c0793fd
+update_inodev_entry(const ino_t oldinode, const dev_t olddevice,
+ const ino_t newinode, const dev_t newdevice)
+{
-+ unsigned int index = gr_fhash(oldinode, olddevice, inodev_set.i_size);
++ unsigned int index = gr_fhash(oldinode, olddevice, running_polstate.inodev_set.i_size);
+ struct inodev_entry *match;
+
-+ match = inodev_set.i_hash[index];
++ match = running_polstate.inodev_set.i_hash[index];
+
+ while (match && (match->nentry->inode != oldinode ||
+ match->nentry->device != olddevice || !match->nentry->deleted))
@@ -65103,7 +64164,7 @@ index 0000000..c0793fd
+ && (match->nentry->device == olddevice) &&
+ match->nentry->deleted) {
+ if (match->prev == NULL) {
-+ inodev_set.i_hash[index] = match->next;
++ running_polstate.inodev_set.i_hash[index] = match->next;
+ if (match->next != NULL)
+ match->next->prev = NULL;
+ } else {
@@ -65260,593 +64321,6 @@ index 0000000..c0793fd
+ return;
+}
+
-+static int
-+lookup_special_role_auth(__u16 mode, const char *rolename, unsigned char **salt,
-+ unsigned char **sum)
-+{
-+ struct acl_role_label *r;
-+ struct role_allowed_ip *ipp;
-+ struct role_transition *trans;
-+ unsigned int i;
-+ int found = 0;
-+ u32 curr_ip = current->signal->curr_ip;
-+
-+ current->signal->saved_ip = curr_ip;
-+
-+ /* check transition table */
-+
-+ for (trans = current->role->transitions; trans; trans = trans->next) {
-+ if (!strcmp(rolename, trans->rolename)) {
-+ found = 1;
-+ break;
-+ }
-+ }
-+
-+ if (!found)
-+ return 0;
-+
-+ /* handle special roles that do not require authentication
-+ and check ip */
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (!strcmp(rolename, r->rolename) &&
-+ (r->roletype & GR_ROLE_SPECIAL)) {
-+ found = 0;
-+ if (r->allowed_ips != NULL) {
-+ for (ipp = r->allowed_ips; ipp; ipp = ipp->next) {
-+ if ((ntohl(curr_ip) & ipp->netmask) ==
-+ (ntohl(ipp->addr) & ipp->netmask))
-+ found = 1;
-+ }
-+ } else
-+ found = 2;
-+ if (!found)
-+ return 0;
-+
-+ if (((mode == GR_SPROLE) && (r->roletype & GR_ROLE_NOPW)) ||
-+ ((mode == GR_SPROLEPAM) && (r->roletype & GR_ROLE_PAM))) {
-+ *salt = NULL;
-+ *sum = NULL;
-+ return 1;
-+ }
-+ }
-+ FOR_EACH_ROLE_END(r)
-+
-+ for (i = 0; i < num_sprole_pws; i++) {
-+ if (!strcmp(rolename, acl_special_roles[i]->rolename)) {
-+ *salt = acl_special_roles[i]->salt;
-+ *sum = acl_special_roles[i]->sum;
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+assign_special_role(char *rolename)
-+{
-+ struct acl_object_label *obj;
-+ struct acl_role_label *r;
-+ struct acl_role_label *assigned = NULL;
-+ struct task_struct *tsk;
-+ struct file *filp;
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (!strcmp(rolename, r->rolename) &&
-+ (r->roletype & GR_ROLE_SPECIAL)) {
-+ assigned = r;
-+ break;
-+ }
-+ FOR_EACH_ROLE_END(r)
-+
-+ if (!assigned)
-+ return;
-+
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+
-+ tsk = current->real_parent;
-+ if (tsk == NULL)
-+ goto out_unlock;
-+
-+ filp = tsk->exec_file;
-+ if (filp == NULL)
-+ goto out_unlock;
-+
-+ tsk->is_writable = 0;
-+
-+ tsk->acl_sp_role = 1;
-+ tsk->acl_role_id = ++acl_sp_role_value;
-+ tsk->role = assigned;
-+ tsk->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role);
-+
-+ /* ignore additional mmap checks for processes that are writable
-+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ tsk->is_writable = 1;
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ tsk->is_writable = 1;
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Assigning special role:%s subject:%s to process (%s:%d)\n", tsk->role->rolename, tsk->acl->filename, tsk->comm, task_pid_nr(tsk));
-+#endif
-+
-+out_unlock:
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ return;
-+}
-+
-+int gr_check_secure_terminal(struct task_struct *task)
-+{
-+ struct task_struct *p, *p2, *p3;
-+ struct files_struct *files;
-+ struct fdtable *fdt;
-+ struct file *our_file = NULL, *file;
-+ int i;
-+
-+ if (task->signal->tty == NULL)
-+ return 1;
-+
-+ files = get_files_struct(task);
-+ if (files != NULL) {
-+ rcu_read_lock();
-+ fdt = files_fdtable(files);
-+ for (i=0; i < fdt->max_fds; i++) {
-+ file = fcheck_files(files, i);
-+ if (file && (our_file == NULL) && (file->private_data == task->signal->tty)) {
-+ get_file(file);
-+ our_file = file;
-+ }
-+ }
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ }
-+
-+ if (our_file == NULL)
-+ return 1;
-+
-+ read_lock(&tasklist_lock);
-+ do_each_thread(p2, p) {
-+ files = get_files_struct(p);
-+ if (files == NULL ||
-+ (p->signal && p->signal->tty == task->signal->tty)) {
-+ if (files != NULL)
-+ put_files_struct(files);
-+ continue;
-+ }
-+ rcu_read_lock();
-+ fdt = files_fdtable(files);
-+ for (i=0; i < fdt->max_fds; i++) {
-+ file = fcheck_files(files, i);
-+ if (file && S_ISCHR(file->f_path.dentry->d_inode->i_mode) &&
-+ file->f_path.dentry->d_inode->i_rdev == our_file->f_path.dentry->d_inode->i_rdev) {
-+ p3 = task;
-+ while (task_pid_nr(p3) > 0) {
-+ if (p3 == p)
-+ break;
-+ p3 = p3->real_parent;
-+ }
-+ if (p3 == p)
-+ break;
-+ gr_log_ttysniff(GR_DONT_AUDIT_GOOD, GR_TTYSNIFF_ACL_MSG, p);
-+ gr_handle_alertkill(p);
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ read_unlock(&tasklist_lock);
-+ fput(our_file);
-+ return 0;
-+ }
-+ }
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ } while_each_thread(p2, p);
-+ read_unlock(&tasklist_lock);
-+
-+ fput(our_file);
-+ return 1;
-+}
-+
-+static int gr_rbac_disable(void *unused)
-+{
-+ pax_open_kernel();
-+ gr_status &= ~GR_READY;
-+ pax_close_kernel();
-+
-+ return 0;
-+}
-+
-+ssize_t
-+write_grsec_handler(struct file *file, const char __user * buf, size_t count, loff_t *ppos)
-+{
-+ struct gr_arg_wrapper uwrap;
-+ unsigned char *sprole_salt = NULL;
-+ unsigned char *sprole_sum = NULL;
-+ int error = 0;
-+ int error2 = 0;
-+ size_t req_count = 0;
-+
-+ mutex_lock(&gr_dev_mutex);
-+
-+ if ((gr_status & GR_READY) && !(current->acl->mode & GR_KERNELAUTH)) {
-+ error = -EPERM;
-+ goto out;
-+ }
-+
-+#ifdef CONFIG_COMPAT
-+ pax_open_kernel();
-+ if (is_compat_task()) {
-+ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_compat;
-+ copy_gr_arg = &copy_gr_arg_compat;
-+ copy_acl_object_label = &copy_acl_object_label_compat;
-+ copy_acl_subject_label = &copy_acl_subject_label_compat;
-+ copy_acl_role_label = &copy_acl_role_label_compat;
-+ copy_acl_ip_label = &copy_acl_ip_label_compat;
-+ copy_role_allowed_ip = &copy_role_allowed_ip_compat;
-+ copy_role_transition = &copy_role_transition_compat;
-+ copy_sprole_pw = &copy_sprole_pw_compat;
-+ copy_gr_hash_struct = &copy_gr_hash_struct_compat;
-+ copy_pointer_from_array = &copy_pointer_from_array_compat;
-+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat;
-+ } else {
-+ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_normal;
-+ copy_gr_arg = &copy_gr_arg_normal;
-+ copy_acl_object_label = &copy_acl_object_label_normal;
-+ copy_acl_subject_label = &copy_acl_subject_label_normal;
-+ copy_acl_role_label = &copy_acl_role_label_normal;
-+ copy_acl_ip_label = &copy_acl_ip_label_normal;
-+ copy_role_allowed_ip = &copy_role_allowed_ip_normal;
-+ copy_role_transition = &copy_role_transition_normal;
-+ copy_sprole_pw = &copy_sprole_pw_normal;
-+ copy_gr_hash_struct = &copy_gr_hash_struct_normal;
-+ copy_pointer_from_array = &copy_pointer_from_array_normal;
-+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_normal;
-+ }
-+ pax_close_kernel();
-+#endif
-+
-+ req_count = get_gr_arg_wrapper_size();
-+
-+ if (count != req_count) {
-+ gr_log_int_int(GR_DONT_AUDIT_GOOD, GR_DEV_ACL_MSG, (int)count, (int)req_count);
-+ error = -EINVAL;
-+ goto out;
-+ }
-+
-+
-+ if (gr_auth_expires && time_after_eq(get_seconds(), gr_auth_expires)) {
-+ gr_auth_expires = 0;
-+ gr_auth_attempts = 0;
-+ }
-+
-+ error = copy_gr_arg_wrapper(buf, &uwrap);
-+ if (error)
-+ goto out;
-+
-+ error = copy_gr_arg(uwrap.arg, gr_usermode);
-+ if (error)
-+ goto out;
-+
-+ if (gr_usermode->mode != GR_SPROLE && gr_usermode->mode != GR_SPROLEPAM &&
-+ gr_auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
-+ time_after(gr_auth_expires, get_seconds())) {
-+ error = -EBUSY;
-+ goto out;
-+ }
-+
-+ /* if non-root trying to do anything other than use a special role,
-+ do not attempt authentication, do not count towards authentication
-+ locking
-+ */
-+
-+ if (gr_usermode->mode != GR_SPROLE && gr_usermode->mode != GR_STATUS &&
-+ gr_usermode->mode != GR_UNSPROLE && gr_usermode->mode != GR_SPROLEPAM &&
-+ gr_is_global_nonroot(current_uid())) {
-+ error = -EPERM;
-+ goto out;
-+ }
-+
-+ /* ensure pw and special role name are null terminated */
-+
-+ gr_usermode->pw[GR_PW_LEN - 1] = '\0';
-+ gr_usermode->sp_role[GR_SPROLE_LEN - 1] = '\0';
-+
-+ /* Okay.
-+ * We have our enough of the argument structure..(we have yet
-+ * to copy_from_user the tables themselves) . Copy the tables
-+ * only if we need them, i.e. for loading operations. */
-+
-+ switch (gr_usermode->mode) {
-+ case GR_STATUS:
-+ if (gr_status & GR_READY) {
-+ error = 1;
-+ if (!gr_check_secure_terminal(current))
-+ error = 3;
-+ } else
-+ error = 2;
-+ goto out;
-+ case GR_SHUTDOWN:
-+ if ((gr_status & GR_READY)
-+ && !(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ stop_machine(gr_rbac_disable, NULL, NULL);
-+ free_variables();
-+ memset(gr_usermode, 0, sizeof (struct gr_arg));
-+ memset(gr_system_salt, 0, GR_SALT_LEN);
-+ memset(gr_system_sum, 0, GR_SHA_LEN);
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTS_ACL_MSG);
-+ } else if (gr_status & GR_READY) {
-+ gr_log_noargs(GR_DONT_AUDIT, GR_SHUTF_ACL_MSG);
-+ error = -EPERM;
-+ } else {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTI_ACL_MSG);
-+ error = -EAGAIN;
-+ }
-+ break;
-+ case GR_ENABLE:
-+ if (!(gr_status & GR_READY) && !(error2 = gracl_init(gr_usermode)))
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_ENABLE_ACL_MSG, GR_VERSION);
-+ else {
-+ if (gr_status & GR_READY)
-+ error = -EAGAIN;
-+ else
-+ error = error2;
-+ gr_log_str(GR_DONT_AUDIT, GR_ENABLEF_ACL_MSG, GR_VERSION);
-+ }
-+ break;
-+ case GR_RELOAD:
-+ if (!(gr_status & GR_READY)) {
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOADI_ACL_MSG, GR_VERSION);
-+ error = -EAGAIN;
-+ } else if (!(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ stop_machine(gr_rbac_disable, NULL, NULL);
-+ free_variables();
-+ error2 = gracl_init(gr_usermode);
-+ if (!error2)
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOAD_ACL_MSG, GR_VERSION);
-+ else {
-+ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
-+ error = error2;
-+ }
-+ } else {
-+ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
-+ error = -EPERM;
-+ }
-+ break;
-+ case GR_SEGVMOD:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (!(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODS_ACL_MSG);
-+ if (gr_usermode->segv_device && gr_usermode->segv_inode) {
-+ struct acl_subject_label *segvacl;
-+ segvacl =
-+ lookup_acl_subj_label(gr_usermode->segv_inode,
-+ gr_usermode->segv_device,
-+ current->role);
-+ if (segvacl) {
-+ segvacl->crashes = 0;
-+ segvacl->expires = 0;
-+ }
-+ } else if (gr_find_uid(gr_usermode->segv_uid) >= 0) {
-+ gr_remove_uid(gr_usermode->segv_uid);
-+ }
-+ } else {
-+ gr_log_noargs(GR_DONT_AUDIT, GR_SEGVMODF_ACL_MSG);
-+ error = -EPERM;
-+ }
-+ break;
-+ case GR_SPROLE:
-+ case GR_SPROLEPAM:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SPROLEI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (current->role->expires && time_after_eq(get_seconds(), current->role->expires)) {
-+ current->role->expires = 0;
-+ current->role->auth_attempts = 0;
-+ }
-+
-+ if (current->role->auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
-+ time_after(current->role->expires, get_seconds())) {
-+ error = -EBUSY;
-+ goto out;
-+ }
-+
-+ if (lookup_special_role_auth
-+ (gr_usermode->mode, gr_usermode->sp_role, &sprole_salt, &sprole_sum)
-+ && ((!sprole_salt && !sprole_sum)
-+ || !(chkpw(gr_usermode, sprole_salt, sprole_sum)))) {
-+ char *p = "";
-+ assign_special_role(gr_usermode->sp_role);
-+ read_lock(&tasklist_lock);
-+ if (current->real_parent)
-+ p = current->real_parent->role->rolename;
-+ read_unlock(&tasklist_lock);
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_SPROLES_ACL_MSG,
-+ p, acl_sp_role_value);
-+ } else {
-+ gr_log_str(GR_DONT_AUDIT, GR_SPROLEF_ACL_MSG, gr_usermode->sp_role);
-+ error = -EPERM;
-+ if(!(current->role->auth_attempts++))
-+ current->role->expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
-+
-+ goto out;
-+ }
-+ break;
-+ case GR_UNSPROLE:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_UNSPROLEI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (current->role->roletype & GR_ROLE_SPECIAL) {
-+ char *p = "";
-+ int i = 0;
-+
-+ read_lock(&tasklist_lock);
-+ if (current->real_parent) {
-+ p = current->real_parent->role->rolename;
-+ i = current->real_parent->acl_role_id;
-+ }
-+ read_unlock(&tasklist_lock);
-+
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_UNSPROLES_ACL_MSG, p, i);
-+ gr_set_acls(1);
-+ } else {
-+ error = -EPERM;
-+ goto out;
-+ }
-+ break;
-+ default:
-+ gr_log_int(GR_DONT_AUDIT, GR_INVMODE_ACL_MSG, gr_usermode->mode);
-+ error = -EINVAL;
-+ break;
-+ }
-+
-+ if (error != -EPERM)
-+ goto out;
-+
-+ if(!(gr_auth_attempts++))
-+ gr_auth_expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
-+
-+ out:
-+ mutex_unlock(&gr_dev_mutex);
-+
-+ if (!error)
-+ error = req_count;
-+
-+ return error;
-+}
-+
-+/* must be called with
-+ rcu_read_lock();
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+*/
-+int gr_apply_subject_to_task(struct task_struct *task)
-+{
-+ struct acl_object_label *obj;
-+ char *tmpname;
-+ struct acl_subject_label *tmpsubj;
-+ struct file *filp;
-+ struct name_entry *nmatch;
-+
-+ filp = task->exec_file;
-+ if (filp == NULL)
-+ return 0;
-+
-+ /* the following is to apply the correct subject
-+ on binaries running when the RBAC system
-+ is enabled, when the binaries have been
-+ replaced or deleted since their execution
-+ -----
-+ when the RBAC system starts, the inode/dev
-+ from exec_file will be one the RBAC system
-+ is unaware of. It only knows the inode/dev
-+ of the present file on disk, or the absence
-+ of it.
-+ */
-+ preempt_disable();
-+ tmpname = gr_to_filename_rbac(filp->f_path.dentry, filp->f_path.mnt);
-+
-+ nmatch = lookup_name_entry(tmpname);
-+ preempt_enable();
-+ tmpsubj = NULL;
-+ if (nmatch) {
-+ if (nmatch->deleted)
-+ tmpsubj = lookup_acl_subj_label_deleted(nmatch->inode, nmatch->device, task->role);
-+ else
-+ tmpsubj = lookup_acl_subj_label(nmatch->inode, nmatch->device, task->role);
-+ if (tmpsubj != NULL)
-+ task->acl = tmpsubj;
-+ }
-+ if (tmpsubj == NULL)
-+ task->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt,
-+ task->role);
-+ if (task->acl) {
-+ task->is_writable = 0;
-+ /* ignore additional mmap checks for processes that are writable
-+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ task->is_writable = 1;
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ task->is_writable = 1;
-+
-+ gr_set_proc_res(task);
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "gr_set_acls for (%s:%d): role:%s, subject:%s\n", task->comm, task_pid_nr(task), task->role->rolename, task->acl->filename);
-+#endif
-+ } else {
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+
-+int
-+gr_set_acls(const int type)
-+{
-+ struct task_struct *task, *task2;
-+ struct acl_role_label *role = current->role;
-+ __u16 acl_role_id = current->acl_role_id;
-+ const struct cred *cred;
-+ int ret;
-+
-+ rcu_read_lock();
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+ do_each_thread(task2, task) {
-+ /* check to see if we're called from the exit handler,
-+ if so, only replace ACLs that have inherited the admin
-+ ACL */
-+
-+ if (type && (task->role != role ||
-+ task->acl_role_id != acl_role_id))
-+ continue;
-+
-+ task->acl_role_id = 0;
-+ task->acl_sp_role = 0;
-+
-+ if (task->exec_file) {
-+ cred = __task_cred(task);
-+ task->role = lookup_acl_role_label(task, GR_GLOBAL_UID(cred->uid), GR_GLOBAL_GID(cred->gid));
-+ ret = gr_apply_subject_to_task(task);
-+ if (ret) {
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ rcu_read_unlock();
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_DEFACL_MSG, task->comm, task_pid_nr(task));
-+ return ret;
-+ }
-+ } else {
-+ // it's a kernel process
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
-+#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
-+ task->acl->mode &= ~GR_PROCFIND;
-+#endif
-+ }
-+ } while_each_thread(task2, task);
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ rcu_read_unlock();
-+
-+ return 0;
-+}
-+
+#if defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC)
+static const unsigned long res_learn_bumps[GR_NLIMITS] = {
+ [RLIMIT_CPU] = GR_RLIM_CPU_BUMP,
@@ -66109,7 +64583,7 @@ index 0000000..c0793fd
+
+ if (gr_status & GR_READY && !(task->acl->mode & GR_OVERRIDE) &&
+ !task->is_writable && S_ISREG(filp->f_path.dentry->d_inode->i_mode) && (filp->f_path.mnt != shm_mnt || (filp->f_path.dentry->d_inode->i_nlink > 0))) {
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
+ obj2 = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt,
+ task->role->root_label);
+ if (unlikely((obj->mode & GR_WRITE) || (obj2->mode & GR_WRITE))) {
@@ -66223,15 +64697,6 @@ index 0000000..c0793fd
+ return;
+}
+
-+void gr_set_kernel_label(struct task_struct *task)
-+{
-+ if (gr_status & GR_READY) {
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
-+ }
-+ return;
-+}
-+
+#ifdef CONFIG_TASKSTATS
+int gr_is_taskstats_denied(int pid)
+{
@@ -66385,7 +64850,6 @@ index 0000000..c0793fd
+#ifdef CONFIG_NETFILTER_XT_MATCH_GRADM_MODULE
+EXPORT_SYMBOL(gr_acl_is_enabled);
+#endif
-+EXPORT_SYMBOL(gr_set_kernel_label);
+#ifdef CONFIG_SECURITY
+EXPORT_SYMBOL(gr_check_user_change);
+EXPORT_SYMBOL(gr_check_group_change);
@@ -66393,7 +64857,7 @@ index 0000000..c0793fd
+
diff --git a/grsecurity/gracl_alloc.c b/grsecurity/gracl_alloc.c
new file mode 100644
-index 0000000..34fefda
+index 0000000..18ffbbd
--- /dev/null
+++ b/grsecurity/gracl_alloc.c
@@ -0,0 +1,105 @@
@@ -66404,19 +64868,18 @@ index 0000000..34fefda
+#include <linux/gracl.h>
+#include <linux/grsecurity.h>
+
-+static unsigned long alloc_stack_next = 1;
-+static unsigned long alloc_stack_size = 1;
-+static void **alloc_stack;
++static struct gr_alloc_state __current_alloc_state = { 1, 1, NULL };
++struct gr_alloc_state *current_alloc_state = &__current_alloc_state;
+
+static __inline__ int
+alloc_pop(void)
+{
-+ if (alloc_stack_next == 1)
++ if (current_alloc_state->alloc_stack_next == 1)
+ return 0;
+
-+ kfree(alloc_stack[alloc_stack_next - 2]);
++ kfree(current_alloc_state->alloc_stack[current_alloc_state->alloc_stack_next - 2]);
+
-+ alloc_stack_next--;
++ current_alloc_state->alloc_stack_next--;
+
+ return 1;
+}
@@ -66424,12 +64887,12 @@ index 0000000..34fefda
+static __inline__ int
+alloc_push(void *buf)
+{
-+ if (alloc_stack_next >= alloc_stack_size)
++ if (current_alloc_state->alloc_stack_next >= current_alloc_state->alloc_stack_size)
+ return 1;
+
-+ alloc_stack[alloc_stack_next - 1] = buf;
++ current_alloc_state->alloc_stack[current_alloc_state->alloc_stack_next - 1] = buf;
+
-+ alloc_stack_next++;
++ current_alloc_state->alloc_stack_next++;
+
+ return 0;
+}
@@ -66467,21 +64930,21 @@ index 0000000..34fefda
+void
+acl_free_all(void)
+{
-+ if (gr_acl_is_enabled() || !alloc_stack)
++ if (!current_alloc_state->alloc_stack)
+ return;
+
+ while (alloc_pop()) ;
+
-+ if (alloc_stack) {
-+ if ((alloc_stack_size * sizeof (void *)) <= PAGE_SIZE)
-+ kfree(alloc_stack);
++ if (current_alloc_state->alloc_stack) {
++ if ((current_alloc_state->alloc_stack_size * sizeof (void *)) <= PAGE_SIZE)
++ kfree(current_alloc_state->alloc_stack);
+ else
-+ vfree(alloc_stack);
++ vfree(current_alloc_state->alloc_stack);
+ }
+
-+ alloc_stack = NULL;
-+ alloc_stack_size = 1;
-+ alloc_stack_next = 1;
++ current_alloc_state->alloc_stack = NULL;
++ current_alloc_state->alloc_stack_size = 1;
++ current_alloc_state->alloc_stack_next = 1;
+
+ return;
+}
@@ -66490,14 +64953,15 @@ index 0000000..34fefda
+acl_alloc_stack_init(unsigned long size)
+{
+ if ((size * sizeof (void *)) <= PAGE_SIZE)
-+ alloc_stack =
++ current_alloc_state->alloc_stack =
+ (void **) kmalloc(size * sizeof (void *), GFP_KERNEL);
+ else
-+ alloc_stack = (void **) vmalloc(size * sizeof (void *));
++ current_alloc_state->alloc_stack = (void **) vmalloc(size * sizeof (void *));
+
-+ alloc_stack_size = size;
++ current_alloc_state->alloc_stack_size = size;
++ current_alloc_state->alloc_stack_next = 1;
+
-+ if (!alloc_stack)
++ if (!current_alloc_state->alloc_stack)
+ return 0;
+ else
+ return 1;
@@ -66620,10 +65084,10 @@ index 0000000..bdd51ea
+
diff --git a/grsecurity/gracl_compat.c b/grsecurity/gracl_compat.c
new file mode 100644
-index 0000000..a43dd06
+index 0000000..ca25605
--- /dev/null
+++ b/grsecurity/gracl_compat.c
-@@ -0,0 +1,269 @@
+@@ -0,0 +1,270 @@
+#include <linux/kernel.h>
+#include <linux/gracl.h>
+#include <linux/compat.h>
@@ -66638,7 +65102,8 @@ index 0000000..a43dd06
+ if (copy_from_user(&uwrapcompat, buf, sizeof(uwrapcompat)))
+ return -EFAULT;
+
-+ if ((uwrapcompat.version != GRSECURITY_VERSION) ||
++ if (((uwrapcompat.version != GRSECURITY_VERSION) &&
++ (uwrapcompat.version != 0x2901)) ||
+ (uwrapcompat.size != sizeof(struct gr_arg_compat)))
+ return -EINVAL;
+
@@ -67935,6 +66400,1837 @@ index 0000000..25f54ef
+ .release = close_learn,
+ .poll = poll_learn,
+};
+diff --git a/grsecurity/gracl_policy.c b/grsecurity/gracl_policy.c
+new file mode 100644
+index 0000000..d409f33
+--- /dev/null
++++ b/grsecurity/gracl_policy.c
+@@ -0,0 +1,1825 @@
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/file.h>
++#include <linux/fs.h>
++#include <linux/namei.h>
++#include <linux/mount.h>
++#include <linux/tty.h>
++#include <linux/proc_fs.h>
++#include <linux/lglock.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <linux/types.h>
++#include <linux/sysctl.h>
++#include <linux/netdevice.h>
++#include <linux/ptrace.h>
++#include <linux/gracl.h>
++#include <linux/gralloc.h>
++#include <linux/security.h>
++#include <linux/grinternal.h>
++#include <linux/pid_namespace.h>
++#include <linux/stop_machine.h>
++#include <linux/fdtable.h>
++#include <linux/percpu.h>
++#include <linux/lglock.h>
++#include <linux/hugetlb.h>
++#include <linux/posix-timers.h>
++#include "../fs/mount.h"
++
++#include <asm/uaccess.h>
++#include <asm/errno.h>
++#include <asm/mman.h>
++
++extern struct gr_policy_state *polstate;
++
++#define FOR_EACH_ROLE_START(role) \
++ role = polstate->role_list; \
++ while (role) {
++
++#define FOR_EACH_ROLE_END(role) \
++ role = role->prev; \
++ }
++
++struct path gr_real_root;
++
++extern struct gr_alloc_state *current_alloc_state;
++
++u16 acl_sp_role_value;
++
++static DEFINE_MUTEX(gr_dev_mutex);
++
++extern int chkpw(struct gr_arg *entry, unsigned char *salt, unsigned char *sum);
++extern void gr_clear_learn_entries(void);
++
++static struct gr_arg gr_usermode;
++static unsigned char gr_system_salt[GR_SALT_LEN];
++static unsigned char gr_system_sum[GR_SHA_LEN];
++
++static unsigned int gr_auth_attempts = 0;
++static unsigned long gr_auth_expires = 0UL;
++
++struct acl_object_label *fakefs_obj_rw;
++struct acl_object_label *fakefs_obj_rwx;
++
++extern int gr_init_uidset(void);
++extern void gr_free_uidset(void);
++extern void gr_remove_uid(uid_t uid);
++extern int gr_find_uid(uid_t uid);
++
++extern void __gr_apply_subject_to_task(struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj);
++extern int gr_streq(const char *a, const char *b, const unsigned int lena, const unsigned int lenb);
++extern void __insert_inodev_entry(const struct gr_policy_state *state, struct inodev_entry *entry);
++extern struct acl_role_label *__lookup_acl_role_label(const struct gr_policy_state *state, const struct task_struct *task, const uid_t uid, const gid_t gid);
++extern void insert_acl_obj_label(struct acl_object_label *obj, struct acl_subject_label *subj);
++extern void insert_acl_subj_label(struct acl_subject_label *obj, struct acl_role_label *role);
++extern struct name_entry * __lookup_name_entry(const struct gr_policy_state *state, const char *name);
++extern char *gr_to_filename_rbac(const struct dentry *dentry, const struct vfsmount *mnt);
++extern struct acl_subject_label *lookup_acl_subj_label(const ino_t ino, const dev_t dev, const struct acl_role_label *role);
++extern struct acl_subject_label *lookup_acl_subj_label_deleted(const ino_t ino, const dev_t dev, const struct acl_role_label *role);
++extern void assign_special_role(const char *rolename);
++extern struct acl_subject_label *chk_subj_label(const struct dentry *l_dentry, const struct vfsmount *l_mnt, const struct acl_role_label *role);
++extern int gr_rbac_disable(void *unused);
++extern void gr_enable_rbac_system(void);
++
++static int copy_acl_object_label_normal(struct acl_object_label *obj, const struct acl_object_label *userp)
++{
++ if (copy_from_user(obj, userp, sizeof(struct acl_object_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_ip_label_normal(struct acl_ip_label *ip, const struct acl_ip_label *userp)
++{
++ if (copy_from_user(ip, userp, sizeof(struct acl_ip_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_subject_label_normal(struct acl_subject_label *subj, const struct acl_subject_label *userp)
++{
++ if (copy_from_user(subj, userp, sizeof(struct acl_subject_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_role_label_normal(struct acl_role_label *role, const struct acl_role_label *userp)
++{
++ if (copy_from_user(role, userp, sizeof(struct acl_role_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_role_allowed_ip_normal(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp)
++{
++ if (copy_from_user(roleip, userp, sizeof(struct role_allowed_ip)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_sprole_pw_normal(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp)
++{
++ if (copy_from_user(pw, userp + idx, sizeof(struct sprole_pw)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_gr_hash_struct_normal(struct gr_hash_struct *hash, const struct gr_hash_struct *userp)
++{
++ if (copy_from_user(hash, userp, sizeof(struct gr_hash_struct)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_role_transition_normal(struct role_transition *trans, const struct role_transition *userp)
++{
++ if (copy_from_user(trans, userp, sizeof(struct role_transition)))
++ return -EFAULT;
++
++ return 0;
++}
++
++int copy_pointer_from_array_normal(void *ptr, unsigned long idx, const void *userp)
++{
++ if (copy_from_user(ptr, userp + (idx * sizeof(void *)), sizeof(void *)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_gr_arg_wrapper_normal(const char __user *buf, struct gr_arg_wrapper *uwrap)
++{
++ if (copy_from_user(uwrap, buf, sizeof (struct gr_arg_wrapper)))
++ return -EFAULT;
++
++ if (((uwrap->version != GRSECURITY_VERSION) &&
++ (uwrap->version != 0x2901)) ||
++ (uwrap->size != sizeof(struct gr_arg)))
++ return -EINVAL;
++
++ return 0;
++}
++
++static int copy_gr_arg_normal(const struct gr_arg __user *buf, struct gr_arg *arg)
++{
++ if (copy_from_user(arg, buf, sizeof (struct gr_arg)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static size_t get_gr_arg_wrapper_size_normal(void)
++{
++ return sizeof(struct gr_arg_wrapper);
++}
++
++#ifdef CONFIG_COMPAT
++extern int copy_gr_arg_wrapper_compat(const char *buf, struct gr_arg_wrapper *uwrap);
++extern int copy_gr_arg_compat(const struct gr_arg __user *buf, struct gr_arg *arg);
++extern int copy_acl_object_label_compat(struct acl_object_label *obj, const struct acl_object_label *userp);
++extern int copy_acl_subject_label_compat(struct acl_subject_label *subj, const struct acl_subject_label *userp);
++extern int copy_acl_role_label_compat(struct acl_role_label *role, const struct acl_role_label *userp);
++extern int copy_role_allowed_ip_compat(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp);
++extern int copy_role_transition_compat(struct role_transition *trans, const struct role_transition *userp);
++extern int copy_gr_hash_struct_compat(struct gr_hash_struct *hash, const struct gr_hash_struct *userp);
++extern int copy_pointer_from_array_compat(void *ptr, unsigned long idx, const void *userp);
++extern int copy_acl_ip_label_compat(struct acl_ip_label *ip, const struct acl_ip_label *userp);
++extern int copy_sprole_pw_compat(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp);
++extern size_t get_gr_arg_wrapper_size_compat(void);
++
++int (* copy_gr_arg_wrapper)(const char *buf, struct gr_arg_wrapper *uwrap) __read_only;
++int (* copy_gr_arg)(const struct gr_arg *buf, struct gr_arg *arg) __read_only;
++int (* copy_acl_object_label)(struct acl_object_label *obj, const struct acl_object_label *userp) __read_only;
++int (* copy_acl_subject_label)(struct acl_subject_label *subj, const struct acl_subject_label *userp) __read_only;
++int (* copy_acl_role_label)(struct acl_role_label *role, const struct acl_role_label *userp) __read_only;
++int (* copy_acl_ip_label)(struct acl_ip_label *ip, const struct acl_ip_label *userp) __read_only;
++int (* copy_pointer_from_array)(void *ptr, unsigned long idx, const void *userp) __read_only;
++int (* copy_sprole_pw)(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp) __read_only;
++int (* copy_gr_hash_struct)(struct gr_hash_struct *hash, const struct gr_hash_struct *userp) __read_only;
++int (* copy_role_transition)(struct role_transition *trans, const struct role_transition *userp) __read_only;
++int (* copy_role_allowed_ip)(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp) __read_only;
++size_t (* get_gr_arg_wrapper_size)(void) __read_only;
++
++#else
++#define copy_gr_arg_wrapper copy_gr_arg_wrapper_normal
++#define copy_gr_arg copy_gr_arg_normal
++#define copy_gr_hash_struct copy_gr_hash_struct_normal
++#define copy_acl_object_label copy_acl_object_label_normal
++#define copy_acl_subject_label copy_acl_subject_label_normal
++#define copy_acl_role_label copy_acl_role_label_normal
++#define copy_acl_ip_label copy_acl_ip_label_normal
++#define copy_pointer_from_array copy_pointer_from_array_normal
++#define copy_sprole_pw copy_sprole_pw_normal
++#define copy_role_transition copy_role_transition_normal
++#define copy_role_allowed_ip copy_role_allowed_ip_normal
++#define get_gr_arg_wrapper_size get_gr_arg_wrapper_size_normal
++#endif
++
++static struct acl_subject_label *
++lookup_subject_map(const struct acl_subject_label *userp)
++{
++ unsigned int index = gr_shash(userp, polstate->subj_map_set.s_size);
++ struct subject_map *match;
++
++ match = polstate->subj_map_set.s_hash[index];
++
++ while (match && match->user != userp)
++ match = match->next;
++
++ if (match != NULL)
++ return match->kernel;
++ else
++ return NULL;
++}
++
++static void
++insert_subj_map_entry(struct subject_map *subjmap)
++{
++ unsigned int index = gr_shash(subjmap->user, polstate->subj_map_set.s_size);
++ struct subject_map **curr;
++
++ subjmap->prev = NULL;
++
++ curr = &polstate->subj_map_set.s_hash[index];
++ if (*curr != NULL)
++ (*curr)->prev = subjmap;
++
++ subjmap->next = *curr;
++ *curr = subjmap;
++
++ return;
++}
++
++static void
++__insert_acl_role_label(struct acl_role_label *role, uid_t uidgid)
++{
++ unsigned int index =
++ gr_rhash(uidgid, role->roletype & (GR_ROLE_USER | GR_ROLE_GROUP), polstate->acl_role_set.r_size);
++ struct acl_role_label **curr;
++ struct acl_role_label *tmp, *tmp2;
++
++ curr = &polstate->acl_role_set.r_hash[index];
++
++ /* simple case, slot is empty, just set it to our role */
++ if (*curr == NULL) {
++ *curr = role;
++ } else {
++ /* example:
++ 1 -> 2 -> 3 (adding 2 -> 3 to here)
++ 2 -> 3
++ */
++ /* first check to see if we can already be reached via this slot */
++ tmp = *curr;
++ while (tmp && tmp != role)
++ tmp = tmp->next;
++ if (tmp == role) {
++ /* we don't need to add ourselves to this slot's chain */
++ return;
++ }
++ /* we need to add ourselves to this chain, two cases */
++ if (role->next == NULL) {
++ /* simple case, append the current chain to our role */
++ role->next = *curr;
++ *curr = role;
++ } else {
++ /* 1 -> 2 -> 3 -> 4
++ 2 -> 3 -> 4
++ 3 -> 4 (adding 1 -> 2 -> 3 -> 4 to here)
++ */
++ /* trickier case: walk our role's chain until we find
++ the role for the start of the current slot's chain */
++ tmp = role;
++ tmp2 = *curr;
++ while (tmp->next && tmp->next != tmp2)
++ tmp = tmp->next;
++ if (tmp->next == tmp2) {
++ /* from example above, we found 3, so just
++ replace this slot's chain with ours */
++ *curr = role;
++ } else {
++ /* we didn't find a subset of our role's chain
++ in the current slot's chain, so append their
++ chain to ours, and set us as the first role in
++ the slot's chain
++
++ we could fold this case with the case above,
++ but making it explicit for clarity
++ */
++ tmp->next = tmp2;
++ *curr = role;
++ }
++ }
++ }
++
++ return;
++}
++
++static void
++insert_acl_role_label(struct acl_role_label *role)
++{
++ int i;
++
++ if (polstate->role_list == NULL) {
++ polstate->role_list = role;
++ role->prev = NULL;
++ } else {
++ role->prev = polstate->role_list;
++ polstate->role_list = role;
++ }
++
++ /* used for hash chains */
++ role->next = NULL;
++
++ if (role->roletype & GR_ROLE_DOMAIN) {
++ for (i = 0; i < role->domain_child_num; i++)
++ __insert_acl_role_label(role, role->domain_children[i]);
++ } else
++ __insert_acl_role_label(role, role->uidgid);
++}
++
++static int
++insert_name_entry(char *name, const ino_t inode, const dev_t device, __u8 deleted)
++{
++ struct name_entry **curr, *nentry;
++ struct inodev_entry *ientry;
++ unsigned int len = strlen(name);
++ unsigned int key = full_name_hash(name, len);
++ unsigned int index = key % polstate->name_set.n_size;
++
++ curr = &polstate->name_set.n_hash[index];
++
++ while (*curr && ((*curr)->key != key || !gr_streq((*curr)->name, name, (*curr)->len, len)))
++ curr = &((*curr)->next);
++
++ if (*curr != NULL)
++ return 1;
++
++ nentry = acl_alloc(sizeof (struct name_entry));
++ if (nentry == NULL)
++ return 0;
++ ientry = acl_alloc(sizeof (struct inodev_entry));
++ if (ientry == NULL)
++ return 0;
++ ientry->nentry = nentry;
++
++ nentry->key = key;
++ nentry->name = name;
++ nentry->inode = inode;
++ nentry->device = device;
++ nentry->len = len;
++ nentry->deleted = deleted;
++
++ nentry->prev = NULL;
++ curr = &polstate->name_set.n_hash[index];
++ if (*curr != NULL)
++ (*curr)->prev = nentry;
++ nentry->next = *curr;
++ *curr = nentry;
++
++ /* insert us into the table searchable by inode/dev */
++ __insert_inodev_entry(polstate, ientry);
++
++ return 1;
++}
++
++/* allocating chained hash tables, so optimal size is where lambda ~ 1 */
++
++static void *
++create_table(__u32 * len, int elementsize)
++{
++ unsigned int table_sizes[] = {
++ 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381,
++ 32749, 65521, 131071, 262139, 524287, 1048573, 2097143,
++ 4194301, 8388593, 16777213, 33554393, 67108859
++ };
++ void *newtable = NULL;
++ unsigned int pwr = 0;
++
++ while ((pwr < ((sizeof (table_sizes) / sizeof (table_sizes[0])) - 1)) &&
++ table_sizes[pwr] <= *len)
++ pwr++;
++
++ if (table_sizes[pwr] <= *len || (table_sizes[pwr] > ULONG_MAX / elementsize))
++ return newtable;
++
++ if ((table_sizes[pwr] * elementsize) <= PAGE_SIZE)
++ newtable =
++ kmalloc(table_sizes[pwr] * elementsize, GFP_KERNEL);
++ else
++ newtable = vmalloc(table_sizes[pwr] * elementsize);
++
++ *len = table_sizes[pwr];
++
++ return newtable;
++}
++
++static int
++init_variables(const struct gr_arg *arg, bool reload)
++{
++ struct task_struct *reaper = init_pid_ns.child_reaper;
++ unsigned int stacksize;
++
++ polstate->subj_map_set.s_size = arg->role_db.num_subjects;
++ polstate->acl_role_set.r_size = arg->role_db.num_roles + arg->role_db.num_domain_children;
++ polstate->name_set.n_size = arg->role_db.num_objects;
++ polstate->inodev_set.i_size = arg->role_db.num_objects;
++
++ if (!polstate->subj_map_set.s_size || !polstate->acl_role_set.r_size ||
++ !polstate->name_set.n_size || !polstate->inodev_set.i_size)
++ return 1;
++
++ if (!reload) {
++ if (!gr_init_uidset())
++ return 1;
++ }
++
++ /* set up the stack that holds allocation info */
++
++ stacksize = arg->role_db.num_pointers + 5;
++
++ if (!acl_alloc_stack_init(stacksize))
++ return 1;
++
++ if (!reload) {
++ /* grab reference for the real root dentry and vfsmount */
++ get_fs_root(reaper->fs, &gr_real_root);
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", __get_dev(gr_real_root.dentry), gr_real_root.dentry->d_inode->i_ino);
++#endif
++
++ fakefs_obj_rw = acl_alloc(sizeof(struct acl_object_label));
++ if (fakefs_obj_rw == NULL)
++ return 1;
++ fakefs_obj_rw->mode = GR_FIND | GR_READ | GR_WRITE;
++
++ fakefs_obj_rwx = acl_alloc(sizeof(struct acl_object_label));
++ if (fakefs_obj_rwx == NULL)
++ return 1;
++ fakefs_obj_rwx->mode = GR_FIND | GR_READ | GR_WRITE | GR_EXEC;
++ }
++
++ polstate->subj_map_set.s_hash =
++ (struct subject_map **) create_table(&polstate->subj_map_set.s_size, sizeof(void *));
++ polstate->acl_role_set.r_hash =
++ (struct acl_role_label **) create_table(&polstate->acl_role_set.r_size, sizeof(void *));
++ polstate->name_set.n_hash = (struct name_entry **) create_table(&polstate->name_set.n_size, sizeof(void *));
++ polstate->inodev_set.i_hash =
++ (struct inodev_entry **) create_table(&polstate->inodev_set.i_size, sizeof(void *));
++
++ if (!polstate->subj_map_set.s_hash || !polstate->acl_role_set.r_hash ||
++ !polstate->name_set.n_hash || !polstate->inodev_set.i_hash)
++ return 1;
++
++ memset(polstate->subj_map_set.s_hash, 0,
++ sizeof(struct subject_map *) * polstate->subj_map_set.s_size);
++ memset(polstate->acl_role_set.r_hash, 0,
++ sizeof (struct acl_role_label *) * polstate->acl_role_set.r_size);
++ memset(polstate->name_set.n_hash, 0,
++ sizeof (struct name_entry *) * polstate->name_set.n_size);
++ memset(polstate->inodev_set.i_hash, 0,
++ sizeof (struct inodev_entry *) * polstate->inodev_set.i_size);
++
++ return 0;
++}
++
++/* free information not needed after startup
++ currently contains user->kernel pointer mappings for subjects
++*/
++
++static void
++free_init_variables(void)
++{
++ __u32 i;
++
++ if (polstate->subj_map_set.s_hash) {
++ for (i = 0; i < polstate->subj_map_set.s_size; i++) {
++ if (polstate->subj_map_set.s_hash[i]) {
++ kfree(polstate->subj_map_set.s_hash[i]);
++ polstate->subj_map_set.s_hash[i] = NULL;
++ }
++ }
++
++ if ((polstate->subj_map_set.s_size * sizeof (struct subject_map *)) <=
++ PAGE_SIZE)
++ kfree(polstate->subj_map_set.s_hash);
++ else
++ vfree(polstate->subj_map_set.s_hash);
++ }
++
++ return;
++}
++
++static void
++free_variables(bool reload)
++{
++ struct acl_subject_label *s;
++ struct acl_role_label *r;
++ struct task_struct *task, *task2;
++ unsigned int x;
++
++ if (!reload) {
++ gr_clear_learn_entries();
++
++ read_lock(&tasklist_lock);
++ do_each_thread(task2, task) {
++ task->acl_sp_role = 0;
++ task->acl_role_id = 0;
++ task->inherited = 0;
++ task->acl = NULL;
++ task->role = NULL;
++ } while_each_thread(task2, task);
++ read_unlock(&tasklist_lock);
++
++ /* release the reference to the real root dentry and vfsmount */
++ path_put(&gr_real_root);
++ memset(&gr_real_root, 0, sizeof(gr_real_root));
++ }
++
++ /* free all object hash tables */
++
++ FOR_EACH_ROLE_START(r)
++ if (r->subj_hash == NULL)
++ goto next_role;
++ FOR_EACH_SUBJECT_START(r, s, x)
++ if (s->obj_hash == NULL)
++ break;
++ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
++ kfree(s->obj_hash);
++ else
++ vfree(s->obj_hash);
++ FOR_EACH_SUBJECT_END(s, x)
++ FOR_EACH_NESTED_SUBJECT_START(r, s)
++ if (s->obj_hash == NULL)
++ break;
++ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
++ kfree(s->obj_hash);
++ else
++ vfree(s->obj_hash);
++ FOR_EACH_NESTED_SUBJECT_END(s)
++ if ((r->subj_hash_size * sizeof (struct acl_subject_label *)) <= PAGE_SIZE)
++ kfree(r->subj_hash);
++ else
++ vfree(r->subj_hash);
++ r->subj_hash = NULL;
++next_role:
++ FOR_EACH_ROLE_END(r)
++
++ acl_free_all();
++
++ if (polstate->acl_role_set.r_hash) {
++ if ((polstate->acl_role_set.r_size * sizeof (struct acl_role_label *)) <=
++ PAGE_SIZE)
++ kfree(polstate->acl_role_set.r_hash);
++ else
++ vfree(polstate->acl_role_set.r_hash);
++ }
++ if (polstate->name_set.n_hash) {
++ if ((polstate->name_set.n_size * sizeof (struct name_entry *)) <=
++ PAGE_SIZE)
++ kfree(polstate->name_set.n_hash);
++ else
++ vfree(polstate->name_set.n_hash);
++ }
++
++ if (polstate->inodev_set.i_hash) {
++ if ((polstate->inodev_set.i_size * sizeof (struct inodev_entry *)) <=
++ PAGE_SIZE)
++ kfree(polstate->inodev_set.i_hash);
++ else
++ vfree(polstate->inodev_set.i_hash);
++ }
++
++ if (!reload)
++ gr_free_uidset();
++
++ memset(&polstate->name_set, 0, sizeof (struct name_db));
++ memset(&polstate->inodev_set, 0, sizeof (struct inodev_db));
++ memset(&polstate->acl_role_set, 0, sizeof (struct acl_role_db));
++ memset(&polstate->subj_map_set, 0, sizeof (struct acl_subj_map_db));
++
++ polstate->default_role = NULL;
++ polstate->kernel_role = NULL;
++ polstate->role_list = NULL;
++
++ return;
++}
++
++static struct acl_subject_label *
++do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied);
++
++static int alloc_and_copy_string(char **name, unsigned int maxlen)
++{
++ unsigned int len = strnlen_user(*name, maxlen);
++ char *tmp;
++
++ if (!len || len >= maxlen)
++ return -EINVAL;
++
++ if ((tmp = (char *) acl_alloc(len)) == NULL)
++ return -ENOMEM;
++
++ if (copy_from_user(tmp, *name, len))
++ return -EFAULT;
++
++ tmp[len-1] = '\0';
++ *name = tmp;
++
++ return 0;
++}
++
++static int
++copy_user_glob(struct acl_object_label *obj)
++{
++ struct acl_object_label *g_tmp, **guser;
++ int error;
++
++ if (obj->globbed == NULL)
++ return 0;
++
++ guser = &obj->globbed;
++ while (*guser) {
++ g_tmp = (struct acl_object_label *)
++ acl_alloc(sizeof (struct acl_object_label));
++ if (g_tmp == NULL)
++ return -ENOMEM;
++
++ if (copy_acl_object_label(g_tmp, *guser))
++ return -EFAULT;
++
++ error = alloc_and_copy_string(&g_tmp->filename, PATH_MAX);
++ if (error)
++ return error;
++
++ *guser = g_tmp;
++ guser = &(g_tmp->next);
++ }
++
++ return 0;
++}
++
++static int
++copy_user_objs(struct acl_object_label *userp, struct acl_subject_label *subj,
++ struct acl_role_label *role)
++{
++ struct acl_object_label *o_tmp;
++ int ret;
++
++ while (userp) {
++ if ((o_tmp = (struct acl_object_label *)
++ acl_alloc(sizeof (struct acl_object_label))) == NULL)
++ return -ENOMEM;
++
++ if (copy_acl_object_label(o_tmp, userp))
++ return -EFAULT;
++
++ userp = o_tmp->prev;
++
++ ret = alloc_and_copy_string(&o_tmp->filename, PATH_MAX);
++ if (ret)
++ return ret;
++
++ insert_acl_obj_label(o_tmp, subj);
++ if (!insert_name_entry(o_tmp->filename, o_tmp->inode,
++ o_tmp->device, (o_tmp->mode & GR_DELETED) ? 1 : 0))
++ return -ENOMEM;
++
++ ret = copy_user_glob(o_tmp);
++ if (ret)
++ return ret;
++
++ if (o_tmp->nested) {
++ int already_copied;
++
++ o_tmp->nested = do_copy_user_subj(o_tmp->nested, role, &already_copied);
++ if (IS_ERR(o_tmp->nested))
++ return PTR_ERR(o_tmp->nested);
++
++ /* insert into nested subject list if we haven't copied this one yet
++ to prevent duplicate entries */
++ if (!already_copied) {
++ o_tmp->nested->next = role->hash->first;
++ role->hash->first = o_tmp->nested;
++ }
++ }
++ }
++
++ return 0;
++}
++
++static __u32
++count_user_subjs(struct acl_subject_label *userp)
++{
++ struct acl_subject_label s_tmp;
++ __u32 num = 0;
++
++ while (userp) {
++ if (copy_acl_subject_label(&s_tmp, userp))
++ break;
++
++ userp = s_tmp.prev;
++ }
++
++ return num;
++}
++
++static int
++copy_user_allowedips(struct acl_role_label *rolep)
++{
++ struct role_allowed_ip *ruserip, *rtmp = NULL, *rlast;
++
++ ruserip = rolep->allowed_ips;
++
++ while (ruserip) {
++ rlast = rtmp;
++
++ if ((rtmp = (struct role_allowed_ip *)
++ acl_alloc(sizeof (struct role_allowed_ip))) == NULL)
++ return -ENOMEM;
++
++ if (copy_role_allowed_ip(rtmp, ruserip))
++ return -EFAULT;
++
++ ruserip = rtmp->prev;
++
++ if (!rlast) {
++ rtmp->prev = NULL;
++ rolep->allowed_ips = rtmp;
++ } else {
++ rlast->next = rtmp;
++ rtmp->prev = rlast;
++ }
++
++ if (!ruserip)
++ rtmp->next = NULL;
++ }
++
++ return 0;
++}
++
++static int
++copy_user_transitions(struct acl_role_label *rolep)
++{
++ struct role_transition *rusertp, *rtmp = NULL, *rlast;
++ int error;
++
++ rusertp = rolep->transitions;
++
++ while (rusertp) {
++ rlast = rtmp;
++
++ if ((rtmp = (struct role_transition *)
++ acl_alloc(sizeof (struct role_transition))) == NULL)
++ return -ENOMEM;
++
++ if (copy_role_transition(rtmp, rusertp))
++ return -EFAULT;
++
++ rusertp = rtmp->prev;
++
++ error = alloc_and_copy_string(&rtmp->rolename, GR_SPROLE_LEN);
++ if (error)
++ return error;
++
++ if (!rlast) {
++ rtmp->prev = NULL;
++ rolep->transitions = rtmp;
++ } else {
++ rlast->next = rtmp;
++ rtmp->prev = rlast;
++ }
++
++ if (!rusertp)
++ rtmp->next = NULL;
++ }
++
++ return 0;
++}
++
++static __u32 count_user_objs(const struct acl_object_label __user *userp)
++{
++ struct acl_object_label o_tmp;
++ __u32 num = 0;
++
++ while (userp) {
++ if (copy_acl_object_label(&o_tmp, userp))
++ break;
++
++ userp = o_tmp.prev;
++ num++;
++ }
++
++ return num;
++}
++
++static struct acl_subject_label *
++do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied)
++{
++ struct acl_subject_label *s_tmp = NULL, *s_tmp2;
++ __u32 num_objs;
++ struct acl_ip_label **i_tmp, *i_utmp2;
++ struct gr_hash_struct ghash;
++ struct subject_map *subjmap;
++ unsigned int i_num;
++ int err;
++
++ if (already_copied != NULL)
++ *already_copied = 0;
++
++ s_tmp = lookup_subject_map(userp);
++
++ /* we've already copied this subject into the kernel, just return
++ the reference to it, and don't copy it over again
++ */
++ if (s_tmp) {
++ if (already_copied != NULL)
++ *already_copied = 1;
++ return(s_tmp);
++ }
++
++ if ((s_tmp = (struct acl_subject_label *)
++ acl_alloc(sizeof (struct acl_subject_label))) == NULL)
++ return ERR_PTR(-ENOMEM);
++
++ subjmap = (struct subject_map *)kmalloc(sizeof (struct subject_map), GFP_KERNEL);
++ if (subjmap == NULL)
++ return ERR_PTR(-ENOMEM);
++
++ subjmap->user = userp;
++ subjmap->kernel = s_tmp;
++ insert_subj_map_entry(subjmap);
++
++ if (copy_acl_subject_label(s_tmp, userp))
++ return ERR_PTR(-EFAULT);
++
++ err = alloc_and_copy_string(&s_tmp->filename, PATH_MAX);
++ if (err)
++ return ERR_PTR(err);
++
++ if (!strcmp(s_tmp->filename, "/"))
++ role->root_label = s_tmp;
++
++ if (copy_gr_hash_struct(&ghash, s_tmp->hash))
++ return ERR_PTR(-EFAULT);
++
++ /* copy user and group transition tables */
++
++ if (s_tmp->user_trans_num) {
++ uid_t *uidlist;
++
++ uidlist = (uid_t *)acl_alloc_num(s_tmp->user_trans_num, sizeof(uid_t));
++ if (uidlist == NULL)
++ return ERR_PTR(-ENOMEM);
++ if (copy_from_user(uidlist, s_tmp->user_transitions, s_tmp->user_trans_num * sizeof(uid_t)))
++ return ERR_PTR(-EFAULT);
++
++ s_tmp->user_transitions = uidlist;
++ }
++
++ if (s_tmp->group_trans_num) {
++ gid_t *gidlist;
++
++ gidlist = (gid_t *)acl_alloc_num(s_tmp->group_trans_num, sizeof(gid_t));
++ if (gidlist == NULL)
++ return ERR_PTR(-ENOMEM);
++ if (copy_from_user(gidlist, s_tmp->group_transitions, s_tmp->group_trans_num * sizeof(gid_t)))
++ return ERR_PTR(-EFAULT);
++
++ s_tmp->group_transitions = gidlist;
++ }
++
++ /* set up object hash table */
++ num_objs = count_user_objs(ghash.first);
++
++ s_tmp->obj_hash_size = num_objs;
++ s_tmp->obj_hash =
++ (struct acl_object_label **)
++ create_table(&(s_tmp->obj_hash_size), sizeof(void *));
++
++ if (!s_tmp->obj_hash)
++ return ERR_PTR(-ENOMEM);
++
++ memset(s_tmp->obj_hash, 0,
++ s_tmp->obj_hash_size *
++ sizeof (struct acl_object_label *));
++
++ /* add in objects */
++ err = copy_user_objs(ghash.first, s_tmp, role);
++
++ if (err)
++ return ERR_PTR(err);
++
++ /* set pointer for parent subject */
++ if (s_tmp->parent_subject) {
++ s_tmp2 = do_copy_user_subj(s_tmp->parent_subject, role, NULL);
++
++ if (IS_ERR(s_tmp2))
++ return s_tmp2;
++
++ s_tmp->parent_subject = s_tmp2;
++ }
++
++ /* add in ip acls */
++
++ if (!s_tmp->ip_num) {
++ s_tmp->ips = NULL;
++ goto insert;
++ }
++
++ i_tmp =
++ (struct acl_ip_label **) acl_alloc_num(s_tmp->ip_num,
++ sizeof (struct acl_ip_label *));
++
++ if (!i_tmp)
++ return ERR_PTR(-ENOMEM);
++
++ for (i_num = 0; i_num < s_tmp->ip_num; i_num++) {
++ *(i_tmp + i_num) =
++ (struct acl_ip_label *)
++ acl_alloc(sizeof (struct acl_ip_label));
++ if (!*(i_tmp + i_num))
++ return ERR_PTR(-ENOMEM);
++
++ if (copy_pointer_from_array(&i_utmp2, i_num, s_tmp->ips))
++ return ERR_PTR(-EFAULT);
++
++ if (copy_acl_ip_label(*(i_tmp + i_num), i_utmp2))
++ return ERR_PTR(-EFAULT);
++
++ if ((*(i_tmp + i_num))->iface == NULL)
++ continue;
++
++ err = alloc_and_copy_string(&(*(i_tmp + i_num))->iface, IFNAMSIZ);
++ if (err)
++ return ERR_PTR(err);
++ }
++
++ s_tmp->ips = i_tmp;
++
++insert:
++ if (!insert_name_entry(s_tmp->filename, s_tmp->inode,
++ s_tmp->device, (s_tmp->mode & GR_DELETED) ? 1 : 0))
++ return ERR_PTR(-ENOMEM);
++
++ return s_tmp;
++}
++
++static int
++copy_user_subjs(struct acl_subject_label *userp, struct acl_role_label *role)
++{
++ struct acl_subject_label s_pre;
++ struct acl_subject_label * ret;
++ int err;
++
++ while (userp) {
++ if (copy_acl_subject_label(&s_pre, userp))
++ return -EFAULT;
++
++ ret = do_copy_user_subj(userp, role, NULL);
++
++ err = PTR_ERR(ret);
++ if (IS_ERR(ret))
++ return err;
++
++ insert_acl_subj_label(ret, role);
++
++ userp = s_pre.prev;
++ }
++
++ return 0;
++}
++
++static int
++copy_user_acl(struct gr_arg *arg)
++{
++ struct acl_role_label *r_tmp = NULL, **r_utmp, *r_utmp2;
++ struct acl_subject_label *subj_list;
++ struct sprole_pw *sptmp;
++ struct gr_hash_struct *ghash;
++ uid_t *domainlist;
++ unsigned int r_num;
++ int err = 0;
++ __u16 i;
++ __u32 num_subjs;
++
++ /* we need a default and kernel role */
++ if (arg->role_db.num_roles < 2)
++ return -EINVAL;
++
++ /* copy special role authentication info from userspace */
++
++ polstate->num_sprole_pws = arg->num_sprole_pws;
++ polstate->acl_special_roles = (struct sprole_pw **) acl_alloc_num(polstate->num_sprole_pws, sizeof(struct sprole_pw *));
++
++ if (!polstate->acl_special_roles && polstate->num_sprole_pws)
++ return -ENOMEM;
++
++ for (i = 0; i < polstate->num_sprole_pws; i++) {
++ sptmp = (struct sprole_pw *) acl_alloc(sizeof(struct sprole_pw));
++ if (!sptmp)
++ return -ENOMEM;
++ if (copy_sprole_pw(sptmp, i, arg->sprole_pws))
++ return -EFAULT;
++
++ err = alloc_and_copy_string((char **)&sptmp->rolename, GR_SPROLE_LEN);
++ if (err)
++ return err;
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Copying special role %s\n", sptmp->rolename);
++#endif
++
++ polstate->acl_special_roles[i] = sptmp;
++ }
++
++ r_utmp = (struct acl_role_label **) arg->role_db.r_table;
++
++ for (r_num = 0; r_num < arg->role_db.num_roles; r_num++) {
++ r_tmp = acl_alloc(sizeof (struct acl_role_label));
++
++ if (!r_tmp)
++ return -ENOMEM;
++
++ if (copy_pointer_from_array(&r_utmp2, r_num, r_utmp))
++ return -EFAULT;
++
++ if (copy_acl_role_label(r_tmp, r_utmp2))
++ return -EFAULT;
++
++ err = alloc_and_copy_string(&r_tmp->rolename, GR_SPROLE_LEN);
++ if (err)
++ return err;
++
++ if (!strcmp(r_tmp->rolename, "default")
++ && (r_tmp->roletype & GR_ROLE_DEFAULT)) {
++ polstate->default_role = r_tmp;
++ } else if (!strcmp(r_tmp->rolename, ":::kernel:::")) {
++ polstate->kernel_role = r_tmp;
++ }
++
++ if ((ghash = (struct gr_hash_struct *) acl_alloc(sizeof(struct gr_hash_struct))) == NULL)
++ return -ENOMEM;
++
++ if (copy_gr_hash_struct(ghash, r_tmp->hash))
++ return -EFAULT;
++
++ r_tmp->hash = ghash;
++
++ num_subjs = count_user_subjs(r_tmp->hash->first);
++
++ r_tmp->subj_hash_size = num_subjs;
++ r_tmp->subj_hash =
++ (struct acl_subject_label **)
++ create_table(&(r_tmp->subj_hash_size), sizeof(void *));
++
++ if (!r_tmp->subj_hash)
++ return -ENOMEM;
++
++ err = copy_user_allowedips(r_tmp);
++ if (err)
++ return err;
++
++ /* copy domain info */
++ if (r_tmp->domain_children != NULL) {
++ domainlist = acl_alloc_num(r_tmp->domain_child_num, sizeof(uid_t));
++ if (domainlist == NULL)
++ return -ENOMEM;
++
++ if (copy_from_user(domainlist, r_tmp->domain_children, r_tmp->domain_child_num * sizeof(uid_t)))
++ return -EFAULT;
++
++ r_tmp->domain_children = domainlist;
++ }
++
++ err = copy_user_transitions(r_tmp);
++ if (err)
++ return err;
++
++ memset(r_tmp->subj_hash, 0,
++ r_tmp->subj_hash_size *
++ sizeof (struct acl_subject_label *));
++
++ /* acquire the list of subjects, then NULL out
++ the list prior to parsing the subjects for this role,
++ as during this parsing the list is replaced with a list
++ of *nested* subjects for the role
++ */
++ subj_list = r_tmp->hash->first;
++
++ /* set nested subject list to null */
++ r_tmp->hash->first = NULL;
++
++ err = copy_user_subjs(subj_list, r_tmp);
++
++ if (err)
++ return err;
++
++ insert_acl_role_label(r_tmp);
++ }
++
++ if (polstate->default_role == NULL || polstate->kernel_role == NULL)
++ return -EINVAL;
++
++ return err;
++}
++
++static struct acl_subject_label *gr_get_subject_for_task(struct task_struct *task, const char *filename)
++{
++ char *tmpname;
++ struct acl_subject_label *tmpsubj;
++ struct file *filp;
++ struct name_entry *nmatch;
++
++ filp = task->exec_file;
++ if (filp == NULL)
++ return NULL;
++
++ /* the following is to apply the correct subject
++ on binaries running when the RBAC system
++ is enabled, when the binaries have been
++ replaced or deleted since their execution
++ -----
++ when the RBAC system starts, the inode/dev
++ from exec_file will be one the RBAC system
++ is unaware of. It only knows the inode/dev
++ of the present file on disk, or the absence
++ of it.
++ */
++
++ if (filename)
++ nmatch = __lookup_name_entry(polstate, filename);
++ else {
++ preempt_disable();
++ tmpname = gr_to_filename_rbac(filp->f_path.dentry, filp->f_path.mnt);
++
++ nmatch = __lookup_name_entry(polstate, tmpname);
++ preempt_enable();
++ }
++ tmpsubj = NULL;
++ if (nmatch) {
++ if (nmatch->deleted)
++ tmpsubj = lookup_acl_subj_label_deleted(nmatch->inode, nmatch->device, task->role);
++ else
++ tmpsubj = lookup_acl_subj_label(nmatch->inode, nmatch->device, task->role);
++ }
++ /* this also works for the reload case -- if we don't match a potentially inherited subject
++ then we fall back to a normal lookup based on the binary's ino/dev
++ */
++ if (tmpsubj == NULL)
++ tmpsubj = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt,
++ task->role);
++
++ return tmpsubj;
++}
++
++static int gracl_reload_apply_policies(void *reload)
++{
++ struct gr_reload_state *reload_state = (struct gr_reload_state *)reload;
++ struct task_struct *task, *task2;
++ struct acl_role_label *role, *rtmp;
++ struct acl_subject_label *subj;
++ const struct cred *cred;
++ int role_applied;
++ int ret = 0;
++
++ memcpy(&reload_state->oldpolicy, reload_state->oldpolicy_ptr, sizeof(struct gr_reload_state));
++ memcpy(&reload_state->oldalloc, reload_state->oldalloc_ptr, sizeof(struct gr_alloc_state));
++
++ /* first make sure we'll be able to apply the new policy cleanly */
++ do_each_thread(task2, task) {
++ if (task->exec_file == NULL)
++ continue;
++ role_applied = 0;
++ if (!reload_state->oldmode && task->role->roletype & GR_ROLE_SPECIAL) {
++ /* preserve special roles */
++ FOR_EACH_ROLE_START(role)
++ if ((role->roletype & GR_ROLE_SPECIAL) && !strcmp(task->role->rolename, role->rolename)) {
++ rtmp = task->role;
++ task->role = role;
++ role_applied = 1;
++ break;
++ }
++ FOR_EACH_ROLE_END(role)
++ }
++ if (!role_applied) {
++ cred = __task_cred(task);
++ rtmp = task->role;
++ task->role = __lookup_acl_role_label(polstate, task, GR_GLOBAL_UID(cred->uid), GR_GLOBAL_GID(cred->gid));
++ }
++ /* this handles non-nested inherited subjects, nested subjects will still
++ be dropped currently */
++ subj = gr_get_subject_for_task(task, task->acl->filename);
++ task->tmpacl = gr_get_subject_for_task(task, NULL);
++ /* change the role back so that we've made no modifications to the policy */
++ task->role = rtmp;
++
++ if (subj == NULL || task->tmpacl == NULL) {
++ ret = -EINVAL;
++ goto out;
++ }
++ } while_each_thread(task2, task);
++
++ /* now actually apply the policy */
++
++ do_each_thread(task2, task) {
++ if (task->exec_file) {
++ role_applied = 0;
++ if (!reload_state->oldmode && task->role->roletype & GR_ROLE_SPECIAL) {
++ /* preserve special roles */
++ FOR_EACH_ROLE_START(role)
++ if ((role->roletype & GR_ROLE_SPECIAL) && !strcmp(task->role->rolename, role->rolename)) {
++ task->role = role;
++ role_applied = 1;
++ break;
++ }
++ FOR_EACH_ROLE_END(role)
++ }
++ if (!role_applied) {
++ cred = __task_cred(task);
++ task->role = __lookup_acl_role_label(polstate, task, GR_GLOBAL_UID(cred->uid), GR_GLOBAL_GID(cred->gid));
++ }
++ /* this handles non-nested inherited subjects, nested subjects will still
++ be dropped currently */
++ if (!reload_state->oldmode && task->inherited)
++ subj = gr_get_subject_for_task(task, task->acl->filename);
++ else {
++ /* looked up and tagged to the task previously */
++ subj = task->tmpacl;
++ }
++ /* subj will be non-null */
++ __gr_apply_subject_to_task(polstate, task, subj);
++ if (reload_state->oldmode) {
++ task->acl_role_id = 0;
++ task->acl_sp_role = 0;
++ task->inherited = 0;
++ }
++ } else {
++ // it's a kernel process
++ task->role = polstate->kernel_role;
++ task->acl = polstate->kernel_role->root_label;
++#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
++ task->acl->mode &= ~GR_PROCFIND;
++#endif
++ }
++ } while_each_thread(task2, task);
++
++ memcpy(reload_state->oldpolicy_ptr, &reload_state->newpolicy, sizeof(struct gr_policy_state));
++ memcpy(reload_state->oldalloc_ptr, &reload_state->newalloc, sizeof(struct gr_alloc_state));
++
++out:
++
++ return ret;
++}
++
++static int gracl_reload(struct gr_arg *args, unsigned char oldmode)
++{
++ struct gr_reload_state new_reload_state = { };
++ int err;
++
++ new_reload_state.oldpolicy_ptr = polstate;
++ new_reload_state.oldalloc_ptr = current_alloc_state;
++ new_reload_state.oldmode = oldmode;
++
++ current_alloc_state = &new_reload_state.newalloc;
++ polstate = &new_reload_state.newpolicy;
++
++ /* everything relevant is now saved off, copy in the new policy */
++ if (init_variables(args, true)) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
++ err = -ENOMEM;
++ goto error;
++ }
++
++ err = copy_user_acl(args);
++ free_init_variables();
++ if (err)
++ goto error;
++ /* the new policy is copied in, with the old policy available via saved_state
++ first go through applying roles, making sure to preserve special roles
++ then apply new subjects, making sure to preserve inherited and nested subjects,
++ though currently only inherited subjects will be preserved
++ */
++ err = stop_machine(gracl_reload_apply_policies, &new_reload_state, NULL);
++ if (err)
++ goto error;
++
++ /* we've now applied the new policy, so restore the old policy state to free it */
++ polstate = &new_reload_state.oldpolicy;
++ current_alloc_state = &new_reload_state.oldalloc;
++ free_variables(true);
++
++ /* oldpolicy/oldalloc_ptr point to the new policy/alloc states as they were copied
++ to running_polstate/current_alloc_state inside stop_machine
++ */
++ err = 0;
++ goto out;
++error:
++ /* on error of loading the new policy, we'll just keep the previous
++ policy set around
++ */
++ free_variables(true);
++
++ /* doesn't affect runtime, but maintains consistent state */
++out:
++ polstate = new_reload_state.oldpolicy_ptr;
++ current_alloc_state = new_reload_state.oldalloc_ptr;
++
++ return err;
++}
++
++static int
++gracl_init(struct gr_arg *args)
++{
++ int error = 0;
++
++ memcpy(&gr_system_salt, args->salt, sizeof(gr_system_salt));
++ memcpy(&gr_system_sum, args->sum, sizeof(gr_system_sum));
++
++ if (init_variables(args, false)) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
++ error = -ENOMEM;
++ goto out;
++ }
++
++ error = copy_user_acl(args);
++ free_init_variables();
++ if (error)
++ goto out;
++
++ error = gr_set_acls(0);
++ if (error)
++ goto out;
++
++ gr_enable_rbac_system();
++
++ return 0;
++
++out:
++ free_variables(false);
++ return error;
++}
++
++static int
++lookup_special_role_auth(__u16 mode, const char *rolename, unsigned char **salt,
++ unsigned char **sum)
++{
++ struct acl_role_label *r;
++ struct role_allowed_ip *ipp;
++ struct role_transition *trans;
++ unsigned int i;
++ int found = 0;
++ u32 curr_ip = current->signal->curr_ip;
++
++ current->signal->saved_ip = curr_ip;
++
++ /* check transition table */
++
++ for (trans = current->role->transitions; trans; trans = trans->next) {
++ if (!strcmp(rolename, trans->rolename)) {
++ found = 1;
++ break;
++ }
++ }
++
++ if (!found)
++ return 0;
++
++ /* handle special roles that do not require authentication
++ and check ip */
++
++ FOR_EACH_ROLE_START(r)
++ if (!strcmp(rolename, r->rolename) &&
++ (r->roletype & GR_ROLE_SPECIAL)) {
++ found = 0;
++ if (r->allowed_ips != NULL) {
++ for (ipp = r->allowed_ips; ipp; ipp = ipp->next) {
++ if ((ntohl(curr_ip) & ipp->netmask) ==
++ (ntohl(ipp->addr) & ipp->netmask))
++ found = 1;
++ }
++ } else
++ found = 2;
++ if (!found)
++ return 0;
++
++ if (((mode == GR_SPROLE) && (r->roletype & GR_ROLE_NOPW)) ||
++ ((mode == GR_SPROLEPAM) && (r->roletype & GR_ROLE_PAM))) {
++ *salt = NULL;
++ *sum = NULL;
++ return 1;
++ }
++ }
++ FOR_EACH_ROLE_END(r)
++
++ for (i = 0; i < polstate->num_sprole_pws; i++) {
++ if (!strcmp(rolename, polstate->acl_special_roles[i]->rolename)) {
++ *salt = polstate->acl_special_roles[i]->salt;
++ *sum = polstate->acl_special_roles[i]->sum;
++ return 1;
++ }
++ }
++
++ return 0;
++}
++
++int gr_check_secure_terminal(struct task_struct *task)
++{
++ struct task_struct *p, *p2, *p3;
++ struct files_struct *files;
++ struct fdtable *fdt;
++ struct file *our_file = NULL, *file;
++ int i;
++
++ if (task->signal->tty == NULL)
++ return 1;
++
++ files = get_files_struct(task);
++ if (files != NULL) {
++ rcu_read_lock();
++ fdt = files_fdtable(files);
++ for (i=0; i < fdt->max_fds; i++) {
++ file = fcheck_files(files, i);
++ if (file && (our_file == NULL) && (file->private_data == task->signal->tty)) {
++ get_file(file);
++ our_file = file;
++ }
++ }
++ rcu_read_unlock();
++ put_files_struct(files);
++ }
++
++ if (our_file == NULL)
++ return 1;
++
++ read_lock(&tasklist_lock);
++ do_each_thread(p2, p) {
++ files = get_files_struct(p);
++ if (files == NULL ||
++ (p->signal && p->signal->tty == task->signal->tty)) {
++ if (files != NULL)
++ put_files_struct(files);
++ continue;
++ }
++ rcu_read_lock();
++ fdt = files_fdtable(files);
++ for (i=0; i < fdt->max_fds; i++) {
++ file = fcheck_files(files, i);
++ if (file && S_ISCHR(file->f_path.dentry->d_inode->i_mode) &&
++ file->f_path.dentry->d_inode->i_rdev == our_file->f_path.dentry->d_inode->i_rdev) {
++ p3 = task;
++ while (task_pid_nr(p3) > 0) {
++ if (p3 == p)
++ break;
++ p3 = p3->real_parent;
++ }
++ if (p3 == p)
++ break;
++ gr_log_ttysniff(GR_DONT_AUDIT_GOOD, GR_TTYSNIFF_ACL_MSG, p);
++ gr_handle_alertkill(p);
++ rcu_read_unlock();
++ put_files_struct(files);
++ read_unlock(&tasklist_lock);
++ fput(our_file);
++ return 0;
++ }
++ }
++ rcu_read_unlock();
++ put_files_struct(files);
++ } while_each_thread(p2, p);
++ read_unlock(&tasklist_lock);
++
++ fput(our_file);
++ return 1;
++}
++
++ssize_t
++write_grsec_handler(struct file *file, const char __user * buf, size_t count, loff_t *ppos)
++{
++ struct gr_arg_wrapper uwrap;
++ unsigned char *sprole_salt = NULL;
++ unsigned char *sprole_sum = NULL;
++ int error = 0;
++ int error2 = 0;
++ size_t req_count = 0;
++ unsigned char oldmode = 0;
++
++ mutex_lock(&gr_dev_mutex);
++
++ if (gr_acl_is_enabled() && !(current->acl->mode & GR_KERNELAUTH)) {
++ error = -EPERM;
++ goto out;
++ }
++
++#ifdef CONFIG_COMPAT
++ pax_open_kernel();
++ if (is_compat_task()) {
++ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_compat;
++ copy_gr_arg = &copy_gr_arg_compat;
++ copy_acl_object_label = &copy_acl_object_label_compat;
++ copy_acl_subject_label = &copy_acl_subject_label_compat;
++ copy_acl_role_label = &copy_acl_role_label_compat;
++ copy_acl_ip_label = &copy_acl_ip_label_compat;
++ copy_role_allowed_ip = &copy_role_allowed_ip_compat;
++ copy_role_transition = &copy_role_transition_compat;
++ copy_sprole_pw = &copy_sprole_pw_compat;
++ copy_gr_hash_struct = &copy_gr_hash_struct_compat;
++ copy_pointer_from_array = &copy_pointer_from_array_compat;
++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat;
++ } else {
++ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_normal;
++ copy_gr_arg = &copy_gr_arg_normal;
++ copy_acl_object_label = &copy_acl_object_label_normal;
++ copy_acl_subject_label = &copy_acl_subject_label_normal;
++ copy_acl_role_label = &copy_acl_role_label_normal;
++ copy_acl_ip_label = &copy_acl_ip_label_normal;
++ copy_role_allowed_ip = &copy_role_allowed_ip_normal;
++ copy_role_transition = &copy_role_transition_normal;
++ copy_sprole_pw = &copy_sprole_pw_normal;
++ copy_gr_hash_struct = &copy_gr_hash_struct_normal;
++ copy_pointer_from_array = &copy_pointer_from_array_normal;
++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_normal;
++ }
++ pax_close_kernel();
++#endif
++
++ req_count = get_gr_arg_wrapper_size();
++
++ if (count != req_count) {
++ gr_log_int_int(GR_DONT_AUDIT_GOOD, GR_DEV_ACL_MSG, (int)count, (int)req_count);
++ error = -EINVAL;
++ goto out;
++ }
++
++
++ if (gr_auth_expires && time_after_eq(get_seconds(), gr_auth_expires)) {
++ gr_auth_expires = 0;
++ gr_auth_attempts = 0;
++ }
++
++ error = copy_gr_arg_wrapper(buf, &uwrap);
++ if (error)
++ goto out;
++
++ error = copy_gr_arg(uwrap.arg, &gr_usermode);
++ if (error)
++ goto out;
++
++ if (gr_usermode.mode != GR_SPROLE && gr_usermode.mode != GR_SPROLEPAM &&
++ gr_auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
++ time_after(gr_auth_expires, get_seconds())) {
++ error = -EBUSY;
++ goto out;
++ }
++
++ /* if non-root trying to do anything other than use a special role,
++ do not attempt authentication, do not count towards authentication
++ locking
++ */
++
++ if (gr_usermode.mode != GR_SPROLE && gr_usermode.mode != GR_STATUS &&
++ gr_usermode.mode != GR_UNSPROLE && gr_usermode.mode != GR_SPROLEPAM &&
++ gr_is_global_nonroot(current_uid())) {
++ error = -EPERM;
++ goto out;
++ }
++
++ /* ensure pw and special role name are null terminated */
++
++ gr_usermode.pw[GR_PW_LEN - 1] = '\0';
++ gr_usermode.sp_role[GR_SPROLE_LEN - 1] = '\0';
++
++ /* Okay.
++ * We have our enough of the argument structure..(we have yet
++ * to copy_from_user the tables themselves) . Copy the tables
++ * only if we need them, i.e. for loading operations. */
++
++ switch (gr_usermode.mode) {
++ case GR_STATUS:
++ if (gr_acl_is_enabled()) {
++ error = 1;
++ if (!gr_check_secure_terminal(current))
++ error = 3;
++ } else
++ error = 2;
++ goto out;
++ case GR_SHUTDOWN:
++ if (gr_acl_is_enabled() && !(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ stop_machine(gr_rbac_disable, NULL, NULL);
++ free_variables(false);
++ memset(&gr_usermode, 0, sizeof(gr_usermode));
++ memset(&gr_system_salt, 0, sizeof(gr_system_salt));
++ memset(&gr_system_sum, 0, sizeof(gr_system_sum));
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTS_ACL_MSG);
++ } else if (gr_acl_is_enabled()) {
++ gr_log_noargs(GR_DONT_AUDIT, GR_SHUTF_ACL_MSG);
++ error = -EPERM;
++ } else {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTI_ACL_MSG);
++ error = -EAGAIN;
++ }
++ break;
++ case GR_ENABLE:
++ if (!gr_acl_is_enabled() && !(error2 = gracl_init(&gr_usermode)))
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_ENABLE_ACL_MSG, GR_VERSION);
++ else {
++ if (gr_acl_is_enabled())
++ error = -EAGAIN;
++ else
++ error = error2;
++ gr_log_str(GR_DONT_AUDIT, GR_ENABLEF_ACL_MSG, GR_VERSION);
++ }
++ break;
++ case GR_OLDRELOAD:
++ oldmode = 1;
++ case GR_RELOAD:
++ if (!gr_acl_is_enabled()) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOADI_ACL_MSG, GR_VERSION);
++ error = -EAGAIN;
++ } else if (!(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ error2 = gracl_reload(&gr_usermode, oldmode);
++ if (!error2)
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOAD_ACL_MSG, GR_VERSION);
++ else {
++ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
++ error = error2;
++ }
++ } else {
++ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
++ error = -EPERM;
++ }
++ break;
++ case GR_SEGVMOD:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (!(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODS_ACL_MSG);
++ if (gr_usermode.segv_device && gr_usermode.segv_inode) {
++ struct acl_subject_label *segvacl;
++ segvacl =
++ lookup_acl_subj_label(gr_usermode.segv_inode,
++ gr_usermode.segv_device,
++ current->role);
++ if (segvacl) {
++ segvacl->crashes = 0;
++ segvacl->expires = 0;
++ }
++ } else if (gr_find_uid(gr_usermode.segv_uid) >= 0) {
++ gr_remove_uid(gr_usermode.segv_uid);
++ }
++ } else {
++ gr_log_noargs(GR_DONT_AUDIT, GR_SEGVMODF_ACL_MSG);
++ error = -EPERM;
++ }
++ break;
++ case GR_SPROLE:
++ case GR_SPROLEPAM:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SPROLEI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (current->role->expires && time_after_eq(get_seconds(), current->role->expires)) {
++ current->role->expires = 0;
++ current->role->auth_attempts = 0;
++ }
++
++ if (current->role->auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
++ time_after(current->role->expires, get_seconds())) {
++ error = -EBUSY;
++ goto out;
++ }
++
++ if (lookup_special_role_auth
++ (gr_usermode.mode, gr_usermode.sp_role, &sprole_salt, &sprole_sum)
++ && ((!sprole_salt && !sprole_sum)
++ || !(chkpw(&gr_usermode, sprole_salt, sprole_sum)))) {
++ char *p = "";
++ assign_special_role(gr_usermode.sp_role);
++ read_lock(&tasklist_lock);
++ if (current->real_parent)
++ p = current->real_parent->role->rolename;
++ read_unlock(&tasklist_lock);
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_SPROLES_ACL_MSG,
++ p, acl_sp_role_value);
++ } else {
++ gr_log_str(GR_DONT_AUDIT, GR_SPROLEF_ACL_MSG, gr_usermode.sp_role);
++ error = -EPERM;
++ if(!(current->role->auth_attempts++))
++ current->role->expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
++
++ goto out;
++ }
++ break;
++ case GR_UNSPROLE:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_UNSPROLEI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (current->role->roletype & GR_ROLE_SPECIAL) {
++ char *p = "";
++ int i = 0;
++
++ read_lock(&tasklist_lock);
++ if (current->real_parent) {
++ p = current->real_parent->role->rolename;
++ i = current->real_parent->acl_role_id;
++ }
++ read_unlock(&tasklist_lock);
++
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_UNSPROLES_ACL_MSG, p, i);
++ gr_set_acls(1);
++ } else {
++ error = -EPERM;
++ goto out;
++ }
++ break;
++ default:
++ gr_log_int(GR_DONT_AUDIT, GR_INVMODE_ACL_MSG, gr_usermode.mode);
++ error = -EINVAL;
++ break;
++ }
++
++ if (error != -EPERM)
++ goto out;
++
++ if(!(gr_auth_attempts++))
++ gr_auth_expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
++
++ out:
++ mutex_unlock(&gr_dev_mutex);
++
++ if (!error)
++ error = req_count;
++
++ return error;
++}
++
++int
++gr_set_acls(const int type)
++{
++ struct task_struct *task, *task2;
++ struct acl_role_label *role = current->role;
++ struct acl_subject_label *subj;
++ __u16 acl_role_id = current->acl_role_id;
++ const struct cred *cred;
++ int ret;
++
++ rcu_read_lock();
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++ do_each_thread(task2, task) {
++ /* check to see if we're called from the exit handler,
++ if so, only replace ACLs that have inherited the admin
++ ACL */
++
++ if (type && (task->role != role ||
++ task->acl_role_id != acl_role_id))
++ continue;
++
++ task->acl_role_id = 0;
++ task->acl_sp_role = 0;
++ task->inherited = 0;
++
++ if (task->exec_file) {
++ cred = __task_cred(task);
++ task->role = __lookup_acl_role_label(polstate, task, GR_GLOBAL_UID(cred->uid), GR_GLOBAL_GID(cred->gid));
++ subj = gr_get_subject_for_task(task, NULL);
++ if (subj == NULL) {
++ ret = -EINVAL;
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ rcu_read_unlock();
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_DEFACL_MSG, task->comm, task_pid_nr(task));
++ return ret;
++ }
++ __gr_apply_subject_to_task(polstate, task, subj);
++ } else {
++ // it's a kernel process
++ task->role = polstate->kernel_role;
++ task->acl = polstate->kernel_role->root_label;
++#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
++ task->acl->mode &= ~GR_PROCFIND;
++#endif
++ }
++ } while_each_thread(task2, task);
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ rcu_read_unlock();
++
++ return 0;
++}
diff --git a/grsecurity/gracl_res.c b/grsecurity/gracl_res.c
new file mode 100644
index 0000000..39645c9
@@ -68011,10 +68307,10 @@ index 0000000..39645c9
+}
diff --git a/grsecurity/gracl_segv.c b/grsecurity/gracl_segv.c
new file mode 100644
-index 0000000..3c38bfe
+index 0000000..2040e61
--- /dev/null
+++ b/grsecurity/gracl_segv.c
-@@ -0,0 +1,305 @@
+@@ -0,0 +1,313 @@
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <asm/uaccess.h>
@@ -68071,8 +68367,16 @@ index 0000000..3c38bfe
+void
+gr_free_uidset(void)
+{
-+ if (uid_set)
-+ kfree(uid_set);
++ if (uid_set) {
++ struct crash_uid *tmpset;
++ spin_lock(&gr_uid_lock);
++ tmpset = uid_set;
++ uid_set = NULL;
++ uid_used = 0;
++ spin_unlock(&gr_uid_lock);
++ if (tmpset)
++ kfree(tmpset);
++ }
+
+ return;
+}
@@ -68393,7 +68697,7 @@ index 0000000..bc0be01
+}
diff --git a/grsecurity/grsec_chroot.c b/grsecurity/grsec_chroot.c
new file mode 100644
-index 0000000..bd6e105
+index 0000000..e10b319
--- /dev/null
+++ b/grsecurity/grsec_chroot.c
@@ -0,0 +1,370 @@
@@ -68409,7 +68713,7 @@ index 0000000..bd6e105
+#include <linux/grinternal.h>
+
+#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
-+static int gr_init_ran;
++int gr_init_ran;
+#endif
+
+void gr_set_chroot_entries(struct task_struct *task, const struct path *path)
@@ -68769,10 +69073,10 @@ index 0000000..bd6e105
+}
diff --git a/grsecurity/grsec_disabled.c b/grsecurity/grsec_disabled.c
new file mode 100644
-index 0000000..ce65ceb
+index 0000000..0866ab2
--- /dev/null
+++ b/grsecurity/grsec_disabled.c
-@@ -0,0 +1,434 @@
+@@ -0,0 +1,427 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -69169,12 +69473,6 @@ index 0000000..ce65ceb
+ return 0;
+}
+
-+void
-+gr_set_kernel_label(struct task_struct *task)
-+{
-+ return;
-+}
-+
+int
+gr_check_user_change(kuid_t real, kuid_t effective, kuid_t fs)
+{
@@ -69202,7 +69500,6 @@ index 0000000..ce65ceb
+ return;
+}
+
-+EXPORT_SYMBOL(gr_set_kernel_label);
+#ifdef CONFIG_SECURITY
+EXPORT_SYMBOL(gr_check_user_change);
+EXPORT_SYMBOL(gr_check_group_change);
@@ -69461,10 +69758,10 @@ index 0000000..8ca18bf
+}
diff --git a/grsecurity/grsec_init.c b/grsecurity/grsec_init.c
new file mode 100644
-index 0000000..087cf30
+index 0000000..a88e901
--- /dev/null
+++ b/grsecurity/grsec_init.c
-@@ -0,0 +1,287 @@
+@@ -0,0 +1,272 @@
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
@@ -69544,10 +69841,6 @@ index 0000000..087cf30
+char *gr_alert_log_buf;
+char *gr_audit_log_buf;
+
-+extern struct gr_arg *gr_usermode;
-+extern unsigned char *gr_system_salt;
-+extern unsigned char *gr_system_sum;
-+
+void __init
+grsecurity_init(void)
+{
@@ -69588,17 +69881,6 @@ index 0000000..087cf30
+ return;
+ }
+
-+ /* allocate memory for authentication structure */
-+ gr_usermode = kmalloc(sizeof(struct gr_arg), GFP_KERNEL);
-+ gr_system_salt = kmalloc(GR_SALT_LEN, GFP_KERNEL);
-+ gr_system_sum = kmalloc(GR_SHA_LEN, GFP_KERNEL);
-+
-+ if (!gr_usermode || !gr_system_salt || !gr_system_sum) {
-+ panic("Unable to allocate grsecurity authentication structure");
-+ return;
-+ }
-+
-+
+#ifdef CONFIG_GRKERNSEC_IO
+#if !defined(CONFIG_GRKERNSEC_SYSCTL_DISTRO)
+ grsec_disable_privio = 1;
@@ -73238,10 +73520,10 @@ index 9b4dd49..61fd41d 100644
{
diff --git a/include/linux/gracl.h b/include/linux/gracl.h
new file mode 100644
-index 0000000..ebe6d72
+index 0000000..edb2cb6
--- /dev/null
+++ b/include/linux/gracl.h
-@@ -0,0 +1,319 @@
+@@ -0,0 +1,340 @@
+#ifndef GR_ACL_H
+#define GR_ACL_H
+
@@ -73253,19 +73535,20 @@ index 0000000..ebe6d72
+
+/* Major status information */
+
-+#define GR_VERSION "grsecurity 2.9.1"
-+#define GRSECURITY_VERSION 0x2901
++#define GR_VERSION "grsecurity 3.0"
++#define GRSECURITY_VERSION 0x3000
+
+enum {
+ GR_SHUTDOWN = 0,
+ GR_ENABLE = 1,
+ GR_SPROLE = 2,
-+ GR_RELOAD = 3,
++ GR_OLDRELOAD = 3,
+ GR_SEGVMOD = 4,
+ GR_STATUS = 5,
+ GR_UNSPROLE = 6,
+ GR_PASSSET = 7,
+ GR_SPROLEPAM = 8,
++ GR_RELOAD = 9,
+};
+
+/* Password setup definitions
@@ -73494,6 +73777,34 @@ index 0000000..ebe6d72
+ __u32 s_size;
+};
+
++struct gr_policy_state {
++ struct sprole_pw **acl_special_roles;
++ __u16 num_sprole_pws;
++ struct acl_role_label *kernel_role;
++ struct acl_role_label *role_list;
++ struct acl_role_label *default_role;
++ struct acl_role_db acl_role_set;
++ struct acl_subj_map_db subj_map_set;
++ struct name_db name_set;
++ struct inodev_db inodev_set;
++};
++
++struct gr_alloc_state {
++ unsigned long alloc_stack_next;
++ unsigned long alloc_stack_size;
++ void **alloc_stack;
++};
++
++struct gr_reload_state {
++ struct gr_policy_state oldpolicy;
++ struct gr_alloc_state oldalloc;
++ struct gr_policy_state newpolicy;
++ struct gr_alloc_state newalloc;
++ struct gr_policy_state *oldpolicy_ptr;
++ struct gr_alloc_state *oldalloc_ptr;
++ unsigned char oldmode;
++};
++
+/* End Data Structures Section */
+
+/* Hash functions generated by empirical testing by Brad Spengler
@@ -73525,14 +73836,6 @@ index 0000000..ebe6d72
+ return full_name_hash((const unsigned char *)name, len) % sz;
+}
+
-+#define FOR_EACH_ROLE_START(role) \
-+ role = role_list; \
-+ while (role) {
-+
-+#define FOR_EACH_ROLE_END(role) \
-+ role = role->prev; \
-+ }
-+
+#define FOR_EACH_SUBJECT_START(role,subj,iter) \
+ subj = NULL; \
+ iter = 0; \
@@ -73886,10 +74189,10 @@ index 0000000..be66033
+#endif
diff --git a/include/linux/grinternal.h b/include/linux/grinternal.h
new file mode 100644
-index 0000000..a5625be
+index 0000000..d25522e
--- /dev/null
+++ b/include/linux/grinternal.h
-@@ -0,0 +1,230 @@
+@@ -0,0 +1,229 @@
+#ifndef __GRINTERNAL_H
+#define __GRINTERNAL_H
+
@@ -73912,7 +74215,6 @@ index 0000000..a5625be
+int gr_check_protected_task(const struct task_struct *task);
+__u32 to_gr_audit(const __u32 reqmode);
+int gr_set_acls(const int type);
-+int gr_apply_subject_to_task(struct task_struct *task);
+int gr_acl_is_enabled(void);
+char gr_roletype_to_char(void);
+
@@ -74242,10 +74544,10 @@ index 0000000..378a81a
+#define GR_IPC_DENIED_MSG "denied %s of globally-%sable IPC with creator uid %u by "
diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h
new file mode 100644
-index 0000000..d6f5a21
+index 0000000..b2edfb1
--- /dev/null
+++ b/include/linux/grsecurity.h
-@@ -0,0 +1,244 @@
+@@ -0,0 +1,243 @@
+#ifndef GR_SECURITY_H
+#define GR_SECURITY_H
+#include <linux/fs.h>
@@ -74376,7 +74678,6 @@ index 0000000..d6f5a21
+ const struct vfsmount *mnt);
+int gr_check_crash_exec(const struct file *filp);
+int gr_acl_is_enabled(void);
-+void gr_set_kernel_label(struct task_struct *task);
+void gr_set_role_label(struct task_struct *task, const kuid_t uid,
+ const kgid_t gid);
+int gr_set_proc_label(const struct dentry *dentry,
@@ -74823,7 +75124,7 @@ index c6e091b..a940adf 100644
extern struct kgdb_arch arch_kgdb_ops;
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
-index 0555cc6..b16a7a4 100644
+index 0555cc6..40116ce 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -34,6 +34,8 @@ extern char modprobe_path[]; /* for sysctl */
@@ -74835,6 +75136,16 @@ index 0555cc6..b16a7a4 100644
#define request_module(mod...) __request_module(true, mod)
#define request_module_nowait(mod...) __request_module(false, mod)
#define try_then_request_module(x, mod...) \
+@@ -57,6 +59,9 @@ struct subprocess_info {
+ struct work_struct work;
+ struct completion *complete;
+ char *path;
++#ifdef CONFIG_GRKERNSEC
++ char *origpath;
++#endif
+ char **argv;
+ char **envp;
+ int wait;
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 939b112..ed6ed51 100644
--- a/include/linux/kobject.h
@@ -76221,7 +76532,7 @@ index 6dacb93..6174423 100644
static inline void anon_vma_merge(struct vm_area_struct *vma,
struct vm_area_struct *next)
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 078066d..4090b3b 100644
+index 078066d..d09659d 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -62,6 +62,7 @@ struct bio_list;
@@ -76350,7 +76661,7 @@ index 078066d..4090b3b 100644
#ifdef CONFIG_FUTEX
struct robust_list_head __user *robust_list;
#ifdef CONFIG_COMPAT
-@@ -1406,8 +1446,76 @@ struct task_struct {
+@@ -1406,8 +1446,78 @@ struct task_struct {
unsigned int sequential_io;
unsigned int sequential_io_avg;
#endif
@@ -76365,10 +76676,12 @@ index 078066d..4090b3b 100644
+#endif
+ struct dentry *gr_chroot_dentry;
+ struct acl_subject_label *acl;
++ struct acl_subject_label *tmpacl;
+ struct acl_role_label *role;
+ struct file *exec_file;
+ unsigned long brute_expires;
+ u16 acl_role_id;
++ u8 inherited;
+ /* is this the task that authenticated to the special role */
+ u8 acl_sp_role;
+ u8 is_writable;
@@ -76427,7 +76740,7 @@ index 078066d..4090b3b 100644
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -1466,7 +1574,7 @@ struct pid_namespace;
+@@ -1466,7 +1576,7 @@ struct pid_namespace;
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
@@ -76436,7 +76749,7 @@ index 078066d..4090b3b 100644
{
return tsk->pid;
}
-@@ -1916,7 +2024,9 @@ void yield(void);
+@@ -1916,7 +2026,9 @@ void yield(void);
extern struct exec_domain default_exec_domain;
union thread_union {
@@ -76446,7 +76759,7 @@ index 078066d..4090b3b 100644
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
-@@ -1949,6 +2059,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -1949,6 +2061,7 @@ extern struct pid_namespace init_pid_ns;
*/
extern struct task_struct *find_task_by_vpid(pid_t nr);
@@ -76454,7 +76767,7 @@ index 078066d..4090b3b 100644
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
-@@ -2113,7 +2224,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2113,7 +2226,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
@@ -76463,7 +76776,7 @@ index 078066d..4090b3b 100644
extern int allow_signal(int);
extern int disallow_signal(int);
-@@ -2304,9 +2415,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+@@ -2304,9 +2417,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
#endif
@@ -79117,7 +79430,7 @@ index a67ef9d..2d17ed9 100644
#ifdef CONFIG_BLK_DEV_RAM
int fd;
diff --git a/init/main.c b/init/main.c
-index 586cd33..f1af30f 100644
+index 586cd33..c054108 100644
--- a/init/main.c
+++ b/init/main.c
@@ -102,6 +102,8 @@ static inline void mark_rodata_ro(void) { }
@@ -79235,7 +79548,7 @@ index 586cd33..f1af30f 100644
return ret;
}
-@@ -805,8 +874,8 @@ static int run_init_process(const char *init_filename)
+@@ -805,10 +874,14 @@ static int run_init_process(const char *init_filename)
{
argv_init[0] = init_filename;
return do_execve(init_filename,
@@ -79245,8 +79558,26 @@ index 586cd33..f1af30f 100644
+ (const char __user *const __force_user *)envp_init);
}
++#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
++extern int gr_init_ran;
++#endif
++
static noinline void __init kernel_init_freeable(void);
-@@ -883,7 +952,7 @@ static noinline void __init kernel_init_freeable(void)
+
+ static int __ref kernel_init(void *unused)
+@@ -829,6 +902,11 @@ static int __ref kernel_init(void *unused)
+ pr_err("Failed to execute %s\n", ramdisk_execute_command);
+ }
+
++#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
++ /* if no initrd was used, be extra sure we enforce chroot restrictions */
++ gr_init_ran = 1;
++#endif
++
+ /*
+ * We try each of these until one succeeds.
+ *
+@@ -883,7 +961,7 @@ static noinline void __init kernel_init_freeable(void)
do_basic_setup();
/* Open the /dev/console on the rootfs, this should never fail */
@@ -79255,7 +79586,7 @@ index 586cd33..f1af30f 100644
pr_err("Warning: unable to open an initial console.\n");
(void) sys_dup(0);
-@@ -896,11 +965,13 @@ static noinline void __init kernel_init_freeable(void)
+@@ -896,11 +974,13 @@ static noinline void __init kernel_init_freeable(void)
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
@@ -81018,7 +81349,7 @@ index 59f7b55..4022f65 100644
/* Don't allow clients that don't understand the native
diff --git a/kernel/kmod.c b/kernel/kmod.c
-index b086006..a27913b 100644
+index b086006..ae5736e 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -75,7 +75,7 @@ static void free_modprobe_argv(struct subprocess_info *info)
@@ -81146,7 +81477,37 @@ index b086006..a27913b 100644
EXPORT_SYMBOL(__request_module);
#endif /* CONFIG_MODULES */
-@@ -303,7 +356,7 @@ static int wait_for_helper(void *data)
+@@ -218,6 +271,18 @@ static int ____call_usermodehelper(void *data)
+ */
+ set_user_nice(current, 0);
+
++#ifdef CONFIG_GRKERNSEC
++ /* this is race-free as far as userland is concerned as we copied
++ out the path to be used prior to this point and are now operating
++ on that copy
++ */
++ if (strncmp(sub_info->path, "/sbin/", 6) || strstr(sub_info->path, "..")) {
++ printk(KERN_ALERT "grsec: denied exec of usermode helper binary %.950s located outside of /sbin\n", sub_info->path);
++ retval = -EPERM;
++ goto fail;
++ }
++#endif
++
+ retval = -ENOMEM;
+ new = prepare_kernel_cred(current);
+ if (!new)
+@@ -260,6 +325,10 @@ static int call_helper(void *data)
+
+ static void call_usermodehelper_freeinfo(struct subprocess_info *info)
+ {
++#ifdef CONFIG_GRKERNSEC
++ kfree(info->path);
++ info->path = info->origpath;
++#endif
+ if (info->cleanup)
+ (*info->cleanup)(info);
+ kfree(info);
+@@ -303,7 +372,7 @@ static int wait_for_helper(void *data)
*
* Thus the __user pointer cast is valid here.
*/
@@ -81155,7 +81516,20 @@ index b086006..a27913b 100644
/*
* If ret is 0, either ____call_usermodehelper failed and the
-@@ -650,7 +703,7 @@ EXPORT_SYMBOL(call_usermodehelper);
+@@ -542,7 +611,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
+ goto out;
+
+ INIT_WORK(&sub_info->work, __call_usermodehelper);
++#ifdef CONFIG_GRKERNSEC
++ sub_info->origpath = path;
++ sub_info->path = kstrdup(path, gfp_mask);
++#else
+ sub_info->path = path;
++#endif
+ sub_info->argv = argv;
+ sub_info->envp = envp;
+
+@@ -650,7 +724,7 @@ EXPORT_SYMBOL(call_usermodehelper);
static int proc_cap_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
diff --git a/3.2.52/0000_README b/3.2.52/0000_README
index 18cef6b..ae435e7 100644
--- a/3.2.52/0000_README
+++ b/3.2.52/0000_README
@@ -126,7 +126,7 @@ Patch: 1051_linux-3.2.52.patch
From: http://www.kernel.org
Desc: Linux 3.2.52
-Patch: 4420_grsecurity-2.9.1-3.2.52-201311222106.patch
+Patch: 4420_grsecurity-3.0-3.2.52-201311242031.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/3.2.52/4420_grsecurity-2.9.1-3.2.52-201311222106.patch b/3.2.52/4420_grsecurity-3.0-3.2.52-201311242031.patch
index 1102a6d..42d71bf 100644
--- a/3.2.52/4420_grsecurity-2.9.1-3.2.52-201311222106.patch
+++ b/3.2.52/4420_grsecurity-3.0-3.2.52-201311242031.patch
@@ -9705,10 +9705,16 @@ index bf56e17..91465a1 100644
Enabling this option turns a certain set of sanity checks for user
copy operations into compile time failures.
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
-index 03dbc7f5b..4d12eea 100644
+index 03dbc7f5b..e1aa479 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
-@@ -46,6 +46,7 @@ else
+@@ -40,12 +40,12 @@ ifeq ($(CONFIG_X86_32),y)
+ KBUILD_CFLAGS += $(cflags-y)
+
+ # temporary until string.h is fixed
+- KBUILD_CFLAGS += -ffreestanding
+ else
+ BITS := 64
UTS_MACHINE := x86_64
CHECKFLAGS += -D__x86_64__ -m64
@@ -9716,7 +9722,16 @@ index 03dbc7f5b..4d12eea 100644
KBUILD_AFLAGS += -m64
KBUILD_CFLAGS += -m64
-@@ -199,3 +200,12 @@ define archhelp
+@@ -72,6 +72,8 @@ else
+ KBUILD_CFLAGS += -maccumulate-outgoing-args
+ endif
+
++KBUILD_CFLAGS += -ffreestanding
++
+ ifdef CONFIG_CC_STACKPROTECTOR
+ cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
+ ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
+@@ -199,3 +201,12 @@ define archhelp
echo ' FDARGS="..." arguments for the booted kernel'
echo ' FDINITRD=file initrd for the booted kernel'
endef
@@ -11982,7 +11997,7 @@ index 0e1cbfc..5623683 100644
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h
-index 1775d6e..b65017f 100644
+index 1775d6e..c312a36 100644
--- a/arch/x86/include/asm/bitops.h
+++ b/arch/x86/include/asm/bitops.h
@@ -38,7 +38,7 @@
@@ -11994,6 +12009,24 @@ index 1775d6e..b65017f 100644
#define CONST_MASK(nr) (1 << ((nr) & 7))
/**
+@@ -344,7 +344,7 @@ static int test_bit(int nr, const volatile unsigned long *addr);
+ *
+ * Undefined if no bit exists, so code should check against 0 first.
+ */
+-static inline unsigned long __ffs(unsigned long word)
++static inline unsigned long __intentional_overflow(-1) __ffs(unsigned long word)
+ {
+ asm("bsf %1,%0"
+ : "=r" (word)
+@@ -358,7 +358,7 @@ static inline unsigned long __ffs(unsigned long word)
+ *
+ * Undefined if no zero exists, so code should check against ~0UL first.
+ */
+-static inline unsigned long ffz(unsigned long word)
++static inline unsigned long __intentional_overflow(-1) ffz(unsigned long word)
+ {
+ asm("bsf %1,%0"
+ : "=r" (word)
diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
index 5e1a2ee..c9f9533 100644
--- a/arch/x86/include/asm/boot.h
@@ -13966,7 +13999,7 @@ index 2dddb31..100c638 100644
/*
* x86-64 Task Priority Register, CR8
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index f7c89e2..cd4bff6 100644
+index f7c89e2..9962bae 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -266,7 +266,7 @@ struct tss_struct {
@@ -14076,8 +14109,8 @@ index f7c89e2..cd4bff6 100644
struct aperfmperf {
- u64 aperf, mperf;
-+ u64 aperf __intentional_overflow(0);
-+ u64 mperf __intentional_overflow(0);
++ u64 aperf __intentional_overflow(-1);
++ u64 mperf __intentional_overflow(-1);
};
static inline void get_aperfmperf(struct aperfmperf *am)
@@ -15064,30 +15097,9 @@ index 36361bf..4252f11 100644
#ifdef CONFIG_X86_WP_WORKS_OK
diff --git a/arch/x86/include/asm/uaccess_32.h b/arch/x86/include/asm/uaccess_32.h
-index 566e803..86f1302 100644
+index 566e803..9540707 100644
--- a/arch/x86/include/asm/uaccess_32.h
+++ b/arch/x86/include/asm/uaccess_32.h
-@@ -11,15 +11,15 @@
- #include <asm/page.h>
-
- unsigned long __must_check __copy_to_user_ll
-- (void __user *to, const void *from, unsigned long n);
-+ (void __user *to, const void *from, unsigned long n) __size_overflow(3);
- unsigned long __must_check __copy_from_user_ll
-- (void *to, const void __user *from, unsigned long n);
-+ (void *to, const void __user *from, unsigned long n) __size_overflow(3);
- unsigned long __must_check __copy_from_user_ll_nozero
-- (void *to, const void __user *from, unsigned long n);
-+ (void *to, const void __user *from, unsigned long n) __size_overflow(3);
- unsigned long __must_check __copy_from_user_ll_nocache
-- (void *to, const void __user *from, unsigned long n);
-+ (void *to, const void __user *from, unsigned long n) __size_overflow(3);
- unsigned long __must_check __copy_from_user_ll_nocache_nozero
-- (void *to, const void __user *from, unsigned long n);
-+ (void *to, const void __user *from, unsigned long n) __size_overflow(3);
-
- /**
- * __copy_to_user_inatomic: - Copy a block of data into user space, with less checking.
@@ -43,6 +43,11 @@ unsigned long __must_check __copy_from_user_ll_nocache_nozero
static __always_inline unsigned long __must_check
__copy_to_user_inatomic(void __user *to, const void *from, unsigned long n)
@@ -15238,7 +15250,7 @@ index 566e803..86f1302 100644
}
diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h
-index 1c66d30..c815e61 100644
+index 1c66d30..9d90f2c 100644
--- a/arch/x86/include/asm/uaccess_64.h
+++ b/arch/x86/include/asm/uaccess_64.h
@@ -10,6 +10,9 @@
@@ -15261,9 +15273,8 @@ index 1c66d30..c815e61 100644
-copy_user_generic_unrolled(void *to, const void *from, unsigned len);
+copy_user_generic_unrolled(void *to, const void *from, unsigned long len) __size_overflow(3);
--static __always_inline __must_check unsigned long
+ static __always_inline __must_check unsigned long
-copy_user_generic(void *to, const void *from, unsigned len)
-+static __always_inline __must_check __size_overflow(3) unsigned long
+copy_user_generic(void *to, const void *from, unsigned long len)
{
unsigned ret;
@@ -15551,14 +15562,9 @@ index 1c66d30..c815e61 100644
}
}
-@@ -215,39 +280,60 @@ __strncpy_from_user(char *dst, const char __user *src, long count);
- __must_check long strnlen_user(const char __user *str, long n);
- __must_check long __strnlen_user(const char __user *str, long n);
- __must_check long strlen_user(const char __user *str);
--__must_check unsigned long clear_user(void __user *mem, unsigned long len);
--__must_check unsigned long __clear_user(void __user *mem, unsigned long len);
-+__must_check unsigned long clear_user(void __user *mem, unsigned long len) __size_overflow(2);
-+__must_check unsigned long __clear_user(void __user *mem, unsigned long len) __size_overflow(2);
+@@ -218,36 +283,57 @@ __must_check long strlen_user(const char __user *str);
+ __must_check unsigned long clear_user(void __user *mem, unsigned long len);
+ __must_check unsigned long __clear_user(void __user *mem, unsigned long len);
-static __must_check __always_inline int
-__copy_from_user_inatomic(void *dst, const void __user *src, unsigned size)
@@ -15587,7 +15593,7 @@ index 1c66d30..c815e61 100644
-extern long __copy_user_nocache(void *dst, const void __user *src,
- unsigned size, int zerorest);
+extern unsigned long __copy_user_nocache(void *dst, const void __user *src,
-+ unsigned long size, int zerorest) __size_overflow(3);
++ unsigned long size, int zerorest);
-static inline int
-__copy_from_user_nocache(void *dst, const void __user *src, unsigned size)
@@ -15682,6 +15688,19 @@ index 1971e65..1e07354 100644
extern struct x86_init_ops x86_init;
extern struct x86_cpuinit_ops x86_cpuinit;
+diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
+index c34f96c..e26f052 100644
+--- a/arch/x86/include/asm/xen/page.h
++++ b/arch/x86/include/asm/xen/page.h
+@@ -54,7 +54,7 @@ extern int m2p_remove_override(struct page *page, bool clear_pte);
+ extern struct page *m2p_find_override(unsigned long mfn);
+ extern unsigned long m2p_find_override_pfn(unsigned long mfn, unsigned long pfn);
+
+-static inline unsigned long pfn_to_mfn(unsigned long pfn)
++static inline unsigned long __intentional_overflow(-1) pfn_to_mfn(unsigned long pfn)
+ {
+ unsigned long mfn;
+
diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h
index c6ce245..aab6adb 100644
--- a/arch/x86/include/asm/xsave.h
@@ -19139,7 +19158,7 @@ index 6274f5f..9337430 100644
/*
* End of kprobes section
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
-index c9a281f..7316164 100644
+index c9a281f..3645760 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -126,7 +126,7 @@ static void *mod_code_ip; /* holds the IP to write to */
@@ -19160,19 +19179,16 @@ index c9a281f..7316164 100644
return r;
}
-@@ -177,8 +177,10 @@ void ftrace_nmi_enter(void)
-
+@@ -178,7 +178,7 @@ void ftrace_nmi_enter(void)
if (atomic_inc_return(&nmi_running) & MOD_CODE_WRITE_FLAG) {
smp_rmb();
-+ pax_open_kernel();
ftrace_mod_code();
- atomic_inc(&nmi_update_count);
-+ pax_close_kernel();
+ atomic_inc_unchecked(&nmi_update_count);
}
/* Must have previous changes seen before executions */
smp_mb();
-@@ -271,6 +273,8 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code,
+@@ -271,6 +271,8 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code,
{
unsigned char replaced[MCOUNT_INSN_SIZE];
@@ -19181,7 +19197,7 @@ index c9a281f..7316164 100644
/*
* Note: Due to modules and __init, code can
* disappear and change, we need to protect against faulting
-@@ -327,7 +331,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
+@@ -327,7 +329,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
unsigned char old[MCOUNT_INSN_SIZE], *new;
int ret;
@@ -19190,7 +19206,7 @@ index c9a281f..7316164 100644
new = ftrace_call_replace(ip, (unsigned long)func);
ret = ftrace_modify_code(ip, old, new);
-@@ -353,6 +357,8 @@ static int ftrace_mod_jmp(unsigned long ip,
+@@ -353,6 +355,8 @@ static int ftrace_mod_jmp(unsigned long ip,
{
unsigned char code[MCOUNT_INSN_SIZE];
@@ -20292,19 +20308,6 @@ index 69bca46..0bac999 100644
return;
WARN_ONCE(regs->sp >= curbase &&
-diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c
-index 90fcf62..738e356 100644
---- a/arch/x86/kernel/kdebugfs.c
-+++ b/arch/x86/kernel/kdebugfs.c
-@@ -27,7 +27,7 @@ struct setup_data_node {
- u32 len;
- };
-
--static ssize_t setup_data_read(struct file *file, char __user *user_buf,
-+static ssize_t __size_overflow(3) setup_data_read(struct file *file, char __user *user_buf,
- size_t count, loff_t *ppos)
- {
- struct setup_data_node *node = file->private_data;
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c
index 2f45c4c..3f51a0c 100644
--- a/arch/x86/kernel/kgdb.c
@@ -20769,10 +20772,10 @@ index 3ca42d0..7cff8cc 100644
static void microcode_fini_cpu(int cpu)
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
-index 925179f..6794bbb 100644
+index 925179f..b151b74 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
-@@ -36,15 +36,63 @@
+@@ -36,15 +36,62 @@
#define DEBUGP(fmt...)
#endif
@@ -20827,7 +20830,6 @@ index 925179f..6794bbb 100644
+}
+EXPORT_SYMBOL(module_free_exec);
+
-+void *module_alloc_exec(unsigned long size) __size_overflow(1);
+void *module_alloc_exec(unsigned long size)
+{
+ return __module_alloc(size, PAGE_KERNEL_RX);
@@ -20839,7 +20841,7 @@ index 925179f..6794bbb 100644
#ifdef CONFIG_X86_32
int apply_relocate(Elf32_Shdr *sechdrs,
const char *strtab,
-@@ -55,14 +103,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -55,14 +102,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
unsigned int i;
Elf32_Rel *rel = (void *)sechdrs[relsec].sh_addr;
Elf32_Sym *sym;
@@ -20859,7 +20861,7 @@ index 925179f..6794bbb 100644
/* This is the symbol it is referring to. Note that all
undefined symbols have been resolved. */
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
-@@ -71,11 +121,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -71,11 +120,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
switch (ELF32_R_TYPE(rel[i].r_info)) {
case R_386_32:
/* We add the value into the location given */
@@ -20877,7 +20879,7 @@ index 925179f..6794bbb 100644
break;
default:
printk(KERN_ERR "module %s: Unknown relocation: %u\n",
-@@ -120,21 +174,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
+@@ -120,21 +173,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
case R_X86_64_NONE:
break;
case R_X86_64_64:
@@ -25902,7 +25904,7 @@ index a63efd6..ccecad8 100644
ret
CFI_ENDPROC
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c
-index e218d5d..f655ced 100644
+index e218d5d..3966c85 100644
--- a/arch/x86/lib/usercopy_32.c
+++ b/arch/x86/lib/usercopy_32.c
@@ -43,7 +43,7 @@ do { \
@@ -26005,7 +26007,7 @@ index e218d5d..f655ced 100644
" addl $-64, %0\n"
" addl $64, %4\n"
" addl $64, %3\n"
-@@ -278,10 +282,12 @@ __copy_user_intel(void __user *to, const void *from, unsigned long size)
+@@ -278,10 +282,119 @@ __copy_user_intel(void __user *to, const void *from, unsigned long size)
" shrl $2, %0\n"
" andl $3, %%eax\n"
" cld\n"
@@ -26015,13 +26017,58 @@ index e218d5d..f655ced 100644
"37: rep; movsb\n"
"100:\n"
+ __COPYUSER_RESTORE_ES
- ".section .fixup,\"ax\"\n"
- "101: lea 0(%%eax,%0,4),%0\n"
- " jmp 100b\n"
-@@ -334,46 +340,153 @@ __copy_user_intel(void __user *to, const void *from, unsigned long size)
- }
-
- static unsigned long
++ ".section .fixup,\"ax\"\n"
++ "101: lea 0(%%eax,%0,4),%0\n"
++ " jmp 100b\n"
++ ".previous\n"
++ ".section __ex_table,\"a\"\n"
++ " .align 4\n"
++ " .long 1b,100b\n"
++ " .long 2b,100b\n"
++ " .long 3b,100b\n"
++ " .long 4b,100b\n"
++ " .long 5b,100b\n"
++ " .long 6b,100b\n"
++ " .long 7b,100b\n"
++ " .long 8b,100b\n"
++ " .long 9b,100b\n"
++ " .long 10b,100b\n"
++ " .long 11b,100b\n"
++ " .long 12b,100b\n"
++ " .long 13b,100b\n"
++ " .long 14b,100b\n"
++ " .long 15b,100b\n"
++ " .long 16b,100b\n"
++ " .long 17b,100b\n"
++ " .long 18b,100b\n"
++ " .long 19b,100b\n"
++ " .long 20b,100b\n"
++ " .long 21b,100b\n"
++ " .long 22b,100b\n"
++ " .long 23b,100b\n"
++ " .long 24b,100b\n"
++ " .long 25b,100b\n"
++ " .long 26b,100b\n"
++ " .long 27b,100b\n"
++ " .long 28b,100b\n"
++ " .long 29b,100b\n"
++ " .long 30b,100b\n"
++ " .long 31b,100b\n"
++ " .long 32b,100b\n"
++ " .long 33b,100b\n"
++ " .long 34b,100b\n"
++ " .long 35b,100b\n"
++ " .long 36b,100b\n"
++ " .long 37b,100b\n"
++ " .long 99b,101b\n"
++ ".previous"
++ : "=&c"(size), "=&D" (d0), "=&S" (d1)
++ : "1"(to), "2"(from), "0"(size)
++ : "eax", "edx", "memory");
++ return size;
++}
++
++static unsigned long
+__generic_copy_from_user_intel(void *to, const void __user *from, unsigned long size)
+{
+ int d0, d1;
@@ -26077,60 +26124,10 @@ index e218d5d..f655ced 100644
+ "36: movl %%eax, %0\n"
+ "37: rep; "__copyuser_seg" movsb\n"
+ "100:\n"
-+ ".section .fixup,\"ax\"\n"
-+ "101: lea 0(%%eax,%0,4),%0\n"
-+ " jmp 100b\n"
-+ ".previous\n"
-+ ".section __ex_table,\"a\"\n"
-+ " .align 4\n"
-+ " .long 1b,100b\n"
-+ " .long 2b,100b\n"
-+ " .long 3b,100b\n"
-+ " .long 4b,100b\n"
-+ " .long 5b,100b\n"
-+ " .long 6b,100b\n"
-+ " .long 7b,100b\n"
-+ " .long 8b,100b\n"
-+ " .long 9b,100b\n"
-+ " .long 10b,100b\n"
-+ " .long 11b,100b\n"
-+ " .long 12b,100b\n"
-+ " .long 13b,100b\n"
-+ " .long 14b,100b\n"
-+ " .long 15b,100b\n"
-+ " .long 16b,100b\n"
-+ " .long 17b,100b\n"
-+ " .long 18b,100b\n"
-+ " .long 19b,100b\n"
-+ " .long 20b,100b\n"
-+ " .long 21b,100b\n"
-+ " .long 22b,100b\n"
-+ " .long 23b,100b\n"
-+ " .long 24b,100b\n"
-+ " .long 25b,100b\n"
-+ " .long 26b,100b\n"
-+ " .long 27b,100b\n"
-+ " .long 28b,100b\n"
-+ " .long 29b,100b\n"
-+ " .long 30b,100b\n"
-+ " .long 31b,100b\n"
-+ " .long 32b,100b\n"
-+ " .long 33b,100b\n"
-+ " .long 34b,100b\n"
-+ " .long 35b,100b\n"
-+ " .long 36b,100b\n"
-+ " .long 37b,100b\n"
-+ " .long 99b,101b\n"
-+ ".previous"
-+ : "=&c"(size), "=&D" (d0), "=&S" (d1)
-+ : "1"(to), "2"(from), "0"(size)
-+ : "eax", "edx", "memory");
-+ return size;
-+}
-+
-+static unsigned long __size_overflow(3)
- __copy_user_zeroing_intel(void *to, const void __user *from, unsigned long size)
- {
+ ".section .fixup,\"ax\"\n"
+ "101: lea 0(%%eax,%0,4),%0\n"
+ " jmp 100b\n"
+@@ -339,41 +452,41 @@ __copy_user_zeroing_intel(void *to, const void __user *from, unsigned long size)
int d0, d1;
__asm__ __volatile__(
" .align 2,0x90\n"
@@ -26202,15 +26199,7 @@ index e218d5d..f655ced 100644
"8:\n"
".section .fixup,\"ax\"\n"
"9: lea 0(%%eax,%0,4),%0\n"
-@@ -433,48 +546,48 @@ __copy_user_zeroing_intel(void *to, const void __user *from, unsigned long size)
- * hyoshiok@miraclelinux.com
- */
-
--static unsigned long __copy_user_zeroing_intel_nocache(void *to,
-+static unsigned long __size_overflow(3) __copy_user_zeroing_intel_nocache(void *to,
- const void __user *from, unsigned long size)
- {
- int d0, d1;
+@@ -440,41 +553,41 @@ static unsigned long __copy_user_zeroing_intel_nocache(void *to,
__asm__ __volatile__(
" .align 2,0x90\n"
@@ -26282,15 +26271,7 @@ index e218d5d..f655ced 100644
"8:\n"
".section .fixup,\"ax\"\n"
"9: lea 0(%%eax,%0,4),%0\n"
-@@ -530,48 +643,48 @@ static unsigned long __copy_user_zeroing_intel_nocache(void *to,
- return size;
- }
-
--static unsigned long __copy_user_intel_nocache(void *to,
-+static unsigned long __size_overflow(3) __copy_user_intel_nocache(void *to,
- const void __user *from, unsigned long size)
- {
- int d0, d1;
+@@ -537,41 +650,41 @@ static unsigned long __copy_user_intel_nocache(void *to,
__asm__ __volatile__(
" .align 2,0x90\n"
@@ -30756,9 +30737,18 @@ index 5189fe8..d937469 100644
};
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index fe00be69..d2c142a 100644
+index fe00be69..c51170f 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
+@@ -365,7 +365,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
+ return val;
+ }
+
+-static pteval_t pte_pfn_to_mfn(pteval_t val)
++static pteval_t __intentional_overflow(-1) pte_pfn_to_mfn(pteval_t val)
+ {
+ if (val & _PAGE_PRESENT) {
+ unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
@@ -1757,6 +1757,9 @@ pgd_t * __init xen_setup_kernel_pagetable(pgd_t *pgd,
convert_pfn_mfn(init_level4_pgt);
convert_pfn_mfn(level3_ident_pgt);
@@ -31109,9 +31099,18 @@ index 8bd4ef2..078f68b9 100644
EXPORT_SYMBOL(blk_unregister_region);
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
-index 9e76a32..48d7145 100644
+index 9e76a32..a220c64 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
+@@ -66,7 +66,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p)
+ return put_user(0, p);
+ }
+
+-static int sg_get_timeout(struct request_queue *q)
++static int __intentional_overflow(-1) sg_get_timeout(struct request_queue *q)
+ {
+ return jiffies_to_clock_t(q->sg_timeout);
+ }
@@ -223,8 +223,20 @@ EXPORT_SYMBOL(blk_verify_command);
static int blk_fill_sghdr_rq(struct request_queue *q, struct request *rq,
struct sg_io_hdr *hdr, fmode_t mode)
@@ -37055,6 +37054,19 @@ index 378fcb5..5e91fa8 100644
/* Wrapper access functions for multiplexed SMBus */
static DEFINE_MUTEX(amd756_lock);
+diff --git a/drivers/i2c/busses/i2c-diolan-u2c.c b/drivers/i2c/busses/i2c-diolan-u2c.c
+index 7636671..53a2cab 100644
+--- a/drivers/i2c/busses/i2c-diolan-u2c.c
++++ b/drivers/i2c/busses/i2c-diolan-u2c.c
+@@ -99,7 +99,7 @@ MODULE_PARM_DESC(frequency, "I2C clock frequency in hertz");
+ /* usb layer */
+
+ /* Send command to device, and get response. */
+-static int diolan_usb_transfer(struct i2c_diolan_u2c *dev)
++static int __intentional_overflow(-1) diolan_usb_transfer(struct i2c_diolan_u2c *dev)
+ {
+ int ret = 0;
+ int actual;
diff --git a/drivers/i2c/busses/i2c-nforce2-s4985.c b/drivers/i2c/busses/i2c-nforce2-s4985.c
index 29015eb..af2d8e9 100644
--- a/drivers/i2c/busses/i2c-nforce2-s4985.c
@@ -37938,7 +37950,7 @@ index 1f95bba..9530f87 100644
sdata, wqe->wr.wr.atomic.swap);
goto send_comp;
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
-index 9d3e5c1..d9afe4a 100644
+index 9d3e5c1..6f166df 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -772,7 +772,7 @@ static void mthca_setup_cmd_doorbells(struct mthca_dev *dev, u64 base)
@@ -37950,10 +37962,59 @@ index 9d3e5c1..d9afe4a 100644
{
struct mthca_mailbox *mailbox;
u32 *outbox;
+@@ -1612,7 +1612,7 @@ int mthca_HW2SW_MPT(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
+ CMD_TIME_CLASS_B);
+ }
+
+-int mthca_WRITE_MTT(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
++int __intentional_overflow(-1) mthca_WRITE_MTT(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
+ int num_mtt)
+ {
+ return mthca_cmd(dev, mailbox->dma, num_mtt, 0, CMD_WRITE_MTT,
+@@ -1634,7 +1634,7 @@ int mthca_MAP_EQ(struct mthca_dev *dev, u64 event_mask, int unmap,
+ 0, CMD_MAP_EQ, CMD_TIME_CLASS_B);
+ }
+
+-int mthca_SW2HW_EQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
++int __intentional_overflow(-1) mthca_SW2HW_EQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
+ int eq_num)
+ {
+ return mthca_cmd(dev, mailbox->dma, eq_num, 0, CMD_SW2HW_EQ,
+@@ -1857,7 +1857,7 @@ int mthca_CONF_SPECIAL_QP(struct mthca_dev *dev, int type, u32 qpn)
+ CMD_TIME_CLASS_B);
+ }
+
+-int mthca_MAD_IFC(struct mthca_dev *dev, int ignore_mkey, int ignore_bkey,
++int __intentional_overflow(-1) mthca_MAD_IFC(struct mthca_dev *dev, int ignore_mkey, int ignore_bkey,
+ int port, struct ib_wc *in_wc, struct ib_grh *in_grh,
+ void *in_mad, void *response_mad)
+ {
+diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
+index aa12a53..c145bc2 100644
+--- a/drivers/infiniband/hw/mthca/mthca_main.c
++++ b/drivers/infiniband/hw/mthca/mthca_main.c
+@@ -692,7 +692,7 @@ err_close:
+ return err;
+ }
+
+-static int mthca_setup_hca(struct mthca_dev *dev)
++static int __intentional_overflow(-1) mthca_setup_hca(struct mthca_dev *dev)
+ {
+ int err;
+
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
-index ed9a989..e0c5871 100644
+index ed9a989..6aa5dc2 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
+@@ -81,7 +81,7 @@ struct mthca_mpt_entry {
+ * through the bitmaps)
+ */
+
+-static u32 mthca_buddy_alloc(struct mthca_buddy *buddy, int order)
++static u32 __intentional_overflow(-1) mthca_buddy_alloc(struct mthca_buddy *buddy, int order)
+ {
+ int o;
+ int m;
@@ -426,7 +426,7 @@ static inline u32 adjust_key(struct mthca_dev *dev, u32 key)
return key;
}
@@ -37963,6 +38024,28 @@ index ed9a989..e0c5871 100644
u64 iova, u64 total_size, u32 access, struct mthca_mr *mr)
{
struct mthca_mailbox *mailbox;
+@@ -516,7 +516,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd,
+ return mthca_mr_alloc(dev, pd, 12, 0, ~0ULL, access, mr);
+ }
+
+-int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd,
++int __intentional_overflow(-1) mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd,
+ u64 *buffer_list, int buffer_size_shift,
+ int list_len, u64 iova, u64 total_size,
+ u32 access, struct mthca_mr *mr)
+diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
+index 5b71d43..35a9e14 100644
+--- a/drivers/infiniband/hw/mthca/mthca_provider.c
++++ b/drivers/infiniband/hw/mthca/mthca_provider.c
+@@ -763,7 +763,7 @@ unlock:
+ return 0;
+ }
+
+-static int mthca_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
++static int __intentional_overflow(-1) mthca_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
+ {
+ struct mthca_dev *dev = to_mdev(ibcq->device);
+ struct mthca_cq *cq = to_mcq(ibcq);
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index 5965b3d..16817fb 100644
--- a/drivers/infiniband/hw/nes/nes.c
@@ -38840,6 +38923,19 @@ index 509135f..c8645eb 100644
card->s0num[1][0] = '\0';
card->s0num[2][0] = '\0';
break;
+diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
+index 4d395de..c504763 100644
+--- a/drivers/isdn/mISDN/dsp_cmx.c
++++ b/drivers/isdn/mISDN/dsp_cmx.c
+@@ -1623,7 +1623,7 @@ u32 dsp_spl_jiffies; /* calculate the next time to fire */
+ static u16 dsp_count; /* last sample count */
+ static int dsp_count_valid ; /* if we have last sample count */
+
+-void
++void __intentional_overflow(-1)
+ dsp_cmx_send(void *arg)
+ {
+ struct dsp_conf *conf;
diff --git a/drivers/leds/leds-clevo-mail.c b/drivers/leds/leds-clevo-mail.c
index a498135..6a39f48 100644
--- a/drivers/leds/leds-clevo-mail.c
@@ -39810,32 +39906,6 @@ index d345215..b607565 100644
spin_lock_init(&vout->vbq_lock);
videobuf_queue_dma_contig_init(q, &video_vbq_ops, q->dev,
-diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c
-index 2fd38a0..ddec3c4 100644
---- a/drivers/media/video/saa7164/saa7164-encoder.c
-+++ b/drivers/media/video/saa7164/saa7164-encoder.c
-@@ -1136,6 +1136,8 @@ struct saa7164_user_buffer *saa7164_enc_next_buf(struct saa7164_port *port)
- }
-
- static ssize_t fops_read(struct file *file, char __user *buffer,
-+ size_t count, loff_t *pos) __size_overflow(3);
-+static ssize_t fops_read(struct file *file, char __user *buffer,
- size_t count, loff_t *pos)
- {
- struct saa7164_encoder_fh *fh = file->private_data;
-diff --git a/drivers/media/video/saa7164/saa7164-vbi.c b/drivers/media/video/saa7164/saa7164-vbi.c
-index e2e0341..b80056c 100644
---- a/drivers/media/video/saa7164/saa7164-vbi.c
-+++ b/drivers/media/video/saa7164/saa7164-vbi.c
-@@ -1081,6 +1081,8 @@ struct saa7164_user_buffer *saa7164_vbi_next_buf(struct saa7164_port *port)
- }
-
- static ssize_t fops_read(struct file *file, char __user *buffer,
-+ size_t count, loff_t *pos) __size_overflow(3);
-+static ssize_t fops_read(struct file *file, char __user *buffer,
- size_t count, loff_t *pos)
- {
- struct saa7164_vbi_fh *fh = file->private_data;
diff --git a/drivers/media/video/timblogiw.c b/drivers/media/video/timblogiw.c
index a0895bf..b451f5b 100644
--- a/drivers/media/video/timblogiw.c
@@ -46089,7 +46159,7 @@ index a5ea85f..6530989 100644
/* reallocate for each attempt, since references
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
-index ab11ca3c..e9bb990 100644
+index ab11ca3c..2df783d 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -129,7 +129,7 @@ static int usb_internal_control_msg(struct usb_device *usb_dev,
@@ -46101,6 +46171,24 @@ index ab11ca3c..e9bb990 100644
__u8 requesttype, __u16 value, __u16 index, void *data,
__u16 size, int timeout)
{
+@@ -182,7 +182,7 @@ EXPORT_SYMBOL_GPL(usb_control_msg);
+ * complete. Since you don't have a handle on the URB used, you can't cancel
+ * the request.
+ */
+-int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
++int __intentional_overflow(-1) usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
+ void *data, int len, int *actual_length, int timeout)
+ {
+ return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout);
+@@ -220,7 +220,7 @@ EXPORT_SYMBOL_GPL(usb_interrupt_msg);
+ * interrupt endpoints. We will take the liberty of creating an interrupt URB
+ * (with the default interval) if the target is an interrupt endpoint.
+ */
+-int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
++int __intentional_overflow(-1) usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
+ void *data, int len, int *actual_length, int timeout)
+ {
+ struct urb *urb;
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index 662c0cf..6880fbb 100644
--- a/drivers/usb/core/sysfs.c
@@ -52525,7 +52613,7 @@ index 451b9b8..12e5a03 100644
out_free_fd:
diff --git a/fs/exec.c b/fs/exec.c
-index a2d0e51..0d1143c 100644
+index a2d0e51..8ece03f 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -55,12 +55,35 @@
@@ -53129,7 +53217,7 @@ index a2d0e51..0d1143c 100644
cn->corename = kmalloc(cn->size, GFP_KERNEL);
cn->used = 0;
-@@ -1833,6 +2016,284 @@ out:
+@@ -1833,6 +2016,292 @@ out:
return ispipe;
}
@@ -53350,8 +53438,16 @@ index a2d0e51..0d1143c 100644
+#endif
+
+#else
-+ unsigned long textlow = _stext;
-+ unsigned long texthigh = _etext;
++ unsigned long textlow = (unsigned long)_stext;
++ unsigned long texthigh = (unsigned long)_etext;
++
++#ifdef CONFIG_X86_64
++ /* check against linear mapping as well */
++ if (high > (unsigned long)__va(__pa(textlow)) &&
++ low <= (unsigned long)__va(__pa(texthigh)))
++ return true;
++#endif
++
+#endif
+
+ if (high <= textlow || low > texthigh)
@@ -53414,7 +53510,7 @@ index a2d0e51..0d1143c 100644
static int zap_process(struct task_struct *start, int exit_code)
{
struct task_struct *t;
-@@ -2006,17 +2467,17 @@ static void coredump_finish(struct mm_struct *mm)
+@@ -2006,17 +2475,17 @@ static void coredump_finish(struct mm_struct *mm)
void set_dumpable(struct mm_struct *mm, int value)
{
switch (value) {
@@ -53435,7 +53531,7 @@ index a2d0e51..0d1143c 100644
set_bit(MMF_DUMP_SECURELY, &mm->flags);
smp_wmb();
set_bit(MMF_DUMPABLE, &mm->flags);
-@@ -2029,7 +2490,7 @@ static int __get_dumpable(unsigned long mm_flags)
+@@ -2029,7 +2498,7 @@ static int __get_dumpable(unsigned long mm_flags)
int ret;
ret = mm_flags & MMF_DUMPABLE_MASK;
@@ -53444,7 +53540,7 @@ index a2d0e51..0d1143c 100644
}
int get_dumpable(struct mm_struct *mm)
-@@ -2044,17 +2505,17 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -2044,17 +2513,17 @@ static void wait_for_dump_helpers(struct file *file)
pipe = file->f_path.dentry->d_inode->i_pipe;
pipe_lock(pipe);
@@ -53467,7 +53563,7 @@ index a2d0e51..0d1143c 100644
pipe_unlock(pipe);
}
-@@ -2115,7 +2576,8 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
+@@ -2115,7 +2584,8 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
int retval = 0;
int flag = 0;
int ispipe;
@@ -53477,7 +53573,7 @@ index a2d0e51..0d1143c 100644
struct coredump_params cprm = {
.signr = signr,
.regs = regs,
-@@ -2130,6 +2592,9 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
+@@ -2130,6 +2600,9 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
audit_core_dumps(signr);
@@ -53487,7 +53583,7 @@ index a2d0e51..0d1143c 100644
binfmt = mm->binfmt;
if (!binfmt || !binfmt->core_dump)
goto fail;
-@@ -2140,14 +2605,16 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
+@@ -2140,14 +2613,16 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
if (!cred)
goto fail;
/*
@@ -53508,7 +53604,7 @@ index a2d0e51..0d1143c 100644
}
retval = coredump_wait(exit_code, &core_state);
-@@ -2197,7 +2664,7 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
+@@ -2197,7 +2672,7 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
}
cprm.limit = RLIM_INFINITY;
@@ -53517,7 +53613,7 @@ index a2d0e51..0d1143c 100644
if (core_pipe_limit && (core_pipe_limit < dump_count)) {
printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n",
task_tgid_vnr(current), current->comm);
-@@ -2224,9 +2691,19 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
+@@ -2224,9 +2699,19 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
} else {
struct inode *inode;
@@ -53537,7 +53633,7 @@ index a2d0e51..0d1143c 100644
cprm.file = filp_open(cn.corename,
O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag,
0600);
-@@ -2267,7 +2744,7 @@ close_fail:
+@@ -2267,7 +2752,7 @@ close_fail:
filp_close(cprm.file, NULL);
fail_dropcount:
if (ispipe)
@@ -53546,7 +53642,7 @@ index a2d0e51..0d1143c 100644
fail_unlock:
kfree(cn.corename);
fail_corename:
-@@ -2286,7 +2763,7 @@ fail:
+@@ -2286,7 +2771,7 @@ fail:
*/
int dump_write(struct file *file, const void *addr, int nr)
{
@@ -53592,6 +53688,31 @@ index bd8ac16..43811b9 100644
static int __init init_ext2_fs(void)
{
+diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
+index d27b71f..071b0e1 100644
+--- a/fs/ext2/xattr.c
++++ b/fs/ext2/xattr.c
+@@ -248,7 +248,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
+ struct buffer_head *bh = NULL;
+ struct ext2_xattr_entry *entry;
+ char *end;
+- size_t rest = buffer_size;
++ size_t rest = buffer_size, total_size = 0;
+ int error;
+
+ ea_idebug(inode, "buffer=%p, buffer_size=%ld",
+@@ -306,9 +306,10 @@ bad_block: ext2_error(inode->i_sb, "ext2_xattr_list",
+ buffer += size;
+ }
+ rest -= size;
++ total_size += size;
+ }
+ }
+- error = buffer_size - rest; /* total size */
++ error = total_size;
+
+ cleanup:
+ brelse(bh);
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
index a203892..4e64db5 100644
--- a/fs/ext3/balloc.c
@@ -53621,6 +53742,31 @@ index b7f314f..ef3b16c 100644
static int __init init_ext3_fs(void)
{
+diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c
+index d565759..a1315f2 100644
+--- a/fs/ext3/xattr.c
++++ b/fs/ext3/xattr.c
+@@ -335,7 +335,7 @@ static int
+ ext3_xattr_list_entries(struct dentry *dentry, struct ext3_xattr_entry *entry,
+ char *buffer, size_t buffer_size)
+ {
+- size_t rest = buffer_size;
++ size_t rest = buffer_size, total_size = 0;
+
+ for (; !IS_LAST_ENTRY(entry); entry = EXT3_XATTR_NEXT(entry)) {
+ const struct xattr_handler *handler =
+@@ -352,9 +352,10 @@ ext3_xattr_list_entries(struct dentry *dentry, struct ext3_xattr_entry *entry,
+ buffer += size;
+ }
+ rest -= size;
++ total_size += size;
+ }
+ }
+- return buffer_size - rest;
++ return total_size;
+ }
+
+ static int
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
index 2845a1f..f29de63 100644
--- a/fs/ext4/balloc.c
@@ -53873,10 +54019,31 @@ index 84f84bf..a8770cd 100644
static int __init ext4_init_feat_adverts(void)
{
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
-index d5498b2..b4e9f3f 100644
+index d5498b2..14a9eca 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
-@@ -1269,6 +1269,8 @@ retry:
+@@ -328,7 +328,7 @@ static int
+ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
+ char *buffer, size_t buffer_size)
+ {
+- size_t rest = buffer_size;
++ size_t rest = buffer_size, total_size = 0;
+
+ for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
+ const struct xattr_handler *handler =
+@@ -345,9 +345,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
+ buffer += size;
+ }
+ rest -= size;
++ total_size += size;
+ }
+ }
+- return buffer_size - rest;
++ return total_size;
+ }
+
+ static int
+@@ -1269,6 +1270,8 @@ retry:
s_min_extra_isize) {
tried_min_extra_isize++;
new_extra_isize = s_min_extra_isize;
@@ -59308,7 +59475,7 @@ index d33418f..2a5345e 100644
return -EINVAL;
diff --git a/fs/seq_file.c b/fs/seq_file.c
-index dba43c3..7511af2 100644
+index dba43c3..4e25536 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -9,6 +9,7 @@
@@ -59353,6 +59520,15 @@ index dba43c3..7511af2 100644
return !m->buf ? -ENOMEM : -EAGAIN;
}
+@@ -132,7 +144,7 @@ Eoverflow:
+ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
+ {
+ struct seq_file *m = file->private_data;
+- size_t copied = 0;
++ ssize_t copied = 0;
+ loff_t pos;
+ size_t n;
+ void *p;
@@ -169,7 +181,11 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
m->version = file->f_version;
/* grab buffer if we didn't have one */
@@ -59851,7 +60027,7 @@ index 3915ade..00fcbf4 100644
static int __init init_ufs_fs(void)
{
diff --git a/fs/ufs/swab.h b/fs/ufs/swab.h
-index 8d974c4..b82f6ec 100644
+index 8d974c4..4c19a7b 100644
--- a/fs/ufs/swab.h
+++ b/fs/ufs/swab.h
@@ -22,7 +22,7 @@ enum {
@@ -59872,6 +60048,15 @@ index 8d974c4..b82f6ec 100644
fs32_to_cpu(struct super_block *sbp, __fs32 n)
{
if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
+@@ -76,7 +76,7 @@ fs32_sub(struct super_block *sbp, __fs32 *n, int d)
+ be32_add_cpu((__be32 *)n, -d);
+ }
+
+-static inline u16
++static inline u16 __intentional_overflow(-1)
+ fs16_to_cpu(struct super_block *sbp, __fs16 n)
+ {
+ if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
diff --git a/fs/utimes.c b/fs/utimes.c
index ba653f3..06ea4b1 100644
--- a/fs/utimes.c
@@ -60093,7 +60278,7 @@ index 8a89949..6776861 100644
xfs_init_zones(void)
diff --git a/grsecurity/Kconfig b/grsecurity/Kconfig
new file mode 100644
-index 0000000..138a59d
+index 0000000..7e54fd7
--- /dev/null
+++ b/grsecurity/Kconfig
@@ -0,0 +1,1080 @@
@@ -60688,7 +60873,7 @@ index 0000000..138a59d
+config GRKERNSEC_CHROOT_INITRD
+ bool "Exempt initrd tasks from restrictions"
+ default y if GRKERNSEC_CONFIG_AUTO
-+ depends on GRKERNSEC_CHROOT && BLK_DEV_RAM
++ depends on GRKERNSEC_CHROOT && BLK_DEV_INITRD
+ help
+ If you say Y here, tasks started prior to init will be exempted from
+ grsecurity's chroot restrictions. This option is mainly meant to
@@ -61179,7 +61364,7 @@ index 0000000..138a59d
+endmenu
diff --git a/grsecurity/Makefile b/grsecurity/Makefile
new file mode 100644
-index 0000000..b0b77d5
+index 0000000..2f8793f
--- /dev/null
+++ b/grsecurity/Makefile
@@ -0,0 +1,43 @@
@@ -61200,7 +61385,7 @@ index 0000000..b0b77d5
+
+obj-$(CONFIG_GRKERNSEC) += grsec_init.o grsum.o gracl.o gracl_segv.o \
+ gracl_cap.o gracl_alloc.o gracl_shm.o grsec_mem.o gracl_fs.o \
-+ gracl_learn.o grsec_log.o
++ gracl_learn.o grsec_log.o gracl_policy.o
+ifdef CONFIG_COMPAT
+obj-$(CONFIG_GRKERNSEC) += gracl_compat.o
+endif
@@ -61228,10 +61413,10 @@ index 0000000..b0b77d5
+endif
diff --git a/grsecurity/gracl.c b/grsecurity/gracl.c
new file mode 100644
-index 0000000..35b85f2
+index 0000000..02c6217
--- /dev/null
+++ b/grsecurity/gracl.c
-@@ -0,0 +1,4323 @@
+@@ -0,0 +1,2769 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -61270,51 +61455,31 @@ index 0000000..35b85f2
+#include <asm/errno.h>
+#include <asm/mman.h>
+
-+static struct acl_role_db acl_role_set;
-+static struct name_db name_set;
-+static struct inodev_db inodev_set;
-+
-+/* for keeping track of userspace pointers used for subjects, so we
-+ can share references in the kernel as well
-+*/
-+
-+static struct path real_root;
-+
-+static struct acl_subj_map_db subj_map_set;
++#define FOR_EACH_ROLE_START(role) \
++ role = running_polstate.role_list; \
++ while (role) {
+
-+static struct acl_role_label *default_role;
++#define FOR_EACH_ROLE_END(role) \
++ role = role->prev; \
++ }
+
-+static struct acl_role_label *role_list;
++extern struct path gr_real_root;
+
-+static u16 acl_sp_role_value;
++static struct gr_policy_state running_polstate;
++struct gr_policy_state *polstate = &running_polstate;
++extern struct gr_alloc_state *current_alloc_state;
+
+extern char *gr_shared_page[4];
+static DEFINE_MUTEX(gr_dev_mutex);
+DEFINE_RWLOCK(gr_inode_lock);
+
-+struct gr_arg *gr_usermode;
-+
+static unsigned int gr_status __read_only = GR_STATUS_INIT;
+
-+extern int chkpw(struct gr_arg *entry, unsigned char *salt, unsigned char *sum);
-+extern void gr_clear_learn_entries(void);
-+
+#ifdef CONFIG_GRKERNSEC_RESLOG
+extern void gr_log_resource(const struct task_struct *task,
+ const int res, const unsigned long wanted, const int gt);
+#endif
+
-+unsigned char *gr_system_salt;
-+unsigned char *gr_system_sum;
-+
-+static struct sprole_pw **acl_special_roles = NULL;
-+static __u16 num_sprole_pws = 0;
-+
-+static struct acl_role_label *kernel_role = NULL;
-+
-+static unsigned int gr_auth_attempts = 0;
-+static unsigned long gr_auth_expires = 0UL;
-+
+#ifdef CONFIG_NET
+extern struct vfsmount *sock_mnt;
+#endif
@@ -61325,160 +61490,33 @@ index 0000000..35b85f2
+extern struct vfsmount *hugetlbfs_vfsmount;
+#endif
+
-+static struct acl_object_label *fakefs_obj_rw;
-+static struct acl_object_label *fakefs_obj_rwx;
-+
-+extern int gr_init_uidset(void);
-+extern void gr_free_uidset(void);
-+extern void gr_remove_uid(uid_t uid);
-+extern int gr_find_uid(uid_t uid);
-+
+DECLARE_BRLOCK(vfsmount_lock);
+
-+static int copy_acl_object_label_normal(struct acl_object_label *obj, const struct acl_object_label *userp)
-+{
-+ if (copy_from_user(obj, userp, sizeof(struct acl_object_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
++extern u16 acl_sp_role_value;
++extern struct acl_object_label *fakefs_obj_rw;
++extern struct acl_object_label *fakefs_obj_rwx;
+
-+static int copy_acl_ip_label_normal(struct acl_ip_label *ip, const struct acl_ip_label *userp)
++int gr_acl_is_enabled(void)
+{
-+ if (copy_from_user(ip, userp, sizeof(struct acl_ip_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_acl_subject_label_normal(struct acl_subject_label *subj, const struct acl_subject_label *userp)
-+{
-+ if (copy_from_user(subj, userp, sizeof(struct acl_subject_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_acl_role_label_normal(struct acl_role_label *role, const struct acl_role_label *userp)
-+{
-+ if (copy_from_user(role, userp, sizeof(struct acl_role_label)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_role_allowed_ip_normal(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp)
-+{
-+ if (copy_from_user(roleip, userp, sizeof(struct role_allowed_ip)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_sprole_pw_normal(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp)
-+{
-+ if (copy_from_user(pw, userp + idx, sizeof(struct sprole_pw)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_gr_hash_struct_normal(struct gr_hash_struct *hash, const struct gr_hash_struct *userp)
-+{
-+ if (copy_from_user(hash, userp, sizeof(struct gr_hash_struct)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+static int copy_role_transition_normal(struct role_transition *trans, const struct role_transition *userp)
-+{
-+ if (copy_from_user(trans, userp, sizeof(struct role_transition)))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+int copy_pointer_from_array_normal(void *ptr, unsigned long idx, const void *userp)
-+{
-+ if (copy_from_user(ptr, userp + (idx * sizeof(void *)), sizeof(void *)))
-+ return -EFAULT;
-+
-+ return 0;
++ return (gr_status & GR_READY);
+}
+
-+static int copy_gr_arg_wrapper_normal(const char __user *buf, struct gr_arg_wrapper *uwrap)
++void gr_enable_rbac_system(void)
+{
-+ if (copy_from_user(uwrap, buf, sizeof (struct gr_arg_wrapper)))
-+ return -EFAULT;
-+
-+ if ((uwrap->version != GRSECURITY_VERSION) || (uwrap->size != sizeof(struct gr_arg)))
-+ return -EINVAL;
-+
-+ return 0;
++ pax_open_kernel();
++ gr_status |= GR_READY;
++ pax_close_kernel();
+}
+
-+static int copy_gr_arg_normal(const struct gr_arg __user *buf, struct gr_arg *arg)
++int gr_rbac_disable(void *unused)
+{
-+ if (copy_from_user(arg, buf, sizeof (struct gr_arg)))
-+ return -EFAULT;
++ pax_open_kernel();
++ gr_status &= ~GR_READY;
++ pax_close_kernel();
+
+ return 0;
+}
+
-+static size_t get_gr_arg_wrapper_size_normal(void)
-+{
-+ return sizeof(struct gr_arg_wrapper);
-+}
-+
-+#ifdef CONFIG_COMPAT
-+extern int copy_gr_arg_wrapper_compat(const char *buf, struct gr_arg_wrapper *uwrap);
-+extern int copy_gr_arg_compat(const struct gr_arg __user *buf, struct gr_arg *arg);
-+extern int copy_acl_object_label_compat(struct acl_object_label *obj, const struct acl_object_label *userp);
-+extern int copy_acl_subject_label_compat(struct acl_subject_label *subj, const struct acl_subject_label *userp);
-+extern int copy_acl_role_label_compat(struct acl_role_label *role, const struct acl_role_label *userp);
-+extern int copy_role_allowed_ip_compat(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp);
-+extern int copy_role_transition_compat(struct role_transition *trans, const struct role_transition *userp);
-+extern int copy_gr_hash_struct_compat(struct gr_hash_struct *hash, const struct gr_hash_struct *userp);
-+extern int copy_pointer_from_array_compat(void *ptr, unsigned long idx, const void *userp);
-+extern int copy_acl_ip_label_compat(struct acl_ip_label *ip, const struct acl_ip_label *userp);
-+extern int copy_sprole_pw_compat(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp);
-+extern size_t get_gr_arg_wrapper_size_compat(void);
-+
-+int (* copy_gr_arg_wrapper)(const char *buf, struct gr_arg_wrapper *uwrap) __read_only;
-+int (* copy_gr_arg)(const struct gr_arg *buf, struct gr_arg *arg) __read_only;
-+int (* copy_acl_object_label)(struct acl_object_label *obj, const struct acl_object_label *userp) __read_only;
-+int (* copy_acl_subject_label)(struct acl_subject_label *subj, const struct acl_subject_label *userp) __read_only;
-+int (* copy_acl_role_label)(struct acl_role_label *role, const struct acl_role_label *userp) __read_only;
-+int (* copy_acl_ip_label)(struct acl_ip_label *ip, const struct acl_ip_label *userp) __read_only;
-+int (* copy_pointer_from_array)(void *ptr, unsigned long idx, const void *userp) __read_only;
-+int (* copy_sprole_pw)(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp) __read_only;
-+int (* copy_gr_hash_struct)(struct gr_hash_struct *hash, const struct gr_hash_struct *userp) __read_only;
-+int (* copy_role_transition)(struct role_transition *trans, const struct role_transition *userp) __read_only;
-+int (* copy_role_allowed_ip)(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp) __read_only;
-+size_t (* get_gr_arg_wrapper_size)(void) __read_only;
-+
-+#else
-+#define copy_gr_arg_wrapper copy_gr_arg_wrapper_normal
-+#define copy_gr_arg copy_gr_arg_normal
-+#define copy_gr_hash_struct copy_gr_hash_struct_normal
-+#define copy_acl_object_label copy_acl_object_label_normal
-+#define copy_acl_subject_label copy_acl_subject_label_normal
-+#define copy_acl_role_label copy_acl_role_label_normal
-+#define copy_acl_ip_label copy_acl_ip_label_normal
-+#define copy_pointer_from_array copy_pointer_from_array_normal
-+#define copy_sprole_pw copy_sprole_pw_normal
-+#define copy_role_transition copy_role_transition_normal
-+#define copy_role_allowed_ip copy_role_allowed_ip_normal
-+#define get_gr_arg_wrapper_size get_gr_arg_wrapper_size_normal
-+#endif
-+
-+__inline__ int
-+gr_acl_is_enabled(void)
-+{
-+ return (gr_status & GR_READY);
-+}
-+
+static inline dev_t __get_dev(const struct dentry *dentry)
+{
+#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE)
@@ -61540,7 +61578,7 @@ index 0000000..35b85f2
+ return 0;
+}
+
-+static int
++int
+gr_streq(const char *a, const char *b, const unsigned int lena, const unsigned int lenb)
+{
+ if (likely(lena != lenb))
@@ -61645,9 +61683,9 @@ index 0000000..35b85f2
+ path.dentry = (struct dentry *)dentry;
+ path.mnt = (struct vfsmount *)vfsmnt;
+
-+ /* we can use real_root.dentry, real_root.mnt, because this is only called
++ /* we can use gr_real_root.dentry, gr_real_root.mnt, because this is only called
+ by the RBAC system */
-+ res = gen_full_path(&path, &real_root, buf, buflen);
++ res = gen_full_path(&path, &gr_real_root, buf, buflen);
+
+ return res;
+}
@@ -61664,7 +61702,7 @@ index 0000000..35b85f2
+ path.dentry = (struct dentry *)dentry;
+ path.mnt = (struct vfsmount *)vfsmnt;
+
-+ /* we can't use real_root.dentry, real_root.mnt, because they belong only to the RBAC system */
++ /* we can't use gr_real_root.dentry, gr_real_root.mnt, because they belong only to the RBAC system */
+ get_fs_root(reaper->fs, &root);
+
+ br_read_lock(vfsmount_lock);
@@ -61677,7 +61715,7 @@ index 0000000..35b85f2
+ return res;
+}
+
-+static char *
++char *
+gr_to_filename_rbac(const struct dentry *dentry, const struct vfsmount *mnt)
+{
+ char *ret;
@@ -61755,54 +61793,17 @@ index 0000000..35b85f2
+ return (((reqmode & ~GR_AUDITS) << 10) | ((reqmode & GR_WRITE) ? GR_AUDIT_APPEND : 0));
+}
+
-+struct acl_subject_label *
-+lookup_subject_map(const struct acl_subject_label *userp)
-+{
-+ unsigned int index = gr_shash(userp, subj_map_set.s_size);
-+ struct subject_map *match;
-+
-+ match = subj_map_set.s_hash[index];
-+
-+ while (match && match->user != userp)
-+ match = match->next;
-+
-+ if (match != NULL)
-+ return match->kernel;
-+ else
-+ return NULL;
-+}
-+
-+static void
-+insert_subj_map_entry(struct subject_map *subjmap)
-+{
-+ unsigned int index = gr_shash(subjmap->user, subj_map_set.s_size);
-+ struct subject_map **curr;
-+
-+ subjmap->prev = NULL;
-+
-+ curr = &subj_map_set.s_hash[index];
-+ if (*curr != NULL)
-+ (*curr)->prev = subjmap;
-+
-+ subjmap->next = *curr;
-+ *curr = subjmap;
-+
-+ return;
-+}
-+
-+static struct acl_role_label *
-+lookup_acl_role_label(const struct task_struct *task, const uid_t uid,
++struct acl_role_label *
++__lookup_acl_role_label(const struct gr_policy_state *state, const struct task_struct *task, const uid_t uid,
+ const gid_t gid)
+{
-+ unsigned int index = gr_rhash(uid, GR_ROLE_USER, acl_role_set.r_size);
++ unsigned int index = gr_rhash(uid, GR_ROLE_USER, state->acl_role_set.r_size);
+ struct acl_role_label *match;
+ struct role_allowed_ip *ipp;
+ unsigned int x;
-+ u32 curr_ip = task->signal->curr_ip;
++ u32 curr_ip = task->signal->saved_ip;
+
-+ task->signal->saved_ip = curr_ip;
-+
-+ match = acl_role_set.r_hash[index];
++ match = state->acl_role_set.r_hash[index];
+
+ while (match) {
+ if ((match->roletype & (GR_ROLE_DOMAIN | GR_ROLE_USER)) == (GR_ROLE_DOMAIN | GR_ROLE_USER)) {
@@ -61817,8 +61818,8 @@ index 0000000..35b85f2
+found:
+ if (match == NULL) {
+ try_group:
-+ index = gr_rhash(gid, GR_ROLE_GROUP, acl_role_set.r_size);
-+ match = acl_role_set.r_hash[index];
++ index = gr_rhash(gid, GR_ROLE_GROUP, state->acl_role_set.r_size);
++ match = state->acl_role_set.r_hash[index];
+
+ while (match) {
+ if ((match->roletype & (GR_ROLE_DOMAIN | GR_ROLE_GROUP)) == (GR_ROLE_DOMAIN | GR_ROLE_GROUP)) {
@@ -61832,7 +61833,7 @@ index 0000000..35b85f2
+ }
+found2:
+ if (match == NULL)
-+ match = default_role;
++ match = state->default_role;
+ if (match->allowed_ips == NULL)
+ return match;
+ else {
@@ -61842,7 +61843,7 @@ index 0000000..35b85f2
+ (ntohl(ipp->addr) & ipp->netmask)))
+ return match;
+ }
-+ match = default_role;
++ match = state->default_role;
+ }
+ } else if (match->allowed_ips == NULL) {
+ return match;
@@ -61859,6 +61860,13 @@ index 0000000..35b85f2
+ return match;
+}
+
++static struct acl_role_label *
++lookup_acl_role_label(const struct task_struct *task, const uid_t uid,
++ const gid_t gid)
++{
++ return __lookup_acl_role_label(&running_polstate, task, uid, gid);
++}
++
+struct acl_subject_label *
+lookup_acl_subj_label(const ino_t ino, const dev_t dev,
+ const struct acl_role_label *role)
@@ -61949,15 +61957,15 @@ index 0000000..35b85f2
+ return NULL;
+}
+
-+static struct name_entry *
-+lookup_name_entry(const char *name)
++struct name_entry *
++__lookup_name_entry(const struct gr_policy_state *state, const char *name)
+{
+ unsigned int len = strlen(name);
+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
++ unsigned int index = key % state->name_set.n_size;
+ struct name_entry *match;
+
-+ match = name_set.n_hash[index];
++ match = state->name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len)))
+ match = match->next;
@@ -61966,14 +61974,20 @@ index 0000000..35b85f2
+}
+
+static struct name_entry *
++lookup_name_entry(const char *name)
++{
++ return __lookup_name_entry(&running_polstate, name);
++}
++
++static struct name_entry *
+lookup_name_entry_create(const char *name)
+{
+ unsigned int len = strlen(name);
+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
++ unsigned int index = key % running_polstate.name_set.n_size;
+ struct name_entry *match;
+
-+ match = name_set.n_hash[index];
++ match = running_polstate.name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len) ||
+ !match->deleted))
@@ -61982,7 +61996,7 @@ index 0000000..35b85f2
+ if (match && match->deleted)
+ return match;
+
-+ match = name_set.n_hash[index];
++ match = running_polstate.name_set.n_hash[index];
+
+ while (match && (match->key != key || !gr_streq(match->name, name, match->len, len) ||
+ match->deleted))
@@ -61997,10 +62011,10 @@ index 0000000..35b85f2
+static struct inodev_entry *
+lookup_inodev_entry(const ino_t ino, const dev_t dev)
+{
-+ unsigned int index = gr_fhash(ino, dev, inodev_set.i_size);
++ unsigned int index = gr_fhash(ino, dev, running_polstate.inodev_set.i_size);
+ struct inodev_entry *match;
+
-+ match = inodev_set.i_hash[index];
++ match = running_polstate.inodev_set.i_hash[index];
+
+ while (match && (match->nentry->inode != ino || match->nentry->device != dev))
+ match = match->next;
@@ -62008,16 +62022,16 @@ index 0000000..35b85f2
+ return match;
+}
+
-+static void
-+insert_inodev_entry(struct inodev_entry *entry)
++void
++__insert_inodev_entry(const struct gr_policy_state *state, struct inodev_entry *entry)
+{
+ unsigned int index = gr_fhash(entry->nentry->inode, entry->nentry->device,
-+ inodev_set.i_size);
++ state->inodev_set.i_size);
+ struct inodev_entry **curr;
+
+ entry->prev = NULL;
+
-+ curr = &inodev_set.i_hash[index];
++ curr = &state->inodev_set.i_hash[index];
+ if (*curr != NULL)
+ (*curr)->prev = entry;
+
@@ -62028,138 +62042,12 @@ index 0000000..35b85f2
+}
+
+static void
-+__insert_acl_role_label(struct acl_role_label *role, uid_t uidgid)
-+{
-+ unsigned int index =
-+ gr_rhash(uidgid, role->roletype & (GR_ROLE_USER | GR_ROLE_GROUP), acl_role_set.r_size);
-+ struct acl_role_label **curr;
-+ struct acl_role_label *tmp, *tmp2;
-+
-+ curr = &acl_role_set.r_hash[index];
-+
-+ /* simple case, slot is empty, just set it to our role */
-+ if (*curr == NULL) {
-+ *curr = role;
-+ } else {
-+ /* example:
-+ 1 -> 2 -> 3 (adding 2 -> 3 to here)
-+ 2 -> 3
-+ */
-+ /* first check to see if we can already be reached via this slot */
-+ tmp = *curr;
-+ while (tmp && tmp != role)
-+ tmp = tmp->next;
-+ if (tmp == role) {
-+ /* we don't need to add ourselves to this slot's chain */
-+ return;
-+ }
-+ /* we need to add ourselves to this chain, two cases */
-+ if (role->next == NULL) {
-+ /* simple case, append the current chain to our role */
-+ role->next = *curr;
-+ *curr = role;
-+ } else {
-+ /* 1 -> 2 -> 3 -> 4
-+ 2 -> 3 -> 4
-+ 3 -> 4 (adding 1 -> 2 -> 3 -> 4 to here)
-+ */
-+ /* trickier case: walk our role's chain until we find
-+ the role for the start of the current slot's chain */
-+ tmp = role;
-+ tmp2 = *curr;
-+ while (tmp->next && tmp->next != tmp2)
-+ tmp = tmp->next;
-+ if (tmp->next == tmp2) {
-+ /* from example above, we found 3, so just
-+ replace this slot's chain with ours */
-+ *curr = role;
-+ } else {
-+ /* we didn't find a subset of our role's chain
-+ in the current slot's chain, so append their
-+ chain to ours, and set us as the first role in
-+ the slot's chain
-+
-+ we could fold this case with the case above,
-+ but making it explicit for clarity
-+ */
-+ tmp->next = tmp2;
-+ *curr = role;
-+ }
-+ }
-+ }
-+
-+ return;
-+}
-+
-+static void
-+insert_acl_role_label(struct acl_role_label *role)
++insert_inodev_entry(struct inodev_entry *entry)
+{
-+ int i;
-+
-+ if (role_list == NULL) {
-+ role_list = role;
-+ role->prev = NULL;
-+ } else {
-+ role->prev = role_list;
-+ role_list = role;
-+ }
-+
-+ /* used for hash chains */
-+ role->next = NULL;
-+
-+ if (role->roletype & GR_ROLE_DOMAIN) {
-+ for (i = 0; i < role->domain_child_num; i++)
-+ __insert_acl_role_label(role, role->domain_children[i]);
-+ } else
-+ __insert_acl_role_label(role, role->uidgid);
++ __insert_inodev_entry(&running_polstate, entry);
+}
-+
-+static int
-+insert_name_entry(char *name, const ino_t inode, const dev_t device, __u8 deleted)
-+{
-+ struct name_entry **curr, *nentry;
-+ struct inodev_entry *ientry;
-+ unsigned int len = strlen(name);
-+ unsigned int key = full_name_hash(name, len);
-+ unsigned int index = key % name_set.n_size;
-+
-+ curr = &name_set.n_hash[index];
-+
-+ while (*curr && ((*curr)->key != key || !gr_streq((*curr)->name, name, (*curr)->len, len)))
-+ curr = &((*curr)->next);
+
-+ if (*curr != NULL)
-+ return 1;
-+
-+ nentry = acl_alloc(sizeof (struct name_entry));
-+ if (nentry == NULL)
-+ return 0;
-+ ientry = acl_alloc(sizeof (struct inodev_entry));
-+ if (ientry == NULL)
-+ return 0;
-+ ientry->nentry = nentry;
-+
-+ nentry->key = key;
-+ nentry->name = name;
-+ nentry->inode = inode;
-+ nentry->device = device;
-+ nentry->len = len;
-+ nentry->deleted = deleted;
-+
-+ nentry->prev = NULL;
-+ curr = &name_set.n_hash[index];
-+ if (*curr != NULL)
-+ (*curr)->prev = nentry;
-+ nentry->next = *curr;
-+ *curr = nentry;
-+
-+ /* insert us into the table searchable by inode/dev */
-+ insert_inodev_entry(ientry);
-+
-+ return 1;
-+}
-+
-+static void
++void
+insert_acl_obj_label(struct acl_object_label *obj,
+ struct acl_subject_label *subj)
+{
@@ -62167,7 +62055,6 @@ index 0000000..35b85f2
+ gr_fhash(obj->inode, obj->device, subj->obj_hash_size);
+ struct acl_object_label **curr;
+
-+
+ obj->prev = NULL;
+
+ curr = &subj->obj_hash[index];
@@ -62180,7 +62067,7 @@ index 0000000..35b85f2
+ return;
+}
+
-+static void
++void
+insert_acl_subj_label(struct acl_subject_label *obj,
+ struct acl_role_label *role)
+{
@@ -62199,774 +62086,6 @@ index 0000000..35b85f2
+ return;
+}
+
-+/* allocating chained hash tables, so optimal size is where lambda ~ 1 */
-+
-+static void *
-+create_table(__u32 * len, int elementsize)
-+{
-+ unsigned int table_sizes[] = {
-+ 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381,
-+ 32749, 65521, 131071, 262139, 524287, 1048573, 2097143,
-+ 4194301, 8388593, 16777213, 33554393, 67108859
-+ };
-+ void *newtable = NULL;
-+ unsigned int pwr = 0;
-+
-+ while ((pwr < ((sizeof (table_sizes) / sizeof (table_sizes[0])) - 1)) &&
-+ table_sizes[pwr] <= *len)
-+ pwr++;
-+
-+ if (table_sizes[pwr] <= *len || (table_sizes[pwr] > ULONG_MAX / elementsize))
-+ return newtable;
-+
-+ if ((table_sizes[pwr] * elementsize) <= PAGE_SIZE)
-+ newtable =
-+ kmalloc(table_sizes[pwr] * elementsize, GFP_KERNEL);
-+ else
-+ newtable = vmalloc(table_sizes[pwr] * elementsize);
-+
-+ *len = table_sizes[pwr];
-+
-+ return newtable;
-+}
-+
-+static int
-+init_variables(const struct gr_arg *arg)
-+{
-+ struct task_struct *reaper = &init_task;
-+ unsigned int stacksize;
-+
-+ subj_map_set.s_size = arg->role_db.num_subjects;
-+ acl_role_set.r_size = arg->role_db.num_roles + arg->role_db.num_domain_children;
-+ name_set.n_size = arg->role_db.num_objects;
-+ inodev_set.i_size = arg->role_db.num_objects;
-+
-+ if (!subj_map_set.s_size || !acl_role_set.r_size ||
-+ !name_set.n_size || !inodev_set.i_size)
-+ return 1;
-+
-+ if (!gr_init_uidset())
-+ return 1;
-+
-+ /* set up the stack that holds allocation info */
-+
-+ stacksize = arg->role_db.num_pointers + 5;
-+
-+ if (!acl_alloc_stack_init(stacksize))
-+ return 1;
-+
-+ /* grab reference for the real root dentry and vfsmount */
-+ get_fs_root(reaper->fs, &real_root);
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", __get_dev(real_root.dentry), real_root.dentry->d_inode->i_ino);
-+#endif
-+
-+ fakefs_obj_rw = acl_alloc(sizeof(struct acl_object_label));
-+ if (fakefs_obj_rw == NULL)
-+ return 1;
-+ fakefs_obj_rw->mode = GR_FIND | GR_READ | GR_WRITE;
-+
-+ fakefs_obj_rwx = acl_alloc(sizeof(struct acl_object_label));
-+ if (fakefs_obj_rwx == NULL)
-+ return 1;
-+ fakefs_obj_rwx->mode = GR_FIND | GR_READ | GR_WRITE | GR_EXEC;
-+
-+ subj_map_set.s_hash =
-+ (struct subject_map **) create_table(&subj_map_set.s_size, sizeof(void *));
-+ acl_role_set.r_hash =
-+ (struct acl_role_label **) create_table(&acl_role_set.r_size, sizeof(void *));
-+ name_set.n_hash = (struct name_entry **) create_table(&name_set.n_size, sizeof(void *));
-+ inodev_set.i_hash =
-+ (struct inodev_entry **) create_table(&inodev_set.i_size, sizeof(void *));
-+
-+ if (!subj_map_set.s_hash || !acl_role_set.r_hash ||
-+ !name_set.n_hash || !inodev_set.i_hash)
-+ return 1;
-+
-+ memset(subj_map_set.s_hash, 0,
-+ sizeof(struct subject_map *) * subj_map_set.s_size);
-+ memset(acl_role_set.r_hash, 0,
-+ sizeof (struct acl_role_label *) * acl_role_set.r_size);
-+ memset(name_set.n_hash, 0,
-+ sizeof (struct name_entry *) * name_set.n_size);
-+ memset(inodev_set.i_hash, 0,
-+ sizeof (struct inodev_entry *) * inodev_set.i_size);
-+
-+ return 0;
-+}
-+
-+/* free information not needed after startup
-+ currently contains user->kernel pointer mappings for subjects
-+*/
-+
-+static void
-+free_init_variables(void)
-+{
-+ __u32 i;
-+
-+ if (subj_map_set.s_hash) {
-+ for (i = 0; i < subj_map_set.s_size; i++) {
-+ if (subj_map_set.s_hash[i]) {
-+ kfree(subj_map_set.s_hash[i]);
-+ subj_map_set.s_hash[i] = NULL;
-+ }
-+ }
-+
-+ if ((subj_map_set.s_size * sizeof (struct subject_map *)) <=
-+ PAGE_SIZE)
-+ kfree(subj_map_set.s_hash);
-+ else
-+ vfree(subj_map_set.s_hash);
-+ }
-+
-+ return;
-+}
-+
-+static void
-+free_variables(void)
-+{
-+ struct acl_subject_label *s;
-+ struct acl_role_label *r;
-+ struct task_struct *task, *task2;
-+ unsigned int x;
-+
-+ gr_clear_learn_entries();
-+
-+ read_lock(&tasklist_lock);
-+ do_each_thread(task2, task) {
-+ task->acl_sp_role = 0;
-+ task->acl_role_id = 0;
-+ task->acl = NULL;
-+ task->role = NULL;
-+ } while_each_thread(task2, task);
-+ read_unlock(&tasklist_lock);
-+
-+ /* release the reference to the real root dentry and vfsmount */
-+ path_put(&real_root);
-+ memset(&real_root, 0, sizeof(real_root));
-+
-+ /* free all object hash tables */
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (r->subj_hash == NULL)
-+ goto next_role;
-+ FOR_EACH_SUBJECT_START(r, s, x)
-+ if (s->obj_hash == NULL)
-+ break;
-+ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
-+ kfree(s->obj_hash);
-+ else
-+ vfree(s->obj_hash);
-+ FOR_EACH_SUBJECT_END(s, x)
-+ FOR_EACH_NESTED_SUBJECT_START(r, s)
-+ if (s->obj_hash == NULL)
-+ break;
-+ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
-+ kfree(s->obj_hash);
-+ else
-+ vfree(s->obj_hash);
-+ FOR_EACH_NESTED_SUBJECT_END(s)
-+ if ((r->subj_hash_size * sizeof (struct acl_subject_label *)) <= PAGE_SIZE)
-+ kfree(r->subj_hash);
-+ else
-+ vfree(r->subj_hash);
-+ r->subj_hash = NULL;
-+next_role:
-+ FOR_EACH_ROLE_END(r)
-+
-+ acl_free_all();
-+
-+ if (acl_role_set.r_hash) {
-+ if ((acl_role_set.r_size * sizeof (struct acl_role_label *)) <=
-+ PAGE_SIZE)
-+ kfree(acl_role_set.r_hash);
-+ else
-+ vfree(acl_role_set.r_hash);
-+ }
-+ if (name_set.n_hash) {
-+ if ((name_set.n_size * sizeof (struct name_entry *)) <=
-+ PAGE_SIZE)
-+ kfree(name_set.n_hash);
-+ else
-+ vfree(name_set.n_hash);
-+ }
-+
-+ if (inodev_set.i_hash) {
-+ if ((inodev_set.i_size * sizeof (struct inodev_entry *)) <=
-+ PAGE_SIZE)
-+ kfree(inodev_set.i_hash);
-+ else
-+ vfree(inodev_set.i_hash);
-+ }
-+
-+ gr_free_uidset();
-+
-+ memset(&name_set, 0, sizeof (struct name_db));
-+ memset(&inodev_set, 0, sizeof (struct inodev_db));
-+ memset(&acl_role_set, 0, sizeof (struct acl_role_db));
-+ memset(&subj_map_set, 0, sizeof (struct acl_subj_map_db));
-+
-+ default_role = NULL;
-+ kernel_role = NULL;
-+ role_list = NULL;
-+
-+ return;
-+}
-+
-+static struct acl_subject_label *
-+do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied);
-+
-+static int alloc_and_copy_string(char **name, unsigned int maxlen)
-+{
-+ unsigned int len = strnlen_user(*name, maxlen);
-+ char *tmp;
-+
-+ if (!len || len >= maxlen)
-+ return -EINVAL;
-+
-+ if ((tmp = (char *) acl_alloc(len)) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(tmp, *name, len))
-+ return -EFAULT;
-+
-+ tmp[len-1] = '\0';
-+ *name = tmp;
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_glob(struct acl_object_label *obj)
-+{
-+ struct acl_object_label *g_tmp, **guser;
-+ int error;
-+
-+ if (obj->globbed == NULL)
-+ return 0;
-+
-+ guser = &obj->globbed;
-+ while (*guser) {
-+ g_tmp = (struct acl_object_label *)
-+ acl_alloc(sizeof (struct acl_object_label));
-+ if (g_tmp == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_acl_object_label(g_tmp, *guser))
-+ return -EFAULT;
-+
-+ error = alloc_and_copy_string(&g_tmp->filename, PATH_MAX);
-+ if (error)
-+ return error;
-+
-+ *guser = g_tmp;
-+ guser = &(g_tmp->next);
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_objs(struct acl_object_label *userp, struct acl_subject_label *subj,
-+ struct acl_role_label *role)
-+{
-+ struct acl_object_label *o_tmp;
-+ int ret;
-+
-+ while (userp) {
-+ if ((o_tmp = (struct acl_object_label *)
-+ acl_alloc(sizeof (struct acl_object_label))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_acl_object_label(o_tmp, userp))
-+ return -EFAULT;
-+
-+ userp = o_tmp->prev;
-+
-+ ret = alloc_and_copy_string(&o_tmp->filename, PATH_MAX);
-+ if (ret)
-+ return ret;
-+
-+ insert_acl_obj_label(o_tmp, subj);
-+ if (!insert_name_entry(o_tmp->filename, o_tmp->inode,
-+ o_tmp->device, (o_tmp->mode & GR_DELETED) ? 1 : 0))
-+ return -ENOMEM;
-+
-+ ret = copy_user_glob(o_tmp);
-+ if (ret)
-+ return ret;
-+
-+ if (o_tmp->nested) {
-+ int already_copied;
-+
-+ o_tmp->nested = do_copy_user_subj(o_tmp->nested, role, &already_copied);
-+ if (IS_ERR(o_tmp->nested))
-+ return PTR_ERR(o_tmp->nested);
-+
-+ /* insert into nested subject list if we haven't copied this one yet
-+ to prevent duplicate entries */
-+ if (!already_copied) {
-+ o_tmp->nested->next = role->hash->first;
-+ role->hash->first = o_tmp->nested;
-+ }
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static __u32
-+count_user_subjs(struct acl_subject_label *userp)
-+{
-+ struct acl_subject_label s_tmp;
-+ __u32 num = 0;
-+
-+ while (userp) {
-+ if (copy_acl_subject_label(&s_tmp, userp))
-+ break;
-+
-+ userp = s_tmp.prev;
-+ }
-+
-+ return num;
-+}
-+
-+static int
-+copy_user_allowedips(struct acl_role_label *rolep)
-+{
-+ struct role_allowed_ip *ruserip, *rtmp = NULL, *rlast;
-+
-+ ruserip = rolep->allowed_ips;
-+
-+ while (ruserip) {
-+ rlast = rtmp;
-+
-+ if ((rtmp = (struct role_allowed_ip *)
-+ acl_alloc(sizeof (struct role_allowed_ip))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_role_allowed_ip(rtmp, ruserip))
-+ return -EFAULT;
-+
-+ ruserip = rtmp->prev;
-+
-+ if (!rlast) {
-+ rtmp->prev = NULL;
-+ rolep->allowed_ips = rtmp;
-+ } else {
-+ rlast->next = rtmp;
-+ rtmp->prev = rlast;
-+ }
-+
-+ if (!ruserip)
-+ rtmp->next = NULL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_transitions(struct acl_role_label *rolep)
-+{
-+ struct role_transition *rusertp, *rtmp = NULL, *rlast;
-+ int error;
-+
-+ rusertp = rolep->transitions;
-+
-+ while (rusertp) {
-+ rlast = rtmp;
-+
-+ if ((rtmp = (struct role_transition *)
-+ acl_alloc(sizeof (struct role_transition))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_role_transition(rtmp, rusertp))
-+ return -EFAULT;
-+
-+ rusertp = rtmp->prev;
-+
-+ error = alloc_and_copy_string(&rtmp->rolename, GR_SPROLE_LEN);
-+ if (error)
-+ return error;
-+
-+ if (!rlast) {
-+ rtmp->prev = NULL;
-+ rolep->transitions = rtmp;
-+ } else {
-+ rlast->next = rtmp;
-+ rtmp->prev = rlast;
-+ }
-+
-+ if (!rusertp)
-+ rtmp->next = NULL;
-+ }
-+
-+ return 0;
-+}
-+
-+static __u32 count_user_objs(const struct acl_object_label __user *userp)
-+{
-+ struct acl_object_label o_tmp;
-+ __u32 num = 0;
-+
-+ while (userp) {
-+ if (copy_acl_object_label(&o_tmp, userp))
-+ break;
-+
-+ userp = o_tmp.prev;
-+ num++;
-+ }
-+
-+ return num;
-+}
-+
-+static struct acl_subject_label *
-+do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied)
-+{
-+ struct acl_subject_label *s_tmp = NULL, *s_tmp2;
-+ __u32 num_objs;
-+ struct acl_ip_label **i_tmp, *i_utmp2;
-+ struct gr_hash_struct ghash;
-+ struct subject_map *subjmap;
-+ unsigned int i_num;
-+ int err;
-+
-+ if (already_copied != NULL)
-+ *already_copied = 0;
-+
-+ s_tmp = lookup_subject_map(userp);
-+
-+ /* we've already copied this subject into the kernel, just return
-+ the reference to it, and don't copy it over again
-+ */
-+ if (s_tmp) {
-+ if (already_copied != NULL)
-+ *already_copied = 1;
-+ return(s_tmp);
-+ }
-+
-+ if ((s_tmp = (struct acl_subject_label *)
-+ acl_alloc(sizeof (struct acl_subject_label))) == NULL)
-+ return ERR_PTR(-ENOMEM);
-+
-+ subjmap = (struct subject_map *)kmalloc(sizeof (struct subject_map), GFP_KERNEL);
-+ if (subjmap == NULL)
-+ return ERR_PTR(-ENOMEM);
-+
-+ subjmap->user = userp;
-+ subjmap->kernel = s_tmp;
-+ insert_subj_map_entry(subjmap);
-+
-+ if (copy_acl_subject_label(s_tmp, userp))
-+ return ERR_PTR(-EFAULT);
-+
-+ err = alloc_and_copy_string(&s_tmp->filename, PATH_MAX);
-+ if (err)
-+ return ERR_PTR(err);
-+
-+ if (!strcmp(s_tmp->filename, "/"))
-+ role->root_label = s_tmp;
-+
-+ if (copy_gr_hash_struct(&ghash, s_tmp->hash))
-+ return ERR_PTR(-EFAULT);
-+
-+ /* copy user and group transition tables */
-+
-+ if (s_tmp->user_trans_num) {
-+ uid_t *uidlist;
-+
-+ uidlist = (uid_t *)acl_alloc_num(s_tmp->user_trans_num, sizeof(uid_t));
-+ if (uidlist == NULL)
-+ return ERR_PTR(-ENOMEM);
-+ if (copy_from_user(uidlist, s_tmp->user_transitions, s_tmp->user_trans_num * sizeof(uid_t)))
-+ return ERR_PTR(-EFAULT);
-+
-+ s_tmp->user_transitions = uidlist;
-+ }
-+
-+ if (s_tmp->group_trans_num) {
-+ gid_t *gidlist;
-+
-+ gidlist = (gid_t *)acl_alloc_num(s_tmp->group_trans_num, sizeof(gid_t));
-+ if (gidlist == NULL)
-+ return ERR_PTR(-ENOMEM);
-+ if (copy_from_user(gidlist, s_tmp->group_transitions, s_tmp->group_trans_num * sizeof(gid_t)))
-+ return ERR_PTR(-EFAULT);
-+
-+ s_tmp->group_transitions = gidlist;
-+ }
-+
-+ /* set up object hash table */
-+ num_objs = count_user_objs(ghash.first);
-+
-+ s_tmp->obj_hash_size = num_objs;
-+ s_tmp->obj_hash =
-+ (struct acl_object_label **)
-+ create_table(&(s_tmp->obj_hash_size), sizeof(void *));
-+
-+ if (!s_tmp->obj_hash)
-+ return ERR_PTR(-ENOMEM);
-+
-+ memset(s_tmp->obj_hash, 0,
-+ s_tmp->obj_hash_size *
-+ sizeof (struct acl_object_label *));
-+
-+ /* add in objects */
-+ err = copy_user_objs(ghash.first, s_tmp, role);
-+
-+ if (err)
-+ return ERR_PTR(err);
-+
-+ /* set pointer for parent subject */
-+ if (s_tmp->parent_subject) {
-+ s_tmp2 = do_copy_user_subj(s_tmp->parent_subject, role, NULL);
-+
-+ if (IS_ERR(s_tmp2))
-+ return s_tmp2;
-+
-+ s_tmp->parent_subject = s_tmp2;
-+ }
-+
-+ /* add in ip acls */
-+
-+ if (!s_tmp->ip_num) {
-+ s_tmp->ips = NULL;
-+ goto insert;
-+ }
-+
-+ i_tmp =
-+ (struct acl_ip_label **) acl_alloc_num(s_tmp->ip_num,
-+ sizeof (struct acl_ip_label *));
-+
-+ if (!i_tmp)
-+ return ERR_PTR(-ENOMEM);
-+
-+ for (i_num = 0; i_num < s_tmp->ip_num; i_num++) {
-+ *(i_tmp + i_num) =
-+ (struct acl_ip_label *)
-+ acl_alloc(sizeof (struct acl_ip_label));
-+ if (!*(i_tmp + i_num))
-+ return ERR_PTR(-ENOMEM);
-+
-+ if (copy_pointer_from_array(&i_utmp2, i_num, s_tmp->ips))
-+ return ERR_PTR(-EFAULT);
-+
-+ if (copy_acl_ip_label(*(i_tmp + i_num), i_utmp2))
-+ return ERR_PTR(-EFAULT);
-+
-+ if ((*(i_tmp + i_num))->iface == NULL)
-+ continue;
-+
-+ err = alloc_and_copy_string(&(*(i_tmp + i_num))->iface, IFNAMSIZ);
-+ if (err)
-+ return ERR_PTR(err);
-+ }
-+
-+ s_tmp->ips = i_tmp;
-+
-+insert:
-+ if (!insert_name_entry(s_tmp->filename, s_tmp->inode,
-+ s_tmp->device, (s_tmp->mode & GR_DELETED) ? 1 : 0))
-+ return ERR_PTR(-ENOMEM);
-+
-+ return s_tmp;
-+}
-+
-+static int
-+copy_user_subjs(struct acl_subject_label *userp, struct acl_role_label *role)
-+{
-+ struct acl_subject_label s_pre;
-+ struct acl_subject_label * ret;
-+ int err;
-+
-+ while (userp) {
-+ if (copy_acl_subject_label(&s_pre, userp))
-+ return -EFAULT;
-+
-+ ret = do_copy_user_subj(userp, role, NULL);
-+
-+ err = PTR_ERR(ret);
-+ if (IS_ERR(ret))
-+ return err;
-+
-+ insert_acl_subj_label(ret, role);
-+
-+ userp = s_pre.prev;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+copy_user_acl(struct gr_arg *arg)
-+{
-+ struct acl_role_label *r_tmp = NULL, **r_utmp, *r_utmp2;
-+ struct acl_subject_label *subj_list;
-+ struct sprole_pw *sptmp;
-+ struct gr_hash_struct *ghash;
-+ uid_t *domainlist;
-+ unsigned int r_num;
-+ int err = 0;
-+ __u16 i;
-+ __u32 num_subjs;
-+
-+ /* we need a default and kernel role */
-+ if (arg->role_db.num_roles < 2)
-+ return -EINVAL;
-+
-+ /* copy special role authentication info from userspace */
-+
-+ num_sprole_pws = arg->num_sprole_pws;
-+ acl_special_roles = (struct sprole_pw **) acl_alloc_num(num_sprole_pws, sizeof(struct sprole_pw *));
-+
-+ if (!acl_special_roles && num_sprole_pws)
-+ return -ENOMEM;
-+
-+ for (i = 0; i < num_sprole_pws; i++) {
-+ sptmp = (struct sprole_pw *) acl_alloc(sizeof(struct sprole_pw));
-+ if (!sptmp)
-+ return -ENOMEM;
-+ if (copy_sprole_pw(sptmp, i, arg->sprole_pws))
-+ return -EFAULT;
-+
-+ err = alloc_and_copy_string((char **)&sptmp->rolename, GR_SPROLE_LEN);
-+ if (err)
-+ return err;
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Copying special role %s\n", sptmp->rolename);
-+#endif
-+
-+ acl_special_roles[i] = sptmp;
-+ }
-+
-+ r_utmp = (struct acl_role_label **) arg->role_db.r_table;
-+
-+ for (r_num = 0; r_num < arg->role_db.num_roles; r_num++) {
-+ r_tmp = acl_alloc(sizeof (struct acl_role_label));
-+
-+ if (!r_tmp)
-+ return -ENOMEM;
-+
-+ if (copy_pointer_from_array(&r_utmp2, r_num, r_utmp))
-+ return -EFAULT;
-+
-+ if (copy_acl_role_label(r_tmp, r_utmp2))
-+ return -EFAULT;
-+
-+ err = alloc_and_copy_string(&r_tmp->rolename, GR_SPROLE_LEN);
-+ if (err)
-+ return err;
-+
-+ if (!strcmp(r_tmp->rolename, "default")
-+ && (r_tmp->roletype & GR_ROLE_DEFAULT)) {
-+ default_role = r_tmp;
-+ } else if (!strcmp(r_tmp->rolename, ":::kernel:::")) {
-+ kernel_role = r_tmp;
-+ }
-+
-+ if ((ghash = (struct gr_hash_struct *) acl_alloc(sizeof(struct gr_hash_struct))) == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_gr_hash_struct(ghash, r_tmp->hash))
-+ return -EFAULT;
-+
-+ r_tmp->hash = ghash;
-+
-+ num_subjs = count_user_subjs(r_tmp->hash->first);
-+
-+ r_tmp->subj_hash_size = num_subjs;
-+ r_tmp->subj_hash =
-+ (struct acl_subject_label **)
-+ create_table(&(r_tmp->subj_hash_size), sizeof(void *));
-+
-+ if (!r_tmp->subj_hash)
-+ return -ENOMEM;
-+
-+ err = copy_user_allowedips(r_tmp);
-+ if (err)
-+ return err;
-+
-+ /* copy domain info */
-+ if (r_tmp->domain_children != NULL) {
-+ domainlist = acl_alloc_num(r_tmp->domain_child_num, sizeof(uid_t));
-+ if (domainlist == NULL)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(domainlist, r_tmp->domain_children, r_tmp->domain_child_num * sizeof(uid_t)))
-+ return -EFAULT;
-+
-+ r_tmp->domain_children = domainlist;
-+ }
-+
-+ err = copy_user_transitions(r_tmp);
-+ if (err)
-+ return err;
-+
-+ memset(r_tmp->subj_hash, 0,
-+ r_tmp->subj_hash_size *
-+ sizeof (struct acl_subject_label *));
-+
-+ /* acquire the list of subjects, then NULL out
-+ the list prior to parsing the subjects for this role,
-+ as during this parsing the list is replaced with a list
-+ of *nested* subjects for the role
-+ */
-+ subj_list = r_tmp->hash->first;
-+
-+ /* set nested subject list to null */
-+ r_tmp->hash->first = NULL;
-+
-+ err = copy_user_subjs(subj_list, r_tmp);
-+
-+ if (err)
-+ return err;
-+
-+ insert_acl_role_label(r_tmp);
-+ }
-+
-+ if (default_role == NULL || kernel_role == NULL)
-+ return -EINVAL;
-+
-+ return err;
-+}
-+
-+static int
-+gracl_init(struct gr_arg *args)
-+{
-+ int error = 0;
-+
-+ memcpy(gr_system_salt, args->salt, GR_SALT_LEN);
-+ memcpy(gr_system_sum, args->sum, GR_SHA_LEN);
-+
-+ if (init_variables(args)) {
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
-+ error = -ENOMEM;
-+ free_variables();
-+ goto out;
-+ }
-+
-+ error = copy_user_acl(args);
-+ free_init_variables();
-+ if (error) {
-+ free_variables();
-+ goto out;
-+ }
-+
-+ if ((error = gr_set_acls(0))) {
-+ free_variables();
-+ goto out;
-+ }
-+
-+ pax_open_kernel();
-+ gr_status |= GR_READY;
-+ pax_close_kernel();
-+
-+ out:
-+ return error;
-+}
-+
+/* derived from glibc fnmatch() 0: match, 1: no match*/
+
+static int
@@ -63191,7 +62310,7 @@ index 0000000..35b85f2
+ }
+
+ for (;;) {
-+ if (dentry == real_root.dentry && mnt == real_root.mnt)
++ if (dentry == gr_real_root.dentry && mnt == gr_real_root.mnt)
+ break;
+
+ if (dentry == mnt->mnt_root || IS_ROOT(dentry)) {
@@ -63217,9 +62336,9 @@ index 0000000..35b85f2
+
+ retval = full_lookup(l_dentry, l_mnt, dentry, subj, &path, checkglob);
+
-+ /* real_root is pinned so we don't have to hold a reference */
++ /* gr_real_root is pinned so we don't have to hold a reference */
+ if (retval == NULL)
-+ retval = full_lookup(l_dentry, l_mnt, real_root.dentry, subj, &path, checkglob);
++ retval = full_lookup(l_dentry, l_mnt, gr_real_root.dentry, subj, &path, checkglob);
+out:
+ write_sequnlock(&rename_lock);
+ br_read_unlock(vfsmount_lock);
@@ -63252,7 +62371,7 @@ index 0000000..35b85f2
+ return __chk_obj_label(l_dentry, l_mnt, subj, path, GR_CREATE_GLOB);
+}
+
-+static struct acl_subject_label *
++struct acl_subject_label *
+chk_subj_label(const struct dentry *l_dentry, const struct vfsmount *l_mnt,
+ const struct acl_role_label *role)
+{
@@ -63265,7 +62384,7 @@ index 0000000..35b85f2
+ write_seqlock(&rename_lock);
+
+ for (;;) {
-+ if (dentry == real_root.dentry && mnt == real_root.mnt)
++ if (dentry == gr_real_root.dentry && mnt == gr_real_root.mnt)
+ break;
+ if (dentry == mnt->mnt_root || IS_ROOT(dentry)) {
+ if (mnt->mnt_parent == mnt)
@@ -63308,10 +62427,10 @@ index 0000000..35b85f2
+ spin_unlock(&dentry->d_lock);
+
+ if (unlikely(retval == NULL)) {
-+ /* real_root is pinned, we don't need to hold a reference */
++ /* gr_real_root is pinned, we don't need to hold a reference */
+ read_lock(&gr_inode_lock);
-+ retval = lookup_acl_subj_label(real_root.dentry->d_inode->i_ino,
-+ __get_dev(real_root.dentry), role);
++ retval = lookup_acl_subj_label(gr_real_root.dentry->d_inode->i_ino,
++ __get_dev(gr_real_root.dentry), role);
+ read_unlock(&gr_inode_lock);
+ }
+out:
@@ -63323,6 +62442,66 @@ index 0000000..35b85f2
+ return retval;
+}
+
++void
++assign_special_role(const char *rolename)
++{
++ struct acl_object_label *obj;
++ struct acl_role_label *r;
++ struct acl_role_label *assigned = NULL;
++ struct task_struct *tsk;
++ struct file *filp;
++
++ FOR_EACH_ROLE_START(r)
++ if (!strcmp(rolename, r->rolename) &&
++ (r->roletype & GR_ROLE_SPECIAL)) {
++ assigned = r;
++ break;
++ }
++ FOR_EACH_ROLE_END(r)
++
++ if (!assigned)
++ return;
++
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++
++ tsk = current->real_parent;
++ if (tsk == NULL)
++ goto out_unlock;
++
++ filp = tsk->exec_file;
++ if (filp == NULL)
++ goto out_unlock;
++
++ tsk->is_writable = 0;
++ tsk->inherited = 0;
++
++ tsk->acl_sp_role = 1;
++ tsk->acl_role_id = ++acl_sp_role_value;
++ tsk->role = assigned;
++ tsk->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role);
++
++ /* ignore additional mmap checks for processes that are writable
++ by the default ACL */
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ tsk->is_writable = 1;
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ tsk->is_writable = 1;
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Assigning special role:%s subject:%s to process (%s:%d)\n", tsk->role->rolename,
++ tsk->acl->filename, tsk->comm, task_pid_nr(tsk));
++#endif
++
++out_unlock:
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ return;
++}
++
++
+static void
+gr_log_learn(const struct dentry *dentry, const struct vfsmount *mnt, const __u32 mode)
+{
@@ -63366,6 +62545,67 @@ index 0000000..35b85f2
+ return;
+}
+
++static void
++gr_set_proc_res(struct task_struct *task)
++{
++ struct acl_subject_label *proc;
++ unsigned short i;
++
++ proc = task->acl;
++
++ if (proc->mode & (GR_LEARN | GR_INHERITLEARN))
++ return;
++
++ for (i = 0; i < RLIM_NLIMITS; i++) {
++ if (!(proc->resmask & (1U << i)))
++ continue;
++
++ task->signal->rlim[i].rlim_cur = proc->res[i].rlim_cur;
++ task->signal->rlim[i].rlim_max = proc->res[i].rlim_max;
++
++ if (i == RLIMIT_CPU)
++ update_rlimit_cpu(task, proc->res[i].rlim_cur);
++ }
++
++ return;
++}
++
++/* both of the below must be called with
++ rcu_read_lock();
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++*/
++
++void __gr_apply_subject_to_task(const struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj)
++{
++ struct acl_object_label *obj;
++ struct file *filp;
++
++ filp = task->exec_file;
++
++ task->acl = subj;
++ task->is_writable = 0;
++ /* ignore additional mmap checks for processes that are writable
++ by the default ACL */
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, state->default_role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ task->is_writable = 1;
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
++ if (unlikely(obj->mode & GR_WRITE))
++ task->is_writable = 1;
++
++ gr_set_proc_res(task);
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "gr_set_acls for (%s:%d): role:%s, subject:%s\n", task->comm, task_pid_nr(task), task->role->rolename, task->acl->filename);
++#endif
++}
++
++static void gr_apply_subject_to_task(struct task_struct *task, struct acl_subject_label *subj)
++{
++ __gr_apply_subject_to_task(&running_polstate, task, subj);
++}
++
+__u32
+gr_search_file(const struct dentry * dentry, const __u32 mode,
+ const struct vfsmount * mnt)
@@ -63395,7 +62635,7 @@ index 0000000..35b85f2
+ task->role = current->role;
+ rcu_read_lock();
+ read_lock(&grsec_exec_file_lock);
-+ gr_apply_subject_to_task(task);
++ gr_apply_subject_to_task(task, NULL);
+ read_unlock(&grsec_exec_file_lock);
+ rcu_read_unlock();
+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_INIT_TRANSFER_MSG);
@@ -63590,45 +62830,23 @@ index 0000000..35b85f2
+void
+gr_copy_label(struct task_struct *tsk)
+{
-+ tsk->signal->used_accept = 0;
-+ tsk->acl_sp_role = 0;
-+ tsk->acl_role_id = current->acl_role_id;
-+ tsk->acl = current->acl;
-+ tsk->role = current->role;
-+ tsk->signal->curr_ip = current->signal->curr_ip;
-+ tsk->signal->saved_ip = current->signal->saved_ip;
-+ if (current->exec_file)
-+ get_file(current->exec_file);
-+ tsk->exec_file = current->exec_file;
-+ tsk->is_writable = current->is_writable;
-+ if (unlikely(current->signal->used_accept)) {
-+ current->signal->curr_ip = 0;
-+ current->signal->saved_ip = 0;
-+ }
-+
-+ return;
-+}
-+
-+static void
-+gr_set_proc_res(struct task_struct *task)
-+{
-+ struct acl_subject_label *proc;
-+ unsigned short i;
-+
-+ proc = task->acl;
-+
-+ if (proc->mode & (GR_LEARN | GR_INHERITLEARN))
-+ return;
-+
-+ for (i = 0; i < RLIM_NLIMITS; i++) {
-+ if (!(proc->resmask & (1U << i)))
-+ continue;
-+
-+ task->signal->rlim[i].rlim_cur = proc->res[i].rlim_cur;
-+ task->signal->rlim[i].rlim_max = proc->res[i].rlim_max;
++ struct task_struct *p = current;
+
-+ if (i == RLIMIT_CPU)
-+ update_rlimit_cpu(task, proc->res[i].rlim_cur);
++ tsk->inherited = p->inherited;
++ tsk->acl_sp_role = 0;
++ tsk->acl_role_id = p->acl_role_id;
++ tsk->acl = p->acl;
++ tsk->role = p->role;
++ tsk->signal->used_accept = 0;
++ tsk->signal->curr_ip = p->signal->curr_ip;
++ tsk->signal->saved_ip = p->signal->saved_ip;
++ if (p->exec_file)
++ get_file(p->exec_file);
++ tsk->exec_file = p->exec_file;
++ tsk->is_writable = p->is_writable;
++ if (unlikely(p->signal->used_accept)) {
++ p->signal->curr_ip = 0;
++ p->signal->saved_ip = 0;
+ }
+
+ return;
@@ -63807,11 +63025,15 @@ index 0000000..35b85f2
+
+ /* kernel process, we'll give them the kernel role */
+ if (unlikely(!filp)) {
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
++ task->role = running_polstate.kernel_role;
++ task->acl = running_polstate.kernel_role->root_label;
+ return;
-+ } else if (!task->role || !(task->role->roletype & GR_ROLE_SPECIAL))
++ } else if (!task->role || !(task->role->roletype & GR_ROLE_SPECIAL)) {
++ /* save the current ip at time of role lookup so that the proper
++ IP will be learned for role_allowed_ip */
++ task->signal->saved_ip = task->signal->curr_ip;
+ role = lookup_acl_role_label(task, uid, gid);
++ }
+
+ /* don't change the role if we're not a privileged process */
+ if (role && task->role != role &&
@@ -63834,13 +63056,15 @@ index 0000000..35b85f2
+ (subj == task->acl)))
+ task->acl = subj;
+
++ /* leave task->inherited unaffected */
++
+ task->role = role;
+
+ task->is_writable = 0;
+
+ /* ignore additional mmap checks for processes that are writable
+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
+ if (unlikely(obj->mode & GR_WRITE))
+ task->is_writable = 1;
+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
@@ -63906,14 +63130,18 @@ index 0000000..35b85f2
+ task->acl = obj->nested;
+ else
+ task->acl = newacl;
-+ } else if (retmode & GR_INHERIT && retmode & GR_AUDIT_INHERIT)
-+ gr_log_str_fs(GR_DO_AUDIT, GR_INHERIT_ACL_MSG, task->acl->filename, dentry, mnt);
++ task->inherited = 0;
++ } else {
++ task->inherited = 1;
++ if (retmode & GR_INHERIT && retmode & GR_AUDIT_INHERIT)
++ gr_log_str_fs(GR_DO_AUDIT, GR_INHERIT_ACL_MSG, task->acl->filename, dentry, mnt);
++ }
+
+ task->is_writable = 0;
+
+ /* ignore additional mmap checks for processes that are writable
+ by the default ACL */
-+ obj = chk_obj_label(dentry, mnt, default_role->root_label);
++ obj = chk_obj_label(dentry, mnt, running_polstate.default_role->root_label);
+ if (unlikely(obj->mode & GR_WRITE))
+ task->is_writable = 1;
+ obj = chk_obj_label(dentry, mnt, task->role->root_label);
@@ -64056,10 +63284,10 @@ index 0000000..35b85f2
+update_inodev_entry(const ino_t oldinode, const dev_t olddevice,
+ const ino_t newinode, const dev_t newdevice)
+{
-+ unsigned int index = gr_fhash(oldinode, olddevice, inodev_set.i_size);
++ unsigned int index = gr_fhash(oldinode, olddevice, running_polstate.inodev_set.i_size);
+ struct inodev_entry *match;
+
-+ match = inodev_set.i_hash[index];
++ match = running_polstate.inodev_set.i_hash[index];
+
+ while (match && (match->nentry->inode != oldinode ||
+ match->nentry->device != olddevice || !match->nentry->deleted))
@@ -64069,7 +63297,7 @@ index 0000000..35b85f2
+ && (match->nentry->device == olddevice) &&
+ match->nentry->deleted) {
+ if (match->prev == NULL) {
-+ inodev_set.i_hash[index] = match->next;
++ running_polstate.inodev_set.i_hash[index] = match->next;
+ if (match->next != NULL)
+ match->next->prev = NULL;
+ } else {
@@ -64226,593 +63454,6 @@ index 0000000..35b85f2
+ return;
+}
+
-+static int
-+lookup_special_role_auth(__u16 mode, const char *rolename, unsigned char **salt,
-+ unsigned char **sum)
-+{
-+ struct acl_role_label *r;
-+ struct role_allowed_ip *ipp;
-+ struct role_transition *trans;
-+ unsigned int i;
-+ int found = 0;
-+ u32 curr_ip = current->signal->curr_ip;
-+
-+ current->signal->saved_ip = curr_ip;
-+
-+ /* check transition table */
-+
-+ for (trans = current->role->transitions; trans; trans = trans->next) {
-+ if (!strcmp(rolename, trans->rolename)) {
-+ found = 1;
-+ break;
-+ }
-+ }
-+
-+ if (!found)
-+ return 0;
-+
-+ /* handle special roles that do not require authentication
-+ and check ip */
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (!strcmp(rolename, r->rolename) &&
-+ (r->roletype & GR_ROLE_SPECIAL)) {
-+ found = 0;
-+ if (r->allowed_ips != NULL) {
-+ for (ipp = r->allowed_ips; ipp; ipp = ipp->next) {
-+ if ((ntohl(curr_ip) & ipp->netmask) ==
-+ (ntohl(ipp->addr) & ipp->netmask))
-+ found = 1;
-+ }
-+ } else
-+ found = 2;
-+ if (!found)
-+ return 0;
-+
-+ if (((mode == GR_SPROLE) && (r->roletype & GR_ROLE_NOPW)) ||
-+ ((mode == GR_SPROLEPAM) && (r->roletype & GR_ROLE_PAM))) {
-+ *salt = NULL;
-+ *sum = NULL;
-+ return 1;
-+ }
-+ }
-+ FOR_EACH_ROLE_END(r)
-+
-+ for (i = 0; i < num_sprole_pws; i++) {
-+ if (!strcmp(rolename, acl_special_roles[i]->rolename)) {
-+ *salt = acl_special_roles[i]->salt;
-+ *sum = acl_special_roles[i]->sum;
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+assign_special_role(char *rolename)
-+{
-+ struct acl_object_label *obj;
-+ struct acl_role_label *r;
-+ struct acl_role_label *assigned = NULL;
-+ struct task_struct *tsk;
-+ struct file *filp;
-+
-+ FOR_EACH_ROLE_START(r)
-+ if (!strcmp(rolename, r->rolename) &&
-+ (r->roletype & GR_ROLE_SPECIAL)) {
-+ assigned = r;
-+ break;
-+ }
-+ FOR_EACH_ROLE_END(r)
-+
-+ if (!assigned)
-+ return;
-+
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+
-+ tsk = current->real_parent;
-+ if (tsk == NULL)
-+ goto out_unlock;
-+
-+ filp = tsk->exec_file;
-+ if (filp == NULL)
-+ goto out_unlock;
-+
-+ tsk->is_writable = 0;
-+
-+ tsk->acl_sp_role = 1;
-+ tsk->acl_role_id = ++acl_sp_role_value;
-+ tsk->role = assigned;
-+ tsk->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role);
-+
-+ /* ignore additional mmap checks for processes that are writable
-+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ tsk->is_writable = 1;
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, tsk->role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ tsk->is_writable = 1;
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Assigning special role:%s subject:%s to process (%s:%d)\n", tsk->role->rolename, tsk->acl->filename, tsk->comm, tsk->pid);
-+#endif
-+
-+out_unlock:
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ return;
-+}
-+
-+int gr_check_secure_terminal(struct task_struct *task)
-+{
-+ struct task_struct *p, *p2, *p3;
-+ struct files_struct *files;
-+ struct fdtable *fdt;
-+ struct file *our_file = NULL, *file;
-+ int i;
-+
-+ if (task->signal->tty == NULL)
-+ return 1;
-+
-+ files = get_files_struct(task);
-+ if (files != NULL) {
-+ rcu_read_lock();
-+ fdt = files_fdtable(files);
-+ for (i=0; i < fdt->max_fds; i++) {
-+ file = fcheck_files(files, i);
-+ if (file && (our_file == NULL) && (file->private_data == task->signal->tty)) {
-+ get_file(file);
-+ our_file = file;
-+ }
-+ }
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ }
-+
-+ if (our_file == NULL)
-+ return 1;
-+
-+ read_lock(&tasklist_lock);
-+ do_each_thread(p2, p) {
-+ files = get_files_struct(p);
-+ if (files == NULL ||
-+ (p->signal && p->signal->tty == task->signal->tty)) {
-+ if (files != NULL)
-+ put_files_struct(files);
-+ continue;
-+ }
-+ rcu_read_lock();
-+ fdt = files_fdtable(files);
-+ for (i=0; i < fdt->max_fds; i++) {
-+ file = fcheck_files(files, i);
-+ if (file && S_ISCHR(file->f_path.dentry->d_inode->i_mode) &&
-+ file->f_path.dentry->d_inode->i_rdev == our_file->f_path.dentry->d_inode->i_rdev) {
-+ p3 = task;
-+ while (p3->pid > 0) {
-+ if (p3 == p)
-+ break;
-+ p3 = p3->real_parent;
-+ }
-+ if (p3 == p)
-+ break;
-+ gr_log_ttysniff(GR_DONT_AUDIT_GOOD, GR_TTYSNIFF_ACL_MSG, p);
-+ gr_handle_alertkill(p);
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ read_unlock(&tasklist_lock);
-+ fput(our_file);
-+ return 0;
-+ }
-+ }
-+ rcu_read_unlock();
-+ put_files_struct(files);
-+ } while_each_thread(p2, p);
-+ read_unlock(&tasklist_lock);
-+
-+ fput(our_file);
-+ return 1;
-+}
-+
-+static int gr_rbac_disable(void *unused)
-+{
-+ pax_open_kernel();
-+ gr_status &= ~GR_READY;
-+ pax_close_kernel();
-+
-+ return 0;
-+}
-+
-+ssize_t
-+write_grsec_handler(struct file *file, const char __user * buf, size_t count, loff_t *ppos)
-+{
-+ struct gr_arg_wrapper uwrap;
-+ unsigned char *sprole_salt = NULL;
-+ unsigned char *sprole_sum = NULL;
-+ int error = 0;
-+ int error2 = 0;
-+ size_t req_count = 0;
-+
-+ mutex_lock(&gr_dev_mutex);
-+
-+ if ((gr_status & GR_READY) && !(current->acl->mode & GR_KERNELAUTH)) {
-+ error = -EPERM;
-+ goto out;
-+ }
-+
-+#ifdef CONFIG_COMPAT
-+ pax_open_kernel();
-+ if (is_compat_task()) {
-+ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_compat;
-+ copy_gr_arg = &copy_gr_arg_compat;
-+ copy_acl_object_label = &copy_acl_object_label_compat;
-+ copy_acl_subject_label = &copy_acl_subject_label_compat;
-+ copy_acl_role_label = &copy_acl_role_label_compat;
-+ copy_acl_ip_label = &copy_acl_ip_label_compat;
-+ copy_role_allowed_ip = &copy_role_allowed_ip_compat;
-+ copy_role_transition = &copy_role_transition_compat;
-+ copy_sprole_pw = &copy_sprole_pw_compat;
-+ copy_gr_hash_struct = &copy_gr_hash_struct_compat;
-+ copy_pointer_from_array = &copy_pointer_from_array_compat;
-+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat;
-+ } else {
-+ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_normal;
-+ copy_gr_arg = &copy_gr_arg_normal;
-+ copy_acl_object_label = &copy_acl_object_label_normal;
-+ copy_acl_subject_label = &copy_acl_subject_label_normal;
-+ copy_acl_role_label = &copy_acl_role_label_normal;
-+ copy_acl_ip_label = &copy_acl_ip_label_normal;
-+ copy_role_allowed_ip = &copy_role_allowed_ip_normal;
-+ copy_role_transition = &copy_role_transition_normal;
-+ copy_sprole_pw = &copy_sprole_pw_normal;
-+ copy_gr_hash_struct = &copy_gr_hash_struct_normal;
-+ copy_pointer_from_array = &copy_pointer_from_array_normal;
-+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_normal;
-+ }
-+ pax_close_kernel();
-+#endif
-+
-+ req_count = get_gr_arg_wrapper_size();
-+
-+ if (count != req_count) {
-+ gr_log_int_int(GR_DONT_AUDIT_GOOD, GR_DEV_ACL_MSG, (int)count, (int)req_count);
-+ error = -EINVAL;
-+ goto out;
-+ }
-+
-+
-+ if (gr_auth_expires && time_after_eq(get_seconds(), gr_auth_expires)) {
-+ gr_auth_expires = 0;
-+ gr_auth_attempts = 0;
-+ }
-+
-+ error = copy_gr_arg_wrapper(buf, &uwrap);
-+ if (error)
-+ goto out;
-+
-+ error = copy_gr_arg(uwrap.arg, gr_usermode);
-+ if (error)
-+ goto out;
-+
-+ if (gr_usermode->mode != GR_SPROLE && gr_usermode->mode != GR_SPROLEPAM &&
-+ gr_auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
-+ time_after(gr_auth_expires, get_seconds())) {
-+ error = -EBUSY;
-+ goto out;
-+ }
-+
-+ /* if non-root trying to do anything other than use a special role,
-+ do not attempt authentication, do not count towards authentication
-+ locking
-+ */
-+
-+ if (gr_usermode->mode != GR_SPROLE && gr_usermode->mode != GR_STATUS &&
-+ gr_usermode->mode != GR_UNSPROLE && gr_usermode->mode != GR_SPROLEPAM &&
-+ current_uid()) {
-+ error = -EPERM;
-+ goto out;
-+ }
-+
-+ /* ensure pw and special role name are null terminated */
-+
-+ gr_usermode->pw[GR_PW_LEN - 1] = '\0';
-+ gr_usermode->sp_role[GR_SPROLE_LEN - 1] = '\0';
-+
-+ /* Okay.
-+ * We have our enough of the argument structure..(we have yet
-+ * to copy_from_user the tables themselves) . Copy the tables
-+ * only if we need them, i.e. for loading operations. */
-+
-+ switch (gr_usermode->mode) {
-+ case GR_STATUS:
-+ if (gr_status & GR_READY) {
-+ error = 1;
-+ if (!gr_check_secure_terminal(current))
-+ error = 3;
-+ } else
-+ error = 2;
-+ goto out;
-+ case GR_SHUTDOWN:
-+ if ((gr_status & GR_READY)
-+ && !(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ stop_machine(gr_rbac_disable, NULL, NULL);
-+ free_variables();
-+ memset(gr_usermode, 0, sizeof (struct gr_arg));
-+ memset(gr_system_salt, 0, GR_SALT_LEN);
-+ memset(gr_system_sum, 0, GR_SHA_LEN);
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTS_ACL_MSG);
-+ } else if (gr_status & GR_READY) {
-+ gr_log_noargs(GR_DONT_AUDIT, GR_SHUTF_ACL_MSG);
-+ error = -EPERM;
-+ } else {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTI_ACL_MSG);
-+ error = -EAGAIN;
-+ }
-+ break;
-+ case GR_ENABLE:
-+ if (!(gr_status & GR_READY) && !(error2 = gracl_init(gr_usermode)))
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_ENABLE_ACL_MSG, GR_VERSION);
-+ else {
-+ if (gr_status & GR_READY)
-+ error = -EAGAIN;
-+ else
-+ error = error2;
-+ gr_log_str(GR_DONT_AUDIT, GR_ENABLEF_ACL_MSG, GR_VERSION);
-+ }
-+ break;
-+ case GR_RELOAD:
-+ if (!(gr_status & GR_READY)) {
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOADI_ACL_MSG, GR_VERSION);
-+ error = -EAGAIN;
-+ } else if (!(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ stop_machine(gr_rbac_disable, NULL, NULL);
-+ free_variables();
-+ error2 = gracl_init(gr_usermode);
-+ if (!error2)
-+ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOAD_ACL_MSG, GR_VERSION);
-+ else {
-+ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
-+ error = error2;
-+ }
-+ } else {
-+ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
-+ error = -EPERM;
-+ }
-+ break;
-+ case GR_SEGVMOD:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (!(chkpw(gr_usermode, gr_system_salt, gr_system_sum))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODS_ACL_MSG);
-+ if (gr_usermode->segv_device && gr_usermode->segv_inode) {
-+ struct acl_subject_label *segvacl;
-+ segvacl =
-+ lookup_acl_subj_label(gr_usermode->segv_inode,
-+ gr_usermode->segv_device,
-+ current->role);
-+ if (segvacl) {
-+ segvacl->crashes = 0;
-+ segvacl->expires = 0;
-+ }
-+ } else if (gr_find_uid(gr_usermode->segv_uid) >= 0) {
-+ gr_remove_uid(gr_usermode->segv_uid);
-+ }
-+ } else {
-+ gr_log_noargs(GR_DONT_AUDIT, GR_SEGVMODF_ACL_MSG);
-+ error = -EPERM;
-+ }
-+ break;
-+ case GR_SPROLE:
-+ case GR_SPROLEPAM:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SPROLEI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (current->role->expires && time_after_eq(get_seconds(), current->role->expires)) {
-+ current->role->expires = 0;
-+ current->role->auth_attempts = 0;
-+ }
-+
-+ if (current->role->auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
-+ time_after(current->role->expires, get_seconds())) {
-+ error = -EBUSY;
-+ goto out;
-+ }
-+
-+ if (lookup_special_role_auth
-+ (gr_usermode->mode, gr_usermode->sp_role, &sprole_salt, &sprole_sum)
-+ && ((!sprole_salt && !sprole_sum)
-+ || !(chkpw(gr_usermode, sprole_salt, sprole_sum)))) {
-+ char *p = "";
-+ assign_special_role(gr_usermode->sp_role);
-+ read_lock(&tasklist_lock);
-+ if (current->real_parent)
-+ p = current->real_parent->role->rolename;
-+ read_unlock(&tasklist_lock);
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_SPROLES_ACL_MSG,
-+ p, acl_sp_role_value);
-+ } else {
-+ gr_log_str(GR_DONT_AUDIT, GR_SPROLEF_ACL_MSG, gr_usermode->sp_role);
-+ error = -EPERM;
-+ if(!(current->role->auth_attempts++))
-+ current->role->expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
-+
-+ goto out;
-+ }
-+ break;
-+ case GR_UNSPROLE:
-+ if (unlikely(!(gr_status & GR_READY))) {
-+ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_UNSPROLEI_ACL_MSG);
-+ error = -EAGAIN;
-+ break;
-+ }
-+
-+ if (current->role->roletype & GR_ROLE_SPECIAL) {
-+ char *p = "";
-+ int i = 0;
-+
-+ read_lock(&tasklist_lock);
-+ if (current->real_parent) {
-+ p = current->real_parent->role->rolename;
-+ i = current->real_parent->acl_role_id;
-+ }
-+ read_unlock(&tasklist_lock);
-+
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_UNSPROLES_ACL_MSG, p, i);
-+ gr_set_acls(1);
-+ } else {
-+ error = -EPERM;
-+ goto out;
-+ }
-+ break;
-+ default:
-+ gr_log_int(GR_DONT_AUDIT, GR_INVMODE_ACL_MSG, gr_usermode->mode);
-+ error = -EINVAL;
-+ break;
-+ }
-+
-+ if (error != -EPERM)
-+ goto out;
-+
-+ if(!(gr_auth_attempts++))
-+ gr_auth_expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
-+
-+ out:
-+ mutex_unlock(&gr_dev_mutex);
-+
-+ if (!error)
-+ error = req_count;
-+
-+ return error;
-+}
-+
-+/* must be called with
-+ rcu_read_lock();
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+*/
-+int gr_apply_subject_to_task(struct task_struct *task)
-+{
-+ struct acl_object_label *obj;
-+ char *tmpname;
-+ struct acl_subject_label *tmpsubj;
-+ struct file *filp;
-+ struct name_entry *nmatch;
-+
-+ filp = task->exec_file;
-+ if (filp == NULL)
-+ return 0;
-+
-+ /* the following is to apply the correct subject
-+ on binaries running when the RBAC system
-+ is enabled, when the binaries have been
-+ replaced or deleted since their execution
-+ -----
-+ when the RBAC system starts, the inode/dev
-+ from exec_file will be one the RBAC system
-+ is unaware of. It only knows the inode/dev
-+ of the present file on disk, or the absence
-+ of it.
-+ */
-+ preempt_disable();
-+ tmpname = gr_to_filename_rbac(filp->f_path.dentry, filp->f_path.mnt);
-+
-+ nmatch = lookup_name_entry(tmpname);
-+ preempt_enable();
-+ tmpsubj = NULL;
-+ if (nmatch) {
-+ if (nmatch->deleted)
-+ tmpsubj = lookup_acl_subj_label_deleted(nmatch->inode, nmatch->device, task->role);
-+ else
-+ tmpsubj = lookup_acl_subj_label(nmatch->inode, nmatch->device, task->role);
-+ if (tmpsubj != NULL)
-+ task->acl = tmpsubj;
-+ }
-+ if (tmpsubj == NULL)
-+ task->acl = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt,
-+ task->role);
-+ if (task->acl) {
-+ task->is_writable = 0;
-+ /* ignore additional mmap checks for processes that are writable
-+ by the default ACL */
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ task->is_writable = 1;
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, task->role->root_label);
-+ if (unlikely(obj->mode & GR_WRITE))
-+ task->is_writable = 1;
-+
-+ gr_set_proc_res(task);
-+
-+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "gr_set_acls for (%s:%d): role:%s, subject:%s\n", task->comm, task->pid, task->role->rolename, task->acl->filename);
-+#endif
-+ } else {
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+
-+int
-+gr_set_acls(const int type)
-+{
-+ struct task_struct *task, *task2;
-+ struct acl_role_label *role = current->role;
-+ __u16 acl_role_id = current->acl_role_id;
-+ const struct cred *cred;
-+ int ret;
-+
-+ rcu_read_lock();
-+ read_lock(&tasklist_lock);
-+ read_lock(&grsec_exec_file_lock);
-+ do_each_thread(task2, task) {
-+ /* check to see if we're called from the exit handler,
-+ if so, only replace ACLs that have inherited the admin
-+ ACL */
-+
-+ if (type && (task->role != role ||
-+ task->acl_role_id != acl_role_id))
-+ continue;
-+
-+ task->acl_role_id = 0;
-+ task->acl_sp_role = 0;
-+
-+ if (task->exec_file) {
-+ cred = __task_cred(task);
-+ task->role = lookup_acl_role_label(task, cred->uid, cred->gid);
-+ ret = gr_apply_subject_to_task(task);
-+ if (ret) {
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ rcu_read_unlock();
-+ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_DEFACL_MSG, task->comm, task->pid);
-+ return ret;
-+ }
-+ } else {
-+ // it's a kernel process
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
-+#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
-+ task->acl->mode &= ~GR_PROCFIND;
-+#endif
-+ }
-+ } while_each_thread(task2, task);
-+ read_unlock(&grsec_exec_file_lock);
-+ read_unlock(&tasklist_lock);
-+ rcu_read_unlock();
-+
-+ return 0;
-+}
-+
+void
+gr_learn_resource(const struct task_struct *task,
+ const int res, const unsigned long wanted, const int gt)
@@ -65272,7 +63913,7 @@ index 0000000..35b85f2
+
+ if (gr_status & GR_READY && !(task->acl->mode & GR_OVERRIDE) &&
+ !task->is_writable && S_ISREG(filp->f_path.dentry->d_inode->i_mode) && (filp->f_path.mnt != shm_mnt || (filp->f_path.dentry->d_inode->i_nlink > 0))) {
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, default_role->root_label);
++ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
+ obj2 = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt,
+ task->role->root_label);
+ if (unlikely((obj->mode & GR_WRITE) || (obj2->mode & GR_WRITE))) {
@@ -65386,15 +64027,6 @@ index 0000000..35b85f2
+ return;
+}
+
-+void gr_set_kernel_label(struct task_struct *task)
-+{
-+ if (gr_status & GR_READY) {
-+ task->role = kernel_role;
-+ task->acl = kernel_role->root_label;
-+ }
-+ return;
-+}
-+
+#ifdef CONFIG_TASKSTATS
+int gr_is_taskstats_denied(int pid)
+{
@@ -65549,7 +64181,6 @@ index 0000000..35b85f2
+EXPORT_SYMBOL(gr_acl_is_enabled);
+#endif
+EXPORT_SYMBOL(gr_learn_resource);
-+EXPORT_SYMBOL(gr_set_kernel_label);
+#ifdef CONFIG_SECURITY
+EXPORT_SYMBOL(gr_check_user_change);
+EXPORT_SYMBOL(gr_check_group_change);
@@ -65557,7 +64188,7 @@ index 0000000..35b85f2
+
diff --git a/grsecurity/gracl_alloc.c b/grsecurity/gracl_alloc.c
new file mode 100644
-index 0000000..34fefda
+index 0000000..18ffbbd
--- /dev/null
+++ b/grsecurity/gracl_alloc.c
@@ -0,0 +1,105 @@
@@ -65568,19 +64199,18 @@ index 0000000..34fefda
+#include <linux/gracl.h>
+#include <linux/grsecurity.h>
+
-+static unsigned long alloc_stack_next = 1;
-+static unsigned long alloc_stack_size = 1;
-+static void **alloc_stack;
++static struct gr_alloc_state __current_alloc_state = { 1, 1, NULL };
++struct gr_alloc_state *current_alloc_state = &__current_alloc_state;
+
+static __inline__ int
+alloc_pop(void)
+{
-+ if (alloc_stack_next == 1)
++ if (current_alloc_state->alloc_stack_next == 1)
+ return 0;
+
-+ kfree(alloc_stack[alloc_stack_next - 2]);
++ kfree(current_alloc_state->alloc_stack[current_alloc_state->alloc_stack_next - 2]);
+
-+ alloc_stack_next--;
++ current_alloc_state->alloc_stack_next--;
+
+ return 1;
+}
@@ -65588,12 +64218,12 @@ index 0000000..34fefda
+static __inline__ int
+alloc_push(void *buf)
+{
-+ if (alloc_stack_next >= alloc_stack_size)
++ if (current_alloc_state->alloc_stack_next >= current_alloc_state->alloc_stack_size)
+ return 1;
+
-+ alloc_stack[alloc_stack_next - 1] = buf;
++ current_alloc_state->alloc_stack[current_alloc_state->alloc_stack_next - 1] = buf;
+
-+ alloc_stack_next++;
++ current_alloc_state->alloc_stack_next++;
+
+ return 0;
+}
@@ -65631,21 +64261,21 @@ index 0000000..34fefda
+void
+acl_free_all(void)
+{
-+ if (gr_acl_is_enabled() || !alloc_stack)
++ if (!current_alloc_state->alloc_stack)
+ return;
+
+ while (alloc_pop()) ;
+
-+ if (alloc_stack) {
-+ if ((alloc_stack_size * sizeof (void *)) <= PAGE_SIZE)
-+ kfree(alloc_stack);
++ if (current_alloc_state->alloc_stack) {
++ if ((current_alloc_state->alloc_stack_size * sizeof (void *)) <= PAGE_SIZE)
++ kfree(current_alloc_state->alloc_stack);
+ else
-+ vfree(alloc_stack);
++ vfree(current_alloc_state->alloc_stack);
+ }
+
-+ alloc_stack = NULL;
-+ alloc_stack_size = 1;
-+ alloc_stack_next = 1;
++ current_alloc_state->alloc_stack = NULL;
++ current_alloc_state->alloc_stack_size = 1;
++ current_alloc_state->alloc_stack_next = 1;
+
+ return;
+}
@@ -65654,14 +64284,15 @@ index 0000000..34fefda
+acl_alloc_stack_init(unsigned long size)
+{
+ if ((size * sizeof (void *)) <= PAGE_SIZE)
-+ alloc_stack =
++ current_alloc_state->alloc_stack =
+ (void **) kmalloc(size * sizeof (void *), GFP_KERNEL);
+ else
-+ alloc_stack = (void **) vmalloc(size * sizeof (void *));
++ current_alloc_state->alloc_stack = (void **) vmalloc(size * sizeof (void *));
+
-+ alloc_stack_size = size;
++ current_alloc_state->alloc_stack_size = size;
++ current_alloc_state->alloc_stack_next = 1;
+
-+ if (!alloc_stack)
++ if (!current_alloc_state->alloc_stack)
+ return 0;
+ else
+ return 1;
@@ -65775,10 +64406,10 @@ index 0000000..955ddfb
+
diff --git a/grsecurity/gracl_compat.c b/grsecurity/gracl_compat.c
new file mode 100644
-index 0000000..a43dd06
+index 0000000..ca25605
--- /dev/null
+++ b/grsecurity/gracl_compat.c
-@@ -0,0 +1,269 @@
+@@ -0,0 +1,270 @@
+#include <linux/kernel.h>
+#include <linux/gracl.h>
+#include <linux/compat.h>
@@ -65793,7 +64424,8 @@ index 0000000..a43dd06
+ if (copy_from_user(&uwrapcompat, buf, sizeof(uwrapcompat)))
+ return -EFAULT;
+
-+ if ((uwrapcompat.version != GRSECURITY_VERSION) ||
++ if (((uwrapcompat.version != GRSECURITY_VERSION) &&
++ (uwrapcompat.version != 0x2901)) ||
+ (uwrapcompat.size != sizeof(struct gr_arg_compat)))
+ return -EINVAL;
+
@@ -67090,6 +65722,1836 @@ index 0000000..25f54ef
+ .release = close_learn,
+ .poll = poll_learn,
+};
+diff --git a/grsecurity/gracl_policy.c b/grsecurity/gracl_policy.c
+new file mode 100644
+index 0000000..dbe4f3a
+--- /dev/null
++++ b/grsecurity/gracl_policy.c
+@@ -0,0 +1,1824 @@
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/file.h>
++#include <linux/fs.h>
++#include <linux/namei.h>
++#include <linux/mount.h>
++#include <linux/tty.h>
++#include <linux/proc_fs.h>
++#include <linux/lglock.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <linux/types.h>
++#include <linux/sysctl.h>
++#include <linux/netdevice.h>
++#include <linux/ptrace.h>
++#include <linux/gracl.h>
++#include <linux/gralloc.h>
++#include <linux/security.h>
++#include <linux/grinternal.h>
++#include <linux/pid_namespace.h>
++#include <linux/stop_machine.h>
++#include <linux/fdtable.h>
++#include <linux/percpu.h>
++#include <linux/lglock.h>
++#include <linux/hugetlb.h>
++#include <linux/posix-timers.h>
++
++#include <asm/uaccess.h>
++#include <asm/errno.h>
++#include <asm/mman.h>
++
++extern struct gr_policy_state *polstate;
++
++#define FOR_EACH_ROLE_START(role) \
++ role = polstate->role_list; \
++ while (role) {
++
++#define FOR_EACH_ROLE_END(role) \
++ role = role->prev; \
++ }
++
++struct path gr_real_root;
++
++extern struct gr_alloc_state *current_alloc_state;
++
++u16 acl_sp_role_value;
++
++static DEFINE_MUTEX(gr_dev_mutex);
++
++extern int chkpw(struct gr_arg *entry, unsigned char *salt, unsigned char *sum);
++extern void gr_clear_learn_entries(void);
++
++static struct gr_arg gr_usermode;
++static unsigned char gr_system_salt[GR_SALT_LEN];
++static unsigned char gr_system_sum[GR_SHA_LEN];
++
++static unsigned int gr_auth_attempts = 0;
++static unsigned long gr_auth_expires = 0UL;
++
++struct acl_object_label *fakefs_obj_rw;
++struct acl_object_label *fakefs_obj_rwx;
++
++extern int gr_init_uidset(void);
++extern void gr_free_uidset(void);
++extern void gr_remove_uid(uid_t uid);
++extern int gr_find_uid(uid_t uid);
++
++extern void __gr_apply_subject_to_task(struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj);
++extern int gr_streq(const char *a, const char *b, const unsigned int lena, const unsigned int lenb);
++extern void __insert_inodev_entry(const struct gr_policy_state *state, struct inodev_entry *entry);
++extern struct acl_role_label *__lookup_acl_role_label(const struct gr_policy_state *state, const struct task_struct *task, const uid_t uid, const gid_t gid);
++extern void insert_acl_obj_label(struct acl_object_label *obj, struct acl_subject_label *subj);
++extern void insert_acl_subj_label(struct acl_subject_label *obj, struct acl_role_label *role);
++extern struct name_entry * __lookup_name_entry(const struct gr_policy_state *state, const char *name);
++extern char *gr_to_filename_rbac(const struct dentry *dentry, const struct vfsmount *mnt);
++extern struct acl_subject_label *lookup_acl_subj_label(const ino_t ino, const dev_t dev, const struct acl_role_label *role);
++extern struct acl_subject_label *lookup_acl_subj_label_deleted(const ino_t ino, const dev_t dev, const struct acl_role_label *role);
++extern void assign_special_role(const char *rolename);
++extern struct acl_subject_label *chk_subj_label(const struct dentry *l_dentry, const struct vfsmount *l_mnt, const struct acl_role_label *role);
++extern int gr_rbac_disable(void *unused);
++extern void gr_enable_rbac_system(void);
++
++static int copy_acl_object_label_normal(struct acl_object_label *obj, const struct acl_object_label *userp)
++{
++ if (copy_from_user(obj, userp, sizeof(struct acl_object_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_ip_label_normal(struct acl_ip_label *ip, const struct acl_ip_label *userp)
++{
++ if (copy_from_user(ip, userp, sizeof(struct acl_ip_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_subject_label_normal(struct acl_subject_label *subj, const struct acl_subject_label *userp)
++{
++ if (copy_from_user(subj, userp, sizeof(struct acl_subject_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_acl_role_label_normal(struct acl_role_label *role, const struct acl_role_label *userp)
++{
++ if (copy_from_user(role, userp, sizeof(struct acl_role_label)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_role_allowed_ip_normal(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp)
++{
++ if (copy_from_user(roleip, userp, sizeof(struct role_allowed_ip)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_sprole_pw_normal(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp)
++{
++ if (copy_from_user(pw, userp + idx, sizeof(struct sprole_pw)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_gr_hash_struct_normal(struct gr_hash_struct *hash, const struct gr_hash_struct *userp)
++{
++ if (copy_from_user(hash, userp, sizeof(struct gr_hash_struct)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_role_transition_normal(struct role_transition *trans, const struct role_transition *userp)
++{
++ if (copy_from_user(trans, userp, sizeof(struct role_transition)))
++ return -EFAULT;
++
++ return 0;
++}
++
++int copy_pointer_from_array_normal(void *ptr, unsigned long idx, const void *userp)
++{
++ if (copy_from_user(ptr, userp + (idx * sizeof(void *)), sizeof(void *)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int copy_gr_arg_wrapper_normal(const char __user *buf, struct gr_arg_wrapper *uwrap)
++{
++ if (copy_from_user(uwrap, buf, sizeof (struct gr_arg_wrapper)))
++ return -EFAULT;
++
++ if (((uwrap->version != GRSECURITY_VERSION) &&
++ (uwrap->version != 0x2901)) ||
++ (uwrap->size != sizeof(struct gr_arg)))
++ return -EINVAL;
++
++ return 0;
++}
++
++static int copy_gr_arg_normal(const struct gr_arg __user *buf, struct gr_arg *arg)
++{
++ if (copy_from_user(arg, buf, sizeof (struct gr_arg)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static size_t get_gr_arg_wrapper_size_normal(void)
++{
++ return sizeof(struct gr_arg_wrapper);
++}
++
++#ifdef CONFIG_COMPAT
++extern int copy_gr_arg_wrapper_compat(const char *buf, struct gr_arg_wrapper *uwrap);
++extern int copy_gr_arg_compat(const struct gr_arg __user *buf, struct gr_arg *arg);
++extern int copy_acl_object_label_compat(struct acl_object_label *obj, const struct acl_object_label *userp);
++extern int copy_acl_subject_label_compat(struct acl_subject_label *subj, const struct acl_subject_label *userp);
++extern int copy_acl_role_label_compat(struct acl_role_label *role, const struct acl_role_label *userp);
++extern int copy_role_allowed_ip_compat(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp);
++extern int copy_role_transition_compat(struct role_transition *trans, const struct role_transition *userp);
++extern int copy_gr_hash_struct_compat(struct gr_hash_struct *hash, const struct gr_hash_struct *userp);
++extern int copy_pointer_from_array_compat(void *ptr, unsigned long idx, const void *userp);
++extern int copy_acl_ip_label_compat(struct acl_ip_label *ip, const struct acl_ip_label *userp);
++extern int copy_sprole_pw_compat(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp);
++extern size_t get_gr_arg_wrapper_size_compat(void);
++
++int (* copy_gr_arg_wrapper)(const char *buf, struct gr_arg_wrapper *uwrap) __read_only;
++int (* copy_gr_arg)(const struct gr_arg *buf, struct gr_arg *arg) __read_only;
++int (* copy_acl_object_label)(struct acl_object_label *obj, const struct acl_object_label *userp) __read_only;
++int (* copy_acl_subject_label)(struct acl_subject_label *subj, const struct acl_subject_label *userp) __read_only;
++int (* copy_acl_role_label)(struct acl_role_label *role, const struct acl_role_label *userp) __read_only;
++int (* copy_acl_ip_label)(struct acl_ip_label *ip, const struct acl_ip_label *userp) __read_only;
++int (* copy_pointer_from_array)(void *ptr, unsigned long idx, const void *userp) __read_only;
++int (* copy_sprole_pw)(struct sprole_pw *pw, unsigned long idx, const struct sprole_pw *userp) __read_only;
++int (* copy_gr_hash_struct)(struct gr_hash_struct *hash, const struct gr_hash_struct *userp) __read_only;
++int (* copy_role_transition)(struct role_transition *trans, const struct role_transition *userp) __read_only;
++int (* copy_role_allowed_ip)(struct role_allowed_ip *roleip, const struct role_allowed_ip *userp) __read_only;
++size_t (* get_gr_arg_wrapper_size)(void) __read_only;
++
++#else
++#define copy_gr_arg_wrapper copy_gr_arg_wrapper_normal
++#define copy_gr_arg copy_gr_arg_normal
++#define copy_gr_hash_struct copy_gr_hash_struct_normal
++#define copy_acl_object_label copy_acl_object_label_normal
++#define copy_acl_subject_label copy_acl_subject_label_normal
++#define copy_acl_role_label copy_acl_role_label_normal
++#define copy_acl_ip_label copy_acl_ip_label_normal
++#define copy_pointer_from_array copy_pointer_from_array_normal
++#define copy_sprole_pw copy_sprole_pw_normal
++#define copy_role_transition copy_role_transition_normal
++#define copy_role_allowed_ip copy_role_allowed_ip_normal
++#define get_gr_arg_wrapper_size get_gr_arg_wrapper_size_normal
++#endif
++
++static struct acl_subject_label *
++lookup_subject_map(const struct acl_subject_label *userp)
++{
++ unsigned int index = gr_shash(userp, polstate->subj_map_set.s_size);
++ struct subject_map *match;
++
++ match = polstate->subj_map_set.s_hash[index];
++
++ while (match && match->user != userp)
++ match = match->next;
++
++ if (match != NULL)
++ return match->kernel;
++ else
++ return NULL;
++}
++
++static void
++insert_subj_map_entry(struct subject_map *subjmap)
++{
++ unsigned int index = gr_shash(subjmap->user, polstate->subj_map_set.s_size);
++ struct subject_map **curr;
++
++ subjmap->prev = NULL;
++
++ curr = &polstate->subj_map_set.s_hash[index];
++ if (*curr != NULL)
++ (*curr)->prev = subjmap;
++
++ subjmap->next = *curr;
++ *curr = subjmap;
++
++ return;
++}
++
++static void
++__insert_acl_role_label(struct acl_role_label *role, uid_t uidgid)
++{
++ unsigned int index =
++ gr_rhash(uidgid, role->roletype & (GR_ROLE_USER | GR_ROLE_GROUP), polstate->acl_role_set.r_size);
++ struct acl_role_label **curr;
++ struct acl_role_label *tmp, *tmp2;
++
++ curr = &polstate->acl_role_set.r_hash[index];
++
++ /* simple case, slot is empty, just set it to our role */
++ if (*curr == NULL) {
++ *curr = role;
++ } else {
++ /* example:
++ 1 -> 2 -> 3 (adding 2 -> 3 to here)
++ 2 -> 3
++ */
++ /* first check to see if we can already be reached via this slot */
++ tmp = *curr;
++ while (tmp && tmp != role)
++ tmp = tmp->next;
++ if (tmp == role) {
++ /* we don't need to add ourselves to this slot's chain */
++ return;
++ }
++ /* we need to add ourselves to this chain, two cases */
++ if (role->next == NULL) {
++ /* simple case, append the current chain to our role */
++ role->next = *curr;
++ *curr = role;
++ } else {
++ /* 1 -> 2 -> 3 -> 4
++ 2 -> 3 -> 4
++ 3 -> 4 (adding 1 -> 2 -> 3 -> 4 to here)
++ */
++ /* trickier case: walk our role's chain until we find
++ the role for the start of the current slot's chain */
++ tmp = role;
++ tmp2 = *curr;
++ while (tmp->next && tmp->next != tmp2)
++ tmp = tmp->next;
++ if (tmp->next == tmp2) {
++ /* from example above, we found 3, so just
++ replace this slot's chain with ours */
++ *curr = role;
++ } else {
++ /* we didn't find a subset of our role's chain
++ in the current slot's chain, so append their
++ chain to ours, and set us as the first role in
++ the slot's chain
++
++ we could fold this case with the case above,
++ but making it explicit for clarity
++ */
++ tmp->next = tmp2;
++ *curr = role;
++ }
++ }
++ }
++
++ return;
++}
++
++static void
++insert_acl_role_label(struct acl_role_label *role)
++{
++ int i;
++
++ if (polstate->role_list == NULL) {
++ polstate->role_list = role;
++ role->prev = NULL;
++ } else {
++ role->prev = polstate->role_list;
++ polstate->role_list = role;
++ }
++
++ /* used for hash chains */
++ role->next = NULL;
++
++ if (role->roletype & GR_ROLE_DOMAIN) {
++ for (i = 0; i < role->domain_child_num; i++)
++ __insert_acl_role_label(role, role->domain_children[i]);
++ } else
++ __insert_acl_role_label(role, role->uidgid);
++}
++
++static int
++insert_name_entry(char *name, const ino_t inode, const dev_t device, __u8 deleted)
++{
++ struct name_entry **curr, *nentry;
++ struct inodev_entry *ientry;
++ unsigned int len = strlen(name);
++ unsigned int key = full_name_hash(name, len);
++ unsigned int index = key % polstate->name_set.n_size;
++
++ curr = &polstate->name_set.n_hash[index];
++
++ while (*curr && ((*curr)->key != key || !gr_streq((*curr)->name, name, (*curr)->len, len)))
++ curr = &((*curr)->next);
++
++ if (*curr != NULL)
++ return 1;
++
++ nentry = acl_alloc(sizeof (struct name_entry));
++ if (nentry == NULL)
++ return 0;
++ ientry = acl_alloc(sizeof (struct inodev_entry));
++ if (ientry == NULL)
++ return 0;
++ ientry->nentry = nentry;
++
++ nentry->key = key;
++ nentry->name = name;
++ nentry->inode = inode;
++ nentry->device = device;
++ nentry->len = len;
++ nentry->deleted = deleted;
++
++ nentry->prev = NULL;
++ curr = &polstate->name_set.n_hash[index];
++ if (*curr != NULL)
++ (*curr)->prev = nentry;
++ nentry->next = *curr;
++ *curr = nentry;
++
++ /* insert us into the table searchable by inode/dev */
++ __insert_inodev_entry(polstate, ientry);
++
++ return 1;
++}
++
++/* allocating chained hash tables, so optimal size is where lambda ~ 1 */
++
++static void *
++create_table(__u32 * len, int elementsize)
++{
++ unsigned int table_sizes[] = {
++ 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381,
++ 32749, 65521, 131071, 262139, 524287, 1048573, 2097143,
++ 4194301, 8388593, 16777213, 33554393, 67108859
++ };
++ void *newtable = NULL;
++ unsigned int pwr = 0;
++
++ while ((pwr < ((sizeof (table_sizes) / sizeof (table_sizes[0])) - 1)) &&
++ table_sizes[pwr] <= *len)
++ pwr++;
++
++ if (table_sizes[pwr] <= *len || (table_sizes[pwr] > ULONG_MAX / elementsize))
++ return newtable;
++
++ if ((table_sizes[pwr] * elementsize) <= PAGE_SIZE)
++ newtable =
++ kmalloc(table_sizes[pwr] * elementsize, GFP_KERNEL);
++ else
++ newtable = vmalloc(table_sizes[pwr] * elementsize);
++
++ *len = table_sizes[pwr];
++
++ return newtable;
++}
++
++static int
++init_variables(const struct gr_arg *arg, bool reload)
++{
++ struct task_struct *reaper = init_pid_ns.child_reaper;
++ unsigned int stacksize;
++
++ polstate->subj_map_set.s_size = arg->role_db.num_subjects;
++ polstate->acl_role_set.r_size = arg->role_db.num_roles + arg->role_db.num_domain_children;
++ polstate->name_set.n_size = arg->role_db.num_objects;
++ polstate->inodev_set.i_size = arg->role_db.num_objects;
++
++ if (!polstate->subj_map_set.s_size || !polstate->acl_role_set.r_size ||
++ !polstate->name_set.n_size || !polstate->inodev_set.i_size)
++ return 1;
++
++ if (!reload) {
++ if (!gr_init_uidset())
++ return 1;
++ }
++
++ /* set up the stack that holds allocation info */
++
++ stacksize = arg->role_db.num_pointers + 5;
++
++ if (!acl_alloc_stack_init(stacksize))
++ return 1;
++
++ if (!reload) {
++ /* grab reference for the real root dentry and vfsmount */
++ get_fs_root(reaper->fs, &gr_real_root);
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", __get_dev(gr_real_root.dentry), gr_real_root.dentry->d_inode->i_ino);
++#endif
++
++ fakefs_obj_rw = acl_alloc(sizeof(struct acl_object_label));
++ if (fakefs_obj_rw == NULL)
++ return 1;
++ fakefs_obj_rw->mode = GR_FIND | GR_READ | GR_WRITE;
++
++ fakefs_obj_rwx = acl_alloc(sizeof(struct acl_object_label));
++ if (fakefs_obj_rwx == NULL)
++ return 1;
++ fakefs_obj_rwx->mode = GR_FIND | GR_READ | GR_WRITE | GR_EXEC;
++ }
++
++ polstate->subj_map_set.s_hash =
++ (struct subject_map **) create_table(&polstate->subj_map_set.s_size, sizeof(void *));
++ polstate->acl_role_set.r_hash =
++ (struct acl_role_label **) create_table(&polstate->acl_role_set.r_size, sizeof(void *));
++ polstate->name_set.n_hash = (struct name_entry **) create_table(&polstate->name_set.n_size, sizeof(void *));
++ polstate->inodev_set.i_hash =
++ (struct inodev_entry **) create_table(&polstate->inodev_set.i_size, sizeof(void *));
++
++ if (!polstate->subj_map_set.s_hash || !polstate->acl_role_set.r_hash ||
++ !polstate->name_set.n_hash || !polstate->inodev_set.i_hash)
++ return 1;
++
++ memset(polstate->subj_map_set.s_hash, 0,
++ sizeof(struct subject_map *) * polstate->subj_map_set.s_size);
++ memset(polstate->acl_role_set.r_hash, 0,
++ sizeof (struct acl_role_label *) * polstate->acl_role_set.r_size);
++ memset(polstate->name_set.n_hash, 0,
++ sizeof (struct name_entry *) * polstate->name_set.n_size);
++ memset(polstate->inodev_set.i_hash, 0,
++ sizeof (struct inodev_entry *) * polstate->inodev_set.i_size);
++
++ return 0;
++}
++
++/* free information not needed after startup
++ currently contains user->kernel pointer mappings for subjects
++*/
++
++static void
++free_init_variables(void)
++{
++ __u32 i;
++
++ if (polstate->subj_map_set.s_hash) {
++ for (i = 0; i < polstate->subj_map_set.s_size; i++) {
++ if (polstate->subj_map_set.s_hash[i]) {
++ kfree(polstate->subj_map_set.s_hash[i]);
++ polstate->subj_map_set.s_hash[i] = NULL;
++ }
++ }
++
++ if ((polstate->subj_map_set.s_size * sizeof (struct subject_map *)) <=
++ PAGE_SIZE)
++ kfree(polstate->subj_map_set.s_hash);
++ else
++ vfree(polstate->subj_map_set.s_hash);
++ }
++
++ return;
++}
++
++static void
++free_variables(bool reload)
++{
++ struct acl_subject_label *s;
++ struct acl_role_label *r;
++ struct task_struct *task, *task2;
++ unsigned int x;
++
++ if (!reload) {
++ gr_clear_learn_entries();
++
++ read_lock(&tasklist_lock);
++ do_each_thread(task2, task) {
++ task->acl_sp_role = 0;
++ task->acl_role_id = 0;
++ task->inherited = 0;
++ task->acl = NULL;
++ task->role = NULL;
++ } while_each_thread(task2, task);
++ read_unlock(&tasklist_lock);
++
++ /* release the reference to the real root dentry and vfsmount */
++ path_put(&gr_real_root);
++ memset(&gr_real_root, 0, sizeof(gr_real_root));
++ }
++
++ /* free all object hash tables */
++
++ FOR_EACH_ROLE_START(r)
++ if (r->subj_hash == NULL)
++ goto next_role;
++ FOR_EACH_SUBJECT_START(r, s, x)
++ if (s->obj_hash == NULL)
++ break;
++ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
++ kfree(s->obj_hash);
++ else
++ vfree(s->obj_hash);
++ FOR_EACH_SUBJECT_END(s, x)
++ FOR_EACH_NESTED_SUBJECT_START(r, s)
++ if (s->obj_hash == NULL)
++ break;
++ if ((s->obj_hash_size * sizeof (struct acl_object_label *)) <= PAGE_SIZE)
++ kfree(s->obj_hash);
++ else
++ vfree(s->obj_hash);
++ FOR_EACH_NESTED_SUBJECT_END(s)
++ if ((r->subj_hash_size * sizeof (struct acl_subject_label *)) <= PAGE_SIZE)
++ kfree(r->subj_hash);
++ else
++ vfree(r->subj_hash);
++ r->subj_hash = NULL;
++next_role:
++ FOR_EACH_ROLE_END(r)
++
++ acl_free_all();
++
++ if (polstate->acl_role_set.r_hash) {
++ if ((polstate->acl_role_set.r_size * sizeof (struct acl_role_label *)) <=
++ PAGE_SIZE)
++ kfree(polstate->acl_role_set.r_hash);
++ else
++ vfree(polstate->acl_role_set.r_hash);
++ }
++ if (polstate->name_set.n_hash) {
++ if ((polstate->name_set.n_size * sizeof (struct name_entry *)) <=
++ PAGE_SIZE)
++ kfree(polstate->name_set.n_hash);
++ else
++ vfree(polstate->name_set.n_hash);
++ }
++
++ if (polstate->inodev_set.i_hash) {
++ if ((polstate->inodev_set.i_size * sizeof (struct inodev_entry *)) <=
++ PAGE_SIZE)
++ kfree(polstate->inodev_set.i_hash);
++ else
++ vfree(polstate->inodev_set.i_hash);
++ }
++
++ if (!reload)
++ gr_free_uidset();
++
++ memset(&polstate->name_set, 0, sizeof (struct name_db));
++ memset(&polstate->inodev_set, 0, sizeof (struct inodev_db));
++ memset(&polstate->acl_role_set, 0, sizeof (struct acl_role_db));
++ memset(&polstate->subj_map_set, 0, sizeof (struct acl_subj_map_db));
++
++ polstate->default_role = NULL;
++ polstate->kernel_role = NULL;
++ polstate->role_list = NULL;
++
++ return;
++}
++
++static struct acl_subject_label *
++do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied);
++
++static int alloc_and_copy_string(char **name, unsigned int maxlen)
++{
++ unsigned int len = strnlen_user(*name, maxlen);
++ char *tmp;
++
++ if (!len || len >= maxlen)
++ return -EINVAL;
++
++ if ((tmp = (char *) acl_alloc(len)) == NULL)
++ return -ENOMEM;
++
++ if (copy_from_user(tmp, *name, len))
++ return -EFAULT;
++
++ tmp[len-1] = '\0';
++ *name = tmp;
++
++ return 0;
++}
++
++static int
++copy_user_glob(struct acl_object_label *obj)
++{
++ struct acl_object_label *g_tmp, **guser;
++ int error;
++
++ if (obj->globbed == NULL)
++ return 0;
++
++ guser = &obj->globbed;
++ while (*guser) {
++ g_tmp = (struct acl_object_label *)
++ acl_alloc(sizeof (struct acl_object_label));
++ if (g_tmp == NULL)
++ return -ENOMEM;
++
++ if (copy_acl_object_label(g_tmp, *guser))
++ return -EFAULT;
++
++ error = alloc_and_copy_string(&g_tmp->filename, PATH_MAX);
++ if (error)
++ return error;
++
++ *guser = g_tmp;
++ guser = &(g_tmp->next);
++ }
++
++ return 0;
++}
++
++static int
++copy_user_objs(struct acl_object_label *userp, struct acl_subject_label *subj,
++ struct acl_role_label *role)
++{
++ struct acl_object_label *o_tmp;
++ int ret;
++
++ while (userp) {
++ if ((o_tmp = (struct acl_object_label *)
++ acl_alloc(sizeof (struct acl_object_label))) == NULL)
++ return -ENOMEM;
++
++ if (copy_acl_object_label(o_tmp, userp))
++ return -EFAULT;
++
++ userp = o_tmp->prev;
++
++ ret = alloc_and_copy_string(&o_tmp->filename, PATH_MAX);
++ if (ret)
++ return ret;
++
++ insert_acl_obj_label(o_tmp, subj);
++ if (!insert_name_entry(o_tmp->filename, o_tmp->inode,
++ o_tmp->device, (o_tmp->mode & GR_DELETED) ? 1 : 0))
++ return -ENOMEM;
++
++ ret = copy_user_glob(o_tmp);
++ if (ret)
++ return ret;
++
++ if (o_tmp->nested) {
++ int already_copied;
++
++ o_tmp->nested = do_copy_user_subj(o_tmp->nested, role, &already_copied);
++ if (IS_ERR(o_tmp->nested))
++ return PTR_ERR(o_tmp->nested);
++
++ /* insert into nested subject list if we haven't copied this one yet
++ to prevent duplicate entries */
++ if (!already_copied) {
++ o_tmp->nested->next = role->hash->first;
++ role->hash->first = o_tmp->nested;
++ }
++ }
++ }
++
++ return 0;
++}
++
++static __u32
++count_user_subjs(struct acl_subject_label *userp)
++{
++ struct acl_subject_label s_tmp;
++ __u32 num = 0;
++
++ while (userp) {
++ if (copy_acl_subject_label(&s_tmp, userp))
++ break;
++
++ userp = s_tmp.prev;
++ }
++
++ return num;
++}
++
++static int
++copy_user_allowedips(struct acl_role_label *rolep)
++{
++ struct role_allowed_ip *ruserip, *rtmp = NULL, *rlast;
++
++ ruserip = rolep->allowed_ips;
++
++ while (ruserip) {
++ rlast = rtmp;
++
++ if ((rtmp = (struct role_allowed_ip *)
++ acl_alloc(sizeof (struct role_allowed_ip))) == NULL)
++ return -ENOMEM;
++
++ if (copy_role_allowed_ip(rtmp, ruserip))
++ return -EFAULT;
++
++ ruserip = rtmp->prev;
++
++ if (!rlast) {
++ rtmp->prev = NULL;
++ rolep->allowed_ips = rtmp;
++ } else {
++ rlast->next = rtmp;
++ rtmp->prev = rlast;
++ }
++
++ if (!ruserip)
++ rtmp->next = NULL;
++ }
++
++ return 0;
++}
++
++static int
++copy_user_transitions(struct acl_role_label *rolep)
++{
++ struct role_transition *rusertp, *rtmp = NULL, *rlast;
++ int error;
++
++ rusertp = rolep->transitions;
++
++ while (rusertp) {
++ rlast = rtmp;
++
++ if ((rtmp = (struct role_transition *)
++ acl_alloc(sizeof (struct role_transition))) == NULL)
++ return -ENOMEM;
++
++ if (copy_role_transition(rtmp, rusertp))
++ return -EFAULT;
++
++ rusertp = rtmp->prev;
++
++ error = alloc_and_copy_string(&rtmp->rolename, GR_SPROLE_LEN);
++ if (error)
++ return error;
++
++ if (!rlast) {
++ rtmp->prev = NULL;
++ rolep->transitions = rtmp;
++ } else {
++ rlast->next = rtmp;
++ rtmp->prev = rlast;
++ }
++
++ if (!rusertp)
++ rtmp->next = NULL;
++ }
++
++ return 0;
++}
++
++static __u32 count_user_objs(const struct acl_object_label __user *userp)
++{
++ struct acl_object_label o_tmp;
++ __u32 num = 0;
++
++ while (userp) {
++ if (copy_acl_object_label(&o_tmp, userp))
++ break;
++
++ userp = o_tmp.prev;
++ num++;
++ }
++
++ return num;
++}
++
++static struct acl_subject_label *
++do_copy_user_subj(struct acl_subject_label *userp, struct acl_role_label *role, int *already_copied)
++{
++ struct acl_subject_label *s_tmp = NULL, *s_tmp2;
++ __u32 num_objs;
++ struct acl_ip_label **i_tmp, *i_utmp2;
++ struct gr_hash_struct ghash;
++ struct subject_map *subjmap;
++ unsigned int i_num;
++ int err;
++
++ if (already_copied != NULL)
++ *already_copied = 0;
++
++ s_tmp = lookup_subject_map(userp);
++
++ /* we've already copied this subject into the kernel, just return
++ the reference to it, and don't copy it over again
++ */
++ if (s_tmp) {
++ if (already_copied != NULL)
++ *already_copied = 1;
++ return(s_tmp);
++ }
++
++ if ((s_tmp = (struct acl_subject_label *)
++ acl_alloc(sizeof (struct acl_subject_label))) == NULL)
++ return ERR_PTR(-ENOMEM);
++
++ subjmap = (struct subject_map *)kmalloc(sizeof (struct subject_map), GFP_KERNEL);
++ if (subjmap == NULL)
++ return ERR_PTR(-ENOMEM);
++
++ subjmap->user = userp;
++ subjmap->kernel = s_tmp;
++ insert_subj_map_entry(subjmap);
++
++ if (copy_acl_subject_label(s_tmp, userp))
++ return ERR_PTR(-EFAULT);
++
++ err = alloc_and_copy_string(&s_tmp->filename, PATH_MAX);
++ if (err)
++ return ERR_PTR(err);
++
++ if (!strcmp(s_tmp->filename, "/"))
++ role->root_label = s_tmp;
++
++ if (copy_gr_hash_struct(&ghash, s_tmp->hash))
++ return ERR_PTR(-EFAULT);
++
++ /* copy user and group transition tables */
++
++ if (s_tmp->user_trans_num) {
++ uid_t *uidlist;
++
++ uidlist = (uid_t *)acl_alloc_num(s_tmp->user_trans_num, sizeof(uid_t));
++ if (uidlist == NULL)
++ return ERR_PTR(-ENOMEM);
++ if (copy_from_user(uidlist, s_tmp->user_transitions, s_tmp->user_trans_num * sizeof(uid_t)))
++ return ERR_PTR(-EFAULT);
++
++ s_tmp->user_transitions = uidlist;
++ }
++
++ if (s_tmp->group_trans_num) {
++ gid_t *gidlist;
++
++ gidlist = (gid_t *)acl_alloc_num(s_tmp->group_trans_num, sizeof(gid_t));
++ if (gidlist == NULL)
++ return ERR_PTR(-ENOMEM);
++ if (copy_from_user(gidlist, s_tmp->group_transitions, s_tmp->group_trans_num * sizeof(gid_t)))
++ return ERR_PTR(-EFAULT);
++
++ s_tmp->group_transitions = gidlist;
++ }
++
++ /* set up object hash table */
++ num_objs = count_user_objs(ghash.first);
++
++ s_tmp->obj_hash_size = num_objs;
++ s_tmp->obj_hash =
++ (struct acl_object_label **)
++ create_table(&(s_tmp->obj_hash_size), sizeof(void *));
++
++ if (!s_tmp->obj_hash)
++ return ERR_PTR(-ENOMEM);
++
++ memset(s_tmp->obj_hash, 0,
++ s_tmp->obj_hash_size *
++ sizeof (struct acl_object_label *));
++
++ /* add in objects */
++ err = copy_user_objs(ghash.first, s_tmp, role);
++
++ if (err)
++ return ERR_PTR(err);
++
++ /* set pointer for parent subject */
++ if (s_tmp->parent_subject) {
++ s_tmp2 = do_copy_user_subj(s_tmp->parent_subject, role, NULL);
++
++ if (IS_ERR(s_tmp2))
++ return s_tmp2;
++
++ s_tmp->parent_subject = s_tmp2;
++ }
++
++ /* add in ip acls */
++
++ if (!s_tmp->ip_num) {
++ s_tmp->ips = NULL;
++ goto insert;
++ }
++
++ i_tmp =
++ (struct acl_ip_label **) acl_alloc_num(s_tmp->ip_num,
++ sizeof (struct acl_ip_label *));
++
++ if (!i_tmp)
++ return ERR_PTR(-ENOMEM);
++
++ for (i_num = 0; i_num < s_tmp->ip_num; i_num++) {
++ *(i_tmp + i_num) =
++ (struct acl_ip_label *)
++ acl_alloc(sizeof (struct acl_ip_label));
++ if (!*(i_tmp + i_num))
++ return ERR_PTR(-ENOMEM);
++
++ if (copy_pointer_from_array(&i_utmp2, i_num, s_tmp->ips))
++ return ERR_PTR(-EFAULT);
++
++ if (copy_acl_ip_label(*(i_tmp + i_num), i_utmp2))
++ return ERR_PTR(-EFAULT);
++
++ if ((*(i_tmp + i_num))->iface == NULL)
++ continue;
++
++ err = alloc_and_copy_string(&(*(i_tmp + i_num))->iface, IFNAMSIZ);
++ if (err)
++ return ERR_PTR(err);
++ }
++
++ s_tmp->ips = i_tmp;
++
++insert:
++ if (!insert_name_entry(s_tmp->filename, s_tmp->inode,
++ s_tmp->device, (s_tmp->mode & GR_DELETED) ? 1 : 0))
++ return ERR_PTR(-ENOMEM);
++
++ return s_tmp;
++}
++
++static int
++copy_user_subjs(struct acl_subject_label *userp, struct acl_role_label *role)
++{
++ struct acl_subject_label s_pre;
++ struct acl_subject_label * ret;
++ int err;
++
++ while (userp) {
++ if (copy_acl_subject_label(&s_pre, userp))
++ return -EFAULT;
++
++ ret = do_copy_user_subj(userp, role, NULL);
++
++ err = PTR_ERR(ret);
++ if (IS_ERR(ret))
++ return err;
++
++ insert_acl_subj_label(ret, role);
++
++ userp = s_pre.prev;
++ }
++
++ return 0;
++}
++
++static int
++copy_user_acl(struct gr_arg *arg)
++{
++ struct acl_role_label *r_tmp = NULL, **r_utmp, *r_utmp2;
++ struct acl_subject_label *subj_list;
++ struct sprole_pw *sptmp;
++ struct gr_hash_struct *ghash;
++ uid_t *domainlist;
++ unsigned int r_num;
++ int err = 0;
++ __u16 i;
++ __u32 num_subjs;
++
++ /* we need a default and kernel role */
++ if (arg->role_db.num_roles < 2)
++ return -EINVAL;
++
++ /* copy special role authentication info from userspace */
++
++ polstate->num_sprole_pws = arg->num_sprole_pws;
++ polstate->acl_special_roles = (struct sprole_pw **) acl_alloc_num(polstate->num_sprole_pws, sizeof(struct sprole_pw *));
++
++ if (!polstate->acl_special_roles && polstate->num_sprole_pws)
++ return -ENOMEM;
++
++ for (i = 0; i < polstate->num_sprole_pws; i++) {
++ sptmp = (struct sprole_pw *) acl_alloc(sizeof(struct sprole_pw));
++ if (!sptmp)
++ return -ENOMEM;
++ if (copy_sprole_pw(sptmp, i, arg->sprole_pws))
++ return -EFAULT;
++
++ err = alloc_and_copy_string((char **)&sptmp->rolename, GR_SPROLE_LEN);
++ if (err)
++ return err;
++
++#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
++ printk(KERN_ALERT "Copying special role %s\n", sptmp->rolename);
++#endif
++
++ polstate->acl_special_roles[i] = sptmp;
++ }
++
++ r_utmp = (struct acl_role_label **) arg->role_db.r_table;
++
++ for (r_num = 0; r_num < arg->role_db.num_roles; r_num++) {
++ r_tmp = acl_alloc(sizeof (struct acl_role_label));
++
++ if (!r_tmp)
++ return -ENOMEM;
++
++ if (copy_pointer_from_array(&r_utmp2, r_num, r_utmp))
++ return -EFAULT;
++
++ if (copy_acl_role_label(r_tmp, r_utmp2))
++ return -EFAULT;
++
++ err = alloc_and_copy_string(&r_tmp->rolename, GR_SPROLE_LEN);
++ if (err)
++ return err;
++
++ if (!strcmp(r_tmp->rolename, "default")
++ && (r_tmp->roletype & GR_ROLE_DEFAULT)) {
++ polstate->default_role = r_tmp;
++ } else if (!strcmp(r_tmp->rolename, ":::kernel:::")) {
++ polstate->kernel_role = r_tmp;
++ }
++
++ if ((ghash = (struct gr_hash_struct *) acl_alloc(sizeof(struct gr_hash_struct))) == NULL)
++ return -ENOMEM;
++
++ if (copy_gr_hash_struct(ghash, r_tmp->hash))
++ return -EFAULT;
++
++ r_tmp->hash = ghash;
++
++ num_subjs = count_user_subjs(r_tmp->hash->first);
++
++ r_tmp->subj_hash_size = num_subjs;
++ r_tmp->subj_hash =
++ (struct acl_subject_label **)
++ create_table(&(r_tmp->subj_hash_size), sizeof(void *));
++
++ if (!r_tmp->subj_hash)
++ return -ENOMEM;
++
++ err = copy_user_allowedips(r_tmp);
++ if (err)
++ return err;
++
++ /* copy domain info */
++ if (r_tmp->domain_children != NULL) {
++ domainlist = acl_alloc_num(r_tmp->domain_child_num, sizeof(uid_t));
++ if (domainlist == NULL)
++ return -ENOMEM;
++
++ if (copy_from_user(domainlist, r_tmp->domain_children, r_tmp->domain_child_num * sizeof(uid_t)))
++ return -EFAULT;
++
++ r_tmp->domain_children = domainlist;
++ }
++
++ err = copy_user_transitions(r_tmp);
++ if (err)
++ return err;
++
++ memset(r_tmp->subj_hash, 0,
++ r_tmp->subj_hash_size *
++ sizeof (struct acl_subject_label *));
++
++ /* acquire the list of subjects, then NULL out
++ the list prior to parsing the subjects for this role,
++ as during this parsing the list is replaced with a list
++ of *nested* subjects for the role
++ */
++ subj_list = r_tmp->hash->first;
++
++ /* set nested subject list to null */
++ r_tmp->hash->first = NULL;
++
++ err = copy_user_subjs(subj_list, r_tmp);
++
++ if (err)
++ return err;
++
++ insert_acl_role_label(r_tmp);
++ }
++
++ if (polstate->default_role == NULL || polstate->kernel_role == NULL)
++ return -EINVAL;
++
++ return err;
++}
++
++static struct acl_subject_label *gr_get_subject_for_task(struct task_struct *task, const char *filename)
++{
++ char *tmpname;
++ struct acl_subject_label *tmpsubj;
++ struct file *filp;
++ struct name_entry *nmatch;
++
++ filp = task->exec_file;
++ if (filp == NULL)
++ return NULL;
++
++ /* the following is to apply the correct subject
++ on binaries running when the RBAC system
++ is enabled, when the binaries have been
++ replaced or deleted since their execution
++ -----
++ when the RBAC system starts, the inode/dev
++ from exec_file will be one the RBAC system
++ is unaware of. It only knows the inode/dev
++ of the present file on disk, or the absence
++ of it.
++ */
++
++ if (filename)
++ nmatch = __lookup_name_entry(polstate, filename);
++ else {
++ preempt_disable();
++ tmpname = gr_to_filename_rbac(filp->f_path.dentry, filp->f_path.mnt);
++
++ nmatch = __lookup_name_entry(polstate, tmpname);
++ preempt_enable();
++ }
++ tmpsubj = NULL;
++ if (nmatch) {
++ if (nmatch->deleted)
++ tmpsubj = lookup_acl_subj_label_deleted(nmatch->inode, nmatch->device, task->role);
++ else
++ tmpsubj = lookup_acl_subj_label(nmatch->inode, nmatch->device, task->role);
++ }
++ /* this also works for the reload case -- if we don't match a potentially inherited subject
++ then we fall back to a normal lookup based on the binary's ino/dev
++ */
++ if (tmpsubj == NULL)
++ tmpsubj = chk_subj_label(filp->f_path.dentry, filp->f_path.mnt,
++ task->role);
++
++ return tmpsubj;
++}
++
++static int gracl_reload_apply_policies(void *reload)
++{
++ struct gr_reload_state *reload_state = (struct gr_reload_state *)reload;
++ struct task_struct *task, *task2;
++ struct acl_role_label *role, *rtmp;
++ struct acl_subject_label *subj;
++ const struct cred *cred;
++ int role_applied;
++ int ret = 0;
++
++ memcpy(&reload_state->oldpolicy, reload_state->oldpolicy_ptr, sizeof(struct gr_reload_state));
++ memcpy(&reload_state->oldalloc, reload_state->oldalloc_ptr, sizeof(struct gr_alloc_state));
++
++ /* first make sure we'll be able to apply the new policy cleanly */
++ do_each_thread(task2, task) {
++ if (task->exec_file == NULL)
++ continue;
++ role_applied = 0;
++ if (!reload_state->oldmode && task->role->roletype & GR_ROLE_SPECIAL) {
++ /* preserve special roles */
++ FOR_EACH_ROLE_START(role)
++ if ((role->roletype & GR_ROLE_SPECIAL) && !strcmp(task->role->rolename, role->rolename)) {
++ rtmp = task->role;
++ task->role = role;
++ role_applied = 1;
++ break;
++ }
++ FOR_EACH_ROLE_END(role)
++ }
++ if (!role_applied) {
++ cred = __task_cred(task);
++ rtmp = task->role;
++ task->role = __lookup_acl_role_label(polstate, task, cred->uid, cred->gid);
++ }
++ /* this handles non-nested inherited subjects, nested subjects will still
++ be dropped currently */
++ subj = gr_get_subject_for_task(task, task->acl->filename);
++ task->tmpacl = gr_get_subject_for_task(task, NULL);
++ /* change the role back so that we've made no modifications to the policy */
++ task->role = rtmp;
++
++ if (subj == NULL || task->tmpacl == NULL) {
++ ret = -EINVAL;
++ goto out;
++ }
++ } while_each_thread(task2, task);
++
++ /* now actually apply the policy */
++
++ do_each_thread(task2, task) {
++ if (task->exec_file) {
++ role_applied = 0;
++ if (!reload_state->oldmode && task->role->roletype & GR_ROLE_SPECIAL) {
++ /* preserve special roles */
++ FOR_EACH_ROLE_START(role)
++ if ((role->roletype & GR_ROLE_SPECIAL) && !strcmp(task->role->rolename, role->rolename)) {
++ task->role = role;
++ role_applied = 1;
++ break;
++ }
++ FOR_EACH_ROLE_END(role)
++ }
++ if (!role_applied) {
++ cred = __task_cred(task);
++ task->role = __lookup_acl_role_label(polstate, task, cred->uid, cred->gid);
++ }
++ /* this handles non-nested inherited subjects, nested subjects will still
++ be dropped currently */
++ if (!reload_state->oldmode && task->inherited)
++ subj = gr_get_subject_for_task(task, task->acl->filename);
++ else {
++ /* looked up and tagged to the task previously */
++ subj = task->tmpacl;
++ }
++ /* subj will be non-null */
++ __gr_apply_subject_to_task(polstate, task, subj);
++ if (reload_state->oldmode) {
++ task->acl_role_id = 0;
++ task->acl_sp_role = 0;
++ task->inherited = 0;
++ }
++ } else {
++ // it's a kernel process
++ task->role = polstate->kernel_role;
++ task->acl = polstate->kernel_role->root_label;
++#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
++ task->acl->mode &= ~GR_PROCFIND;
++#endif
++ }
++ } while_each_thread(task2, task);
++
++ memcpy(reload_state->oldpolicy_ptr, &reload_state->newpolicy, sizeof(struct gr_policy_state));
++ memcpy(reload_state->oldalloc_ptr, &reload_state->newalloc, sizeof(struct gr_alloc_state));
++
++out:
++
++ return ret;
++}
++
++static int gracl_reload(struct gr_arg *args, unsigned char oldmode)
++{
++ struct gr_reload_state new_reload_state = { };
++ int err;
++
++ new_reload_state.oldpolicy_ptr = polstate;
++ new_reload_state.oldalloc_ptr = current_alloc_state;
++ new_reload_state.oldmode = oldmode;
++
++ current_alloc_state = &new_reload_state.newalloc;
++ polstate = &new_reload_state.newpolicy;
++
++ /* everything relevant is now saved off, copy in the new policy */
++ if (init_variables(args, true)) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
++ err = -ENOMEM;
++ goto error;
++ }
++
++ err = copy_user_acl(args);
++ free_init_variables();
++ if (err)
++ goto error;
++ /* the new policy is copied in, with the old policy available via saved_state
++ first go through applying roles, making sure to preserve special roles
++ then apply new subjects, making sure to preserve inherited and nested subjects,
++ though currently only inherited subjects will be preserved
++ */
++ err = stop_machine(gracl_reload_apply_policies, &new_reload_state, NULL);
++ if (err)
++ goto error;
++
++ /* we've now applied the new policy, so restore the old policy state to free it */
++ polstate = &new_reload_state.oldpolicy;
++ current_alloc_state = &new_reload_state.oldalloc;
++ free_variables(true);
++
++ /* oldpolicy/oldalloc_ptr point to the new policy/alloc states as they were copied
++ to running_polstate/current_alloc_state inside stop_machine
++ */
++ err = 0;
++ goto out;
++error:
++ /* on error of loading the new policy, we'll just keep the previous
++ policy set around
++ */
++ free_variables(true);
++
++ /* doesn't affect runtime, but maintains consistent state */
++out:
++ polstate = new_reload_state.oldpolicy_ptr;
++ current_alloc_state = new_reload_state.oldalloc_ptr;
++
++ return err;
++}
++
++static int
++gracl_init(struct gr_arg *args)
++{
++ int error = 0;
++
++ memcpy(&gr_system_salt, args->salt, sizeof(gr_system_salt));
++ memcpy(&gr_system_sum, args->sum, sizeof(gr_system_sum));
++
++ if (init_variables(args, false)) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_INITF_ACL_MSG, GR_VERSION);
++ error = -ENOMEM;
++ goto out;
++ }
++
++ error = copy_user_acl(args);
++ free_init_variables();
++ if (error)
++ goto out;
++
++ error = gr_set_acls(0);
++ if (error)
++ goto out;
++
++ gr_enable_rbac_system();
++
++ return 0;
++
++out:
++ free_variables(false);
++ return error;
++}
++
++static int
++lookup_special_role_auth(__u16 mode, const char *rolename, unsigned char **salt,
++ unsigned char **sum)
++{
++ struct acl_role_label *r;
++ struct role_allowed_ip *ipp;
++ struct role_transition *trans;
++ unsigned int i;
++ int found = 0;
++ u32 curr_ip = current->signal->curr_ip;
++
++ current->signal->saved_ip = curr_ip;
++
++ /* check transition table */
++
++ for (trans = current->role->transitions; trans; trans = trans->next) {
++ if (!strcmp(rolename, trans->rolename)) {
++ found = 1;
++ break;
++ }
++ }
++
++ if (!found)
++ return 0;
++
++ /* handle special roles that do not require authentication
++ and check ip */
++
++ FOR_EACH_ROLE_START(r)
++ if (!strcmp(rolename, r->rolename) &&
++ (r->roletype & GR_ROLE_SPECIAL)) {
++ found = 0;
++ if (r->allowed_ips != NULL) {
++ for (ipp = r->allowed_ips; ipp; ipp = ipp->next) {
++ if ((ntohl(curr_ip) & ipp->netmask) ==
++ (ntohl(ipp->addr) & ipp->netmask))
++ found = 1;
++ }
++ } else
++ found = 2;
++ if (!found)
++ return 0;
++
++ if (((mode == GR_SPROLE) && (r->roletype & GR_ROLE_NOPW)) ||
++ ((mode == GR_SPROLEPAM) && (r->roletype & GR_ROLE_PAM))) {
++ *salt = NULL;
++ *sum = NULL;
++ return 1;
++ }
++ }
++ FOR_EACH_ROLE_END(r)
++
++ for (i = 0; i < polstate->num_sprole_pws; i++) {
++ if (!strcmp(rolename, polstate->acl_special_roles[i]->rolename)) {
++ *salt = polstate->acl_special_roles[i]->salt;
++ *sum = polstate->acl_special_roles[i]->sum;
++ return 1;
++ }
++ }
++
++ return 0;
++}
++
++int gr_check_secure_terminal(struct task_struct *task)
++{
++ struct task_struct *p, *p2, *p3;
++ struct files_struct *files;
++ struct fdtable *fdt;
++ struct file *our_file = NULL, *file;
++ int i;
++
++ if (task->signal->tty == NULL)
++ return 1;
++
++ files = get_files_struct(task);
++ if (files != NULL) {
++ rcu_read_lock();
++ fdt = files_fdtable(files);
++ for (i=0; i < fdt->max_fds; i++) {
++ file = fcheck_files(files, i);
++ if (file && (our_file == NULL) && (file->private_data == task->signal->tty)) {
++ get_file(file);
++ our_file = file;
++ }
++ }
++ rcu_read_unlock();
++ put_files_struct(files);
++ }
++
++ if (our_file == NULL)
++ return 1;
++
++ read_lock(&tasklist_lock);
++ do_each_thread(p2, p) {
++ files = get_files_struct(p);
++ if (files == NULL ||
++ (p->signal && p->signal->tty == task->signal->tty)) {
++ if (files != NULL)
++ put_files_struct(files);
++ continue;
++ }
++ rcu_read_lock();
++ fdt = files_fdtable(files);
++ for (i=0; i < fdt->max_fds; i++) {
++ file = fcheck_files(files, i);
++ if (file && S_ISCHR(file->f_path.dentry->d_inode->i_mode) &&
++ file->f_path.dentry->d_inode->i_rdev == our_file->f_path.dentry->d_inode->i_rdev) {
++ p3 = task;
++ while (task_pid_nr(p3) > 0) {
++ if (p3 == p)
++ break;
++ p3 = p3->real_parent;
++ }
++ if (p3 == p)
++ break;
++ gr_log_ttysniff(GR_DONT_AUDIT_GOOD, GR_TTYSNIFF_ACL_MSG, p);
++ gr_handle_alertkill(p);
++ rcu_read_unlock();
++ put_files_struct(files);
++ read_unlock(&tasklist_lock);
++ fput(our_file);
++ return 0;
++ }
++ }
++ rcu_read_unlock();
++ put_files_struct(files);
++ } while_each_thread(p2, p);
++ read_unlock(&tasklist_lock);
++
++ fput(our_file);
++ return 1;
++}
++
++ssize_t
++write_grsec_handler(struct file *file, const char __user * buf, size_t count, loff_t *ppos)
++{
++ struct gr_arg_wrapper uwrap;
++ unsigned char *sprole_salt = NULL;
++ unsigned char *sprole_sum = NULL;
++ int error = 0;
++ int error2 = 0;
++ size_t req_count = 0;
++ unsigned char oldmode = 0;
++
++ mutex_lock(&gr_dev_mutex);
++
++ if (gr_acl_is_enabled() && !(current->acl->mode & GR_KERNELAUTH)) {
++ error = -EPERM;
++ goto out;
++ }
++
++#ifdef CONFIG_COMPAT
++ pax_open_kernel();
++ if (is_compat_task()) {
++ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_compat;
++ copy_gr_arg = &copy_gr_arg_compat;
++ copy_acl_object_label = &copy_acl_object_label_compat;
++ copy_acl_subject_label = &copy_acl_subject_label_compat;
++ copy_acl_role_label = &copy_acl_role_label_compat;
++ copy_acl_ip_label = &copy_acl_ip_label_compat;
++ copy_role_allowed_ip = &copy_role_allowed_ip_compat;
++ copy_role_transition = &copy_role_transition_compat;
++ copy_sprole_pw = &copy_sprole_pw_compat;
++ copy_gr_hash_struct = &copy_gr_hash_struct_compat;
++ copy_pointer_from_array = &copy_pointer_from_array_compat;
++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat;
++ } else {
++ copy_gr_arg_wrapper = &copy_gr_arg_wrapper_normal;
++ copy_gr_arg = &copy_gr_arg_normal;
++ copy_acl_object_label = &copy_acl_object_label_normal;
++ copy_acl_subject_label = &copy_acl_subject_label_normal;
++ copy_acl_role_label = &copy_acl_role_label_normal;
++ copy_acl_ip_label = &copy_acl_ip_label_normal;
++ copy_role_allowed_ip = &copy_role_allowed_ip_normal;
++ copy_role_transition = &copy_role_transition_normal;
++ copy_sprole_pw = &copy_sprole_pw_normal;
++ copy_gr_hash_struct = &copy_gr_hash_struct_normal;
++ copy_pointer_from_array = &copy_pointer_from_array_normal;
++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_normal;
++ }
++ pax_close_kernel();
++#endif
++
++ req_count = get_gr_arg_wrapper_size();
++
++ if (count != req_count) {
++ gr_log_int_int(GR_DONT_AUDIT_GOOD, GR_DEV_ACL_MSG, (int)count, (int)req_count);
++ error = -EINVAL;
++ goto out;
++ }
++
++
++ if (gr_auth_expires && time_after_eq(get_seconds(), gr_auth_expires)) {
++ gr_auth_expires = 0;
++ gr_auth_attempts = 0;
++ }
++
++ error = copy_gr_arg_wrapper(buf, &uwrap);
++ if (error)
++ goto out;
++
++ error = copy_gr_arg(uwrap.arg, &gr_usermode);
++ if (error)
++ goto out;
++
++ if (gr_usermode.mode != GR_SPROLE && gr_usermode.mode != GR_SPROLEPAM &&
++ gr_auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
++ time_after(gr_auth_expires, get_seconds())) {
++ error = -EBUSY;
++ goto out;
++ }
++
++ /* if non-root trying to do anything other than use a special role,
++ do not attempt authentication, do not count towards authentication
++ locking
++ */
++
++ if (gr_usermode.mode != GR_SPROLE && gr_usermode.mode != GR_STATUS &&
++ gr_usermode.mode != GR_UNSPROLE && gr_usermode.mode != GR_SPROLEPAM &&
++ current_uid()) {
++ error = -EPERM;
++ goto out;
++ }
++
++ /* ensure pw and special role name are null terminated */
++
++ gr_usermode.pw[GR_PW_LEN - 1] = '\0';
++ gr_usermode.sp_role[GR_SPROLE_LEN - 1] = '\0';
++
++ /* Okay.
++ * We have our enough of the argument structure..(we have yet
++ * to copy_from_user the tables themselves) . Copy the tables
++ * only if we need them, i.e. for loading operations. */
++
++ switch (gr_usermode.mode) {
++ case GR_STATUS:
++ if (gr_acl_is_enabled()) {
++ error = 1;
++ if (!gr_check_secure_terminal(current))
++ error = 3;
++ } else
++ error = 2;
++ goto out;
++ case GR_SHUTDOWN:
++ if (gr_acl_is_enabled() && !(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ stop_machine(gr_rbac_disable, NULL, NULL);
++ free_variables(false);
++ memset(&gr_usermode, 0, sizeof(gr_usermode));
++ memset(&gr_system_salt, 0, sizeof(gr_system_salt));
++ memset(&gr_system_sum, 0, sizeof(gr_system_sum));
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTS_ACL_MSG);
++ } else if (gr_acl_is_enabled()) {
++ gr_log_noargs(GR_DONT_AUDIT, GR_SHUTF_ACL_MSG);
++ error = -EPERM;
++ } else {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SHUTI_ACL_MSG);
++ error = -EAGAIN;
++ }
++ break;
++ case GR_ENABLE:
++ if (!gr_acl_is_enabled() && !(error2 = gracl_init(&gr_usermode)))
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_ENABLE_ACL_MSG, GR_VERSION);
++ else {
++ if (gr_acl_is_enabled())
++ error = -EAGAIN;
++ else
++ error = error2;
++ gr_log_str(GR_DONT_AUDIT, GR_ENABLEF_ACL_MSG, GR_VERSION);
++ }
++ break;
++ case GR_OLDRELOAD:
++ oldmode = 1;
++ case GR_RELOAD:
++ if (!gr_acl_is_enabled()) {
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOADI_ACL_MSG, GR_VERSION);
++ error = -EAGAIN;
++ } else if (!(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ error2 = gracl_reload(&gr_usermode, oldmode);
++ if (!error2)
++ gr_log_str(GR_DONT_AUDIT_GOOD, GR_RELOAD_ACL_MSG, GR_VERSION);
++ else {
++ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
++ error = error2;
++ }
++ } else {
++ gr_log_str(GR_DONT_AUDIT, GR_RELOADF_ACL_MSG, GR_VERSION);
++ error = -EPERM;
++ }
++ break;
++ case GR_SEGVMOD:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (!(chkpw(&gr_usermode, (unsigned char *)&gr_system_salt, (unsigned char *)&gr_system_sum))) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SEGVMODS_ACL_MSG);
++ if (gr_usermode.segv_device && gr_usermode.segv_inode) {
++ struct acl_subject_label *segvacl;
++ segvacl =
++ lookup_acl_subj_label(gr_usermode.segv_inode,
++ gr_usermode.segv_device,
++ current->role);
++ if (segvacl) {
++ segvacl->crashes = 0;
++ segvacl->expires = 0;
++ }
++ } else if (gr_find_uid(gr_usermode.segv_uid) >= 0) {
++ gr_remove_uid(gr_usermode.segv_uid);
++ }
++ } else {
++ gr_log_noargs(GR_DONT_AUDIT, GR_SEGVMODF_ACL_MSG);
++ error = -EPERM;
++ }
++ break;
++ case GR_SPROLE:
++ case GR_SPROLEPAM:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_SPROLEI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (current->role->expires && time_after_eq(get_seconds(), current->role->expires)) {
++ current->role->expires = 0;
++ current->role->auth_attempts = 0;
++ }
++
++ if (current->role->auth_attempts >= CONFIG_GRKERNSEC_ACL_MAXTRIES &&
++ time_after(current->role->expires, get_seconds())) {
++ error = -EBUSY;
++ goto out;
++ }
++
++ if (lookup_special_role_auth
++ (gr_usermode.mode, gr_usermode.sp_role, &sprole_salt, &sprole_sum)
++ && ((!sprole_salt && !sprole_sum)
++ || !(chkpw(&gr_usermode, sprole_salt, sprole_sum)))) {
++ char *p = "";
++ assign_special_role(gr_usermode.sp_role);
++ read_lock(&tasklist_lock);
++ if (current->real_parent)
++ p = current->real_parent->role->rolename;
++ read_unlock(&tasklist_lock);
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_SPROLES_ACL_MSG,
++ p, acl_sp_role_value);
++ } else {
++ gr_log_str(GR_DONT_AUDIT, GR_SPROLEF_ACL_MSG, gr_usermode.sp_role);
++ error = -EPERM;
++ if(!(current->role->auth_attempts++))
++ current->role->expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
++
++ goto out;
++ }
++ break;
++ case GR_UNSPROLE:
++ if (unlikely(!gr_acl_is_enabled())) {
++ gr_log_noargs(GR_DONT_AUDIT_GOOD, GR_UNSPROLEI_ACL_MSG);
++ error = -EAGAIN;
++ break;
++ }
++
++ if (current->role->roletype & GR_ROLE_SPECIAL) {
++ char *p = "";
++ int i = 0;
++
++ read_lock(&tasklist_lock);
++ if (current->real_parent) {
++ p = current->real_parent->role->rolename;
++ i = current->real_parent->acl_role_id;
++ }
++ read_unlock(&tasklist_lock);
++
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_UNSPROLES_ACL_MSG, p, i);
++ gr_set_acls(1);
++ } else {
++ error = -EPERM;
++ goto out;
++ }
++ break;
++ default:
++ gr_log_int(GR_DONT_AUDIT, GR_INVMODE_ACL_MSG, gr_usermode.mode);
++ error = -EINVAL;
++ break;
++ }
++
++ if (error != -EPERM)
++ goto out;
++
++ if(!(gr_auth_attempts++))
++ gr_auth_expires = get_seconds() + CONFIG_GRKERNSEC_ACL_TIMEOUT;
++
++ out:
++ mutex_unlock(&gr_dev_mutex);
++
++ if (!error)
++ error = req_count;
++
++ return error;
++}
++
++int
++gr_set_acls(const int type)
++{
++ struct task_struct *task, *task2;
++ struct acl_role_label *role = current->role;
++ struct acl_subject_label *subj;
++ __u16 acl_role_id = current->acl_role_id;
++ const struct cred *cred;
++ int ret;
++
++ rcu_read_lock();
++ read_lock(&tasklist_lock);
++ read_lock(&grsec_exec_file_lock);
++ do_each_thread(task2, task) {
++ /* check to see if we're called from the exit handler,
++ if so, only replace ACLs that have inherited the admin
++ ACL */
++
++ if (type && (task->role != role ||
++ task->acl_role_id != acl_role_id))
++ continue;
++
++ task->acl_role_id = 0;
++ task->acl_sp_role = 0;
++ task->inherited = 0;
++
++ if (task->exec_file) {
++ cred = __task_cred(task);
++ task->role = __lookup_acl_role_label(polstate, task, cred->uid, cred->gid);
++ subj = gr_get_subject_for_task(task, NULL);
++ if (subj == NULL) {
++ ret = -EINVAL;
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ rcu_read_unlock();
++ gr_log_str_int(GR_DONT_AUDIT_GOOD, GR_DEFACL_MSG, task->comm, task_pid_nr(task));
++ return ret;
++ }
++ __gr_apply_subject_to_task(polstate, task, subj);
++ } else {
++ // it's a kernel process
++ task->role = polstate->kernel_role;
++ task->acl = polstate->kernel_role->root_label;
++#ifdef CONFIG_GRKERNSEC_ACL_HIDEKERN
++ task->acl->mode &= ~GR_PROCFIND;
++#endif
++ }
++ } while_each_thread(task2, task);
++ read_unlock(&grsec_exec_file_lock);
++ read_unlock(&tasklist_lock);
++ rcu_read_unlock();
++
++ return 0;
++}
diff --git a/grsecurity/gracl_res.c b/grsecurity/gracl_res.c
new file mode 100644
index 0000000..39645c9
@@ -67166,10 +67628,10 @@ index 0000000..39645c9
+}
diff --git a/grsecurity/gracl_segv.c b/grsecurity/gracl_segv.c
new file mode 100644
-index 0000000..1117026
+index 0000000..266766a
--- /dev/null
+++ b/grsecurity/gracl_segv.c
-@@ -0,0 +1,301 @@
+@@ -0,0 +1,309 @@
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <asm/uaccess.h>
@@ -67226,8 +67688,16 @@ index 0000000..1117026
+void
+gr_free_uidset(void)
+{
-+ if (uid_set)
-+ kfree(uid_set);
++ if (uid_set) {
++ struct crash_uid *tmpset;
++ spin_lock(&gr_uid_lock);
++ tmpset = uid_set;
++ uid_set = NULL;
++ uid_used = 0;
++ spin_unlock(&gr_uid_lock);
++ if (tmpset)
++ kfree(tmpset);
++ }
+
+ return;
+}
@@ -67544,7 +68014,7 @@ index 0000000..bc0be01
+}
diff --git a/grsecurity/grsec_chroot.c b/grsecurity/grsec_chroot.c
new file mode 100644
-index 0000000..8124c0d
+index 0000000..6b654b0
--- /dev/null
+++ b/grsecurity/grsec_chroot.c
@@ -0,0 +1,353 @@
@@ -67560,7 +68030,7 @@ index 0000000..8124c0d
+#include <linux/grinternal.h>
+
+#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
-+static int gr_init_ran;
++int gr_init_ran;
+#endif
+
+void gr_set_chroot_entries(struct task_struct *task, struct path *path)
@@ -67903,10 +68373,10 @@ index 0000000..8124c0d
+}
diff --git a/grsecurity/grsec_disabled.c b/grsecurity/grsec_disabled.c
new file mode 100644
-index 0000000..ac90ba1
+index 0000000..583586a
--- /dev/null
+++ b/grsecurity/grsec_disabled.c
-@@ -0,0 +1,442 @@
+@@ -0,0 +1,435 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -68310,12 +68780,6 @@ index 0000000..ac90ba1
+ return 0;
+}
+
-+void
-+gr_set_kernel_label(struct task_struct *task)
-+{
-+ return;
-+}
-+
+int
+gr_check_user_change(int real, int effective, int fs)
+{
@@ -68344,7 +68808,6 @@ index 0000000..ac90ba1
+}
+
+EXPORT_SYMBOL(gr_learn_resource);
-+EXPORT_SYMBOL(gr_set_kernel_label);
+#ifdef CONFIG_SECURITY
+EXPORT_SYMBOL(gr_check_user_change);
+EXPORT_SYMBOL(gr_check_group_change);
@@ -68575,10 +69038,10 @@ index 0000000..8ca18bf
+}
diff --git a/grsecurity/grsec_init.c b/grsecurity/grsec_init.c
new file mode 100644
-index 0000000..691c024
+index 0000000..264a9f3
--- /dev/null
+++ b/grsecurity/grsec_init.c
-@@ -0,0 +1,283 @@
+@@ -0,0 +1,268 @@
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
@@ -68657,10 +69120,6 @@ index 0000000..691c024
+char *gr_alert_log_buf;
+char *gr_audit_log_buf;
+
-+extern struct gr_arg *gr_usermode;
-+extern unsigned char *gr_system_salt;
-+extern unsigned char *gr_system_sum;
-+
+void __init
+grsecurity_init(void)
+{
@@ -68701,17 +69160,6 @@ index 0000000..691c024
+ return;
+ }
+
-+ /* allocate memory for authentication structure */
-+ gr_usermode = kmalloc(sizeof(struct gr_arg), GFP_KERNEL);
-+ gr_system_salt = kmalloc(GR_SALT_LEN, GFP_KERNEL);
-+ gr_system_sum = kmalloc(GR_SHA_LEN, GFP_KERNEL);
-+
-+ if (!gr_usermode || !gr_system_salt || !gr_system_sum) {
-+ panic("Unable to allocate grsecurity authentication structure");
-+ return;
-+ }
-+
-+
+#ifdef CONFIG_GRKERNSEC_IO
+#if !defined(CONFIG_GRKERNSEC_SYSCTL_DISTRO)
+ grsec_disable_privio = 1;
@@ -71598,6 +72046,28 @@ index acd8d4b..f2defe2 100644
extern int __register_binfmt(struct linux_binfmt *fmt, int insert);
+diff --git a/include/linux/bitops.h b/include/linux/bitops.h
+index fc8a3ff..e48401e 100644
+--- a/include/linux/bitops.h
++++ b/include/linux/bitops.h
+@@ -74,7 +74,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift)
+ * @word: value to rotate
+ * @shift: bits to roll
+ */
+-static inline __u32 rol32(__u32 word, unsigned int shift)
++static inline __u32 __intentional_overflow(-1) rol32(__u32 word, unsigned int shift)
+ {
+ return (word << shift) | (word >> (32 - shift));
+ }
+@@ -84,7 +84,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift)
+ * @word: value to rotate
+ * @shift: bits to roll
+ */
+-static inline __u32 ror32(__u32 word, unsigned int shift)
++static inline __u32 __intentional_overflow(-1) ror32(__u32 word, unsigned int shift)
+ {
+ return (word >> shift) | (word << (32 - shift));
+ }
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index ff039f0..cdf89ae 100644
--- a/include/linux/blkdev.h
@@ -71962,17 +72432,20 @@ index 320d6c9..2d1df6b 100644
#endif /* __LINUX_COMPILER_H */
diff --git a/include/linux/completion.h b/include/linux/completion.h
-index 51494e6..0fd1b61 100644
+index 51494e6..340575ab 100644
--- a/include/linux/completion.h
+++ b/include/linux/completion.h
-@@ -78,13 +78,13 @@ static inline void init_completion(struct completion *x)
+@@ -77,14 +77,14 @@ static inline void init_completion(struct completion *x)
+ }
extern void wait_for_completion(struct completion *);
- extern int wait_for_completion_interruptible(struct completion *x);
+-extern int wait_for_completion_interruptible(struct completion *x);
-extern int wait_for_completion_killable(struct completion *x);
++extern int wait_for_completion_interruptible(struct completion *x) __intentional_overflow(-1);
+extern int wait_for_completion_killable(struct completion *x) __intentional_overflow(-1);
extern unsigned long wait_for_completion_timeout(struct completion *x,
- unsigned long timeout);
+- unsigned long timeout);
++ unsigned long timeout) __intentional_overflow(-1);
extern long wait_for_completion_interruptible_timeout(
- struct completion *x, unsigned long timeout);
+ struct completion *x, unsigned long timeout) __intentional_overflow(-1);
@@ -72619,10 +73092,10 @@ index 3a76faf..c0592c7 100644
{
diff --git a/include/linux/gracl.h b/include/linux/gracl.h
new file mode 100644
-index 0000000..ebe6d72
+index 0000000..edb2cb6
--- /dev/null
+++ b/include/linux/gracl.h
-@@ -0,0 +1,319 @@
+@@ -0,0 +1,340 @@
+#ifndef GR_ACL_H
+#define GR_ACL_H
+
@@ -72634,19 +73107,20 @@ index 0000000..ebe6d72
+
+/* Major status information */
+
-+#define GR_VERSION "grsecurity 2.9.1"
-+#define GRSECURITY_VERSION 0x2901
++#define GR_VERSION "grsecurity 3.0"
++#define GRSECURITY_VERSION 0x3000
+
+enum {
+ GR_SHUTDOWN = 0,
+ GR_ENABLE = 1,
+ GR_SPROLE = 2,
-+ GR_RELOAD = 3,
++ GR_OLDRELOAD = 3,
+ GR_SEGVMOD = 4,
+ GR_STATUS = 5,
+ GR_UNSPROLE = 6,
+ GR_PASSSET = 7,
+ GR_SPROLEPAM = 8,
++ GR_RELOAD = 9,
+};
+
+/* Password setup definitions
@@ -72875,6 +73349,34 @@ index 0000000..ebe6d72
+ __u32 s_size;
+};
+
++struct gr_policy_state {
++ struct sprole_pw **acl_special_roles;
++ __u16 num_sprole_pws;
++ struct acl_role_label *kernel_role;
++ struct acl_role_label *role_list;
++ struct acl_role_label *default_role;
++ struct acl_role_db acl_role_set;
++ struct acl_subj_map_db subj_map_set;
++ struct name_db name_set;
++ struct inodev_db inodev_set;
++};
++
++struct gr_alloc_state {
++ unsigned long alloc_stack_next;
++ unsigned long alloc_stack_size;
++ void **alloc_stack;
++};
++
++struct gr_reload_state {
++ struct gr_policy_state oldpolicy;
++ struct gr_alloc_state oldalloc;
++ struct gr_policy_state newpolicy;
++ struct gr_alloc_state newalloc;
++ struct gr_policy_state *oldpolicy_ptr;
++ struct gr_alloc_state *oldalloc_ptr;
++ unsigned char oldmode;
++};
++
+/* End Data Structures Section */
+
+/* Hash functions generated by empirical testing by Brad Spengler
@@ -72906,14 +73408,6 @@ index 0000000..ebe6d72
+ return full_name_hash((const unsigned char *)name, len) % sz;
+}
+
-+#define FOR_EACH_ROLE_START(role) \
-+ role = role_list; \
-+ while (role) {
-+
-+#define FOR_EACH_ROLE_END(role) \
-+ role = role->prev; \
-+ }
-+
+#define FOR_EACH_SUBJECT_START(role,subj,iter) \
+ subj = NULL; \
+ iter = 0; \
@@ -73267,10 +73761,10 @@ index 0000000..be66033
+#endif
diff --git a/include/linux/grinternal.h b/include/linux/grinternal.h
new file mode 100644
-index 0000000..2977600
+index 0000000..44d8215
--- /dev/null
+++ b/include/linux/grinternal.h
-@@ -0,0 +1,237 @@
+@@ -0,0 +1,236 @@
+#ifndef __GRINTERNAL_H
+#define __GRINTERNAL_H
+
@@ -73293,7 +73787,6 @@ index 0000000..2977600
+int gr_check_protected_task(const struct task_struct *task);
+__u32 to_gr_audit(const __u32 reqmode);
+int gr_set_acls(const int type);
-+int gr_apply_subject_to_task(struct task_struct *task);
+int gr_acl_is_enabled(void);
+char gr_roletype_to_char(void);
+
@@ -73629,10 +74122,10 @@ index 0000000..a4396b5
+#define GR_BRUTE_SUID_MSG "bruteforce prevention initiated due to crash of %.950s against uid %u, banning suid/sgid execs for %u minutes. Please investigate the crash report for "
diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h
new file mode 100644
-index 0000000..a9a304f
+index 0000000..1a80e7d
--- /dev/null
+++ b/include/linux/grsecurity.h
-@@ -0,0 +1,223 @@
+@@ -0,0 +1,222 @@
+#ifndef GR_SECURITY_H
+#define GR_SECURITY_H
+#include <linux/fs.h>
@@ -73762,7 +74255,6 @@ index 0000000..a9a304f
+ const struct vfsmount *mnt);
+int gr_check_crash_exec(const struct file *filp);
+int gr_acl_is_enabled(void);
-+void gr_set_kernel_label(struct task_struct *task);
+void gr_set_role_label(struct task_struct *task, const uid_t uid,
+ const gid_t gid);
+int gr_set_proc_label(const struct dentry *dentry,
@@ -74107,6 +74599,23 @@ index bff29c5..7437762 100644
/*
* irq_chip specific flags
+diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
+index 265e2c3..cdd6f29 100644
+--- a/include/linux/jiffies.h
++++ b/include/linux/jiffies.h
+@@ -295,9 +295,9 @@ extern unsigned long preset_lpj;
+ */
+ extern unsigned int jiffies_to_msecs(const unsigned long j);
+ extern unsigned int jiffies_to_usecs(const unsigned long j);
+-extern unsigned long msecs_to_jiffies(const unsigned int m);
+-extern unsigned long usecs_to_jiffies(const unsigned int u);
+-extern unsigned long timespec_to_jiffies(const struct timespec *value);
++extern unsigned long msecs_to_jiffies(const unsigned int m) __intentional_overflow(-1);
++extern unsigned long usecs_to_jiffies(const unsigned int u) __intentional_overflow(-1);
++extern unsigned long timespec_to_jiffies(const struct timespec *value) __intentional_overflow(-1);
+ extern void jiffies_to_timespec(const unsigned long jiffies,
+ struct timespec *value);
+ extern unsigned long timeval_to_jiffies(const struct timeval *value);
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
index 3875719..4663bc3 100644
--- a/include/linux/kallsyms.h
@@ -74242,7 +74751,7 @@ index c4d2fc1..5df9c19 100644
extern struct kgdb_arch arch_kgdb_ops;
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
-index f8d4b27..269f55a 100644
+index f8d4b27..8560882 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -34,6 +34,8 @@ extern char modprobe_path[]; /* for sysctl */
@@ -74254,6 +74763,16 @@ index f8d4b27..269f55a 100644
#define request_module(mod...) __request_module(true, mod)
#define request_module_nowait(mod...) __request_module(false, mod)
#define try_then_request_module(x, mod...) \
+@@ -60,6 +62,9 @@ struct subprocess_info {
+ struct work_struct work;
+ struct completion *complete;
+ char *path;
++#ifdef CONFIG_GRKERNSEC
++ char *origpath;
++#endif
+ char **argv;
+ char **envp;
+ enum umh_wait wait;
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 445f978..3a02264 100644
--- a/include/linux/kobject.h
@@ -74372,7 +74891,7 @@ index 88e78de..c63979a 100644
} apparmor_audit_data;
#endif
diff --git a/include/linux/math64.h b/include/linux/math64.h
-index b8ba855..4382e1f 100644
+index b8ba855..bfdffd0 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -14,7 +14,7 @@
@@ -74389,7 +74908,7 @@ index b8ba855..4382e1f 100644
* div64_u64 - unsigned 64bit divide with 64bit divisor
*/
-static inline u64 div64_u64(u64 dividend, u64 divisor)
-+static inline u64 __intentional_overflow(0) div64_u64(u64 dividend, u64 divisor)
++static inline u64 __intentional_overflow(-1) div64_u64(u64 dividend, u64 divisor)
{
return dividend / divisor;
}
@@ -74402,6 +74921,15 @@ index b8ba855..4382e1f 100644
{
*remainder = do_div(dividend, divisor);
return dividend;
+@@ -62,7 +62,7 @@ extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);
+ #endif
+
+ #ifndef div64_u64
+-extern u64 div64_u64(u64 dividend, u64 divisor);
++extern u64 __intentional_overflow(-1) div64_u64(u64 dividend, u64 divisor);
+ #endif
+
+ #ifndef div64_s64
@@ -79,7 +79,7 @@ extern s64 div64_s64(s64 dividend, s64 divisor);
* divide.
*/
@@ -74425,7 +74953,7 @@ index 3797270..7765ede 100644
struct mca_bus {
u64 default_dma_mask;
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 305fd75..f0db13d 100644
+index 305fd75..cdbfb05 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -115,7 +115,14 @@ extern unsigned int kobjsize(const void *objp);
@@ -74595,6 +75123,15 @@ index 305fd75..f0db13d 100644
#endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
#if USE_SPLIT_PTLOCKS
+@@ -1397,7 +1412,7 @@ extern int install_special_mapping(struct mm_struct *mm,
+ unsigned long addr, unsigned long len,
+ unsigned long flags, struct page **pages);
+
+-extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
++extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long) __intentional_overflow(-1);
+
+ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+ unsigned long len, unsigned long prot,
@@ -1420,6 +1435,7 @@ out:
}
@@ -75666,7 +76203,7 @@ index 2148b12..519b820 100644
static inline void anon_vma_merge(struct vm_area_struct *vma,
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 8204898..070429f 100644
+index 8204898..d17b99e 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -101,6 +101,7 @@ struct bio_list;
@@ -75836,7 +76373,7 @@ index 8204898..070429f 100644
#ifdef CONFIG_DEBUG_MUTEXES
/* mutex deadlock detection */
struct mutex_waiter *blocked_on;
-@@ -1544,6 +1590,28 @@ struct task_struct {
+@@ -1544,6 +1590,30 @@ struct task_struct {
unsigned long default_timer_slack_ns;
struct list_head *scm_work_list;
@@ -75851,10 +76388,12 @@ index 8204898..070429f 100644
+#endif
+ struct dentry *gr_chroot_dentry;
+ struct acl_subject_label *acl;
++ struct acl_subject_label *tmpacl;
+ struct acl_role_label *role;
+ struct file *exec_file;
+ unsigned long brute_expires;
+ u16 acl_role_id;
++ u8 inherited;
+ /* is this the task that authenticated to the special role */
+ u8 acl_sp_role;
+ u8 is_writable;
@@ -75865,7 +76404,7 @@ index 8204898..070429f 100644
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
/* Index of current stored address in ret_stack */
int curr_ret_stack;
-@@ -1578,6 +1646,52 @@ struct task_struct {
+@@ -1578,6 +1648,52 @@ struct task_struct {
#endif
};
@@ -75918,7 +76457,7 @@ index 8204898..070429f 100644
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -2093,7 +2207,9 @@ void yield(void);
+@@ -2093,7 +2209,9 @@ void yield(void);
extern struct exec_domain default_exec_domain;
union thread_union {
@@ -75928,7 +76467,7 @@ index 8204898..070429f 100644
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
-@@ -2126,6 +2242,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -2126,6 +2244,7 @@ extern struct pid_namespace init_pid_ns;
*/
extern struct task_struct *find_task_by_vpid(pid_t nr);
@@ -75936,7 +76475,7 @@ index 8204898..070429f 100644
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
-@@ -2247,6 +2364,12 @@ static inline void mmdrop(struct mm_struct * mm)
+@@ -2247,6 +2366,12 @@ static inline void mmdrop(struct mm_struct * mm)
extern void mmput(struct mm_struct *);
/* Grab a reference to a task's mm, if it is not already going away */
extern struct mm_struct *get_task_mm(struct task_struct *task);
@@ -75949,16 +76488,18 @@ index 8204898..070429f 100644
/* Remove the current tasks stale references to the old mm_struct */
extern void mm_release(struct task_struct *, struct mm_struct *);
/* Allocate a new mm structure and copy contents from tsk->mm */
-@@ -2263,7 +2386,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2263,9 +2388,8 @@ extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
-extern NORET_TYPE void do_group_exit(int);
+extern __noreturn void do_group_exit(int);
- extern void daemonize(const char *, ...);
+-extern void daemonize(const char *, ...);
extern int allow_signal(int);
-@@ -2428,9 +2551,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+ extern int disallow_signal(int);
+
+@@ -2428,9 +2552,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
#endif
@@ -76181,6 +76722,19 @@ index e8c619d..99d0f1f 100644
static inline int security_real_capable(struct task_struct *tsk, struct user_namespace *ns, int cap)
{
int ret;
+diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
+index dc368b8..e895209 100644
+--- a/include/linux/semaphore.h
++++ b/include/linux/semaphore.h
+@@ -37,7 +37,7 @@ static inline void sema_init(struct semaphore *sem, int val)
+ }
+
+ extern void down(struct semaphore *sem);
+-extern int __must_check down_interruptible(struct semaphore *sem);
++extern int __must_check down_interruptible(struct semaphore *sem) __intentional_overflow(-1);
+ extern int __must_check down_killable(struct semaphore *sem);
+ extern int __must_check down_trylock(struct semaphore *sem);
+ extern int __must_check down_timeout(struct semaphore *sem, long jiffies);
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
index 0b69a46..b2ffa4c 100644
--- a/include/linux/seq_file.h
@@ -76299,7 +76853,7 @@ index efe50af..9a039e5 100644
static inline void nf_reset_trace(struct sk_buff *skb)
diff --git a/include/linux/slab.h b/include/linux/slab.h
-index a595dce..f8a18ee 100644
+index a595dce..e710d26 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -11,14 +11,29 @@
@@ -76367,26 +76921,8 @@ index a595dce..f8a18ee 100644
/*
* Allocator specific definitions. These are mainly used to establish optimized
-@@ -298,7 +327,7 @@ static inline void *kmem_cache_alloc_node(struct kmem_cache *cachep,
- */
- #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB) || \
- (defined(CONFIG_SLAB) && defined(CONFIG_TRACING))
--extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long);
-+extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long) __size_overflow(1);
- #define kmalloc_track_caller(size, flags) \
- __kmalloc_track_caller(size, flags, _RET_IP_)
- #else
-@@ -317,7 +346,7 @@ extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long);
- */
- #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB) || \
- (defined(CONFIG_SLAB) && defined(CONFIG_TRACING))
--extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long);
-+extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long) __size_overflow(1);
- #define kmalloc_node_track_caller(size, flags, node) \
- __kmalloc_node_track_caller(size, flags, node, \
- _RET_IP_)
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
-index d00e0ba..a443aff 100644
+index d00e0ba..e075bd20 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -68,10 +68,14 @@ struct kmem_cache {
@@ -76408,7 +76944,7 @@ index d00e0ba..a443aff 100644
/*
* If debugging is enabled, then the allocator can add additional
-@@ -105,11 +109,16 @@ struct cache_sizes {
+@@ -105,6 +109,11 @@ struct cache_sizes {
#ifdef CONFIG_ZONE_DMA
struct kmem_cache *cs_dmacachep;
#endif
@@ -76420,12 +76956,6 @@ index d00e0ba..a443aff 100644
};
extern struct cache_sizes malloc_sizes[];
- void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
--void *__kmalloc(size_t size, gfp_t flags);
-+void *__kmalloc(size_t size, gfp_t flags) __size_overflow(1);
-
- #ifdef CONFIG_TRACING
- extern void *kmem_cache_alloc_trace(size_t size,
@@ -152,6 +161,13 @@ found:
cachep = malloc_sizes[i].cs_dmacachep;
else
@@ -76440,15 +76970,6 @@ index d00e0ba..a443aff 100644
cachep = malloc_sizes[i].cs_cachep;
ret = kmem_cache_alloc_trace(size, cachep, flags);
-@@ -162,7 +178,7 @@ found:
- }
-
- #ifdef CONFIG_NUMA
--extern void *__kmalloc_node(size_t size, gfp_t flags, int node);
-+extern void *__kmalloc_node(size_t size, gfp_t flags, int node) __size_overflow(1);
- extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
-
- #ifdef CONFIG_TRACING
@@ -181,6 +197,7 @@ kmem_cache_alloc_node_trace(size_t size,
}
#endif
@@ -76471,30 +76992,8 @@ index d00e0ba..a443aff 100644
cachep = malloc_sizes[i].cs_cachep;
return kmem_cache_alloc_node_trace(size, cachep, flags, node);
-diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h
-index 0ec00b3..22b4715 100644
---- a/include/linux/slob_def.h
-+++ b/include/linux/slob_def.h
-@@ -9,7 +9,7 @@ static __always_inline void *kmem_cache_alloc(struct kmem_cache *cachep,
- return kmem_cache_alloc_node(cachep, flags, -1);
- }
-
--void *__kmalloc_node(size_t size, gfp_t flags, int node);
-+void *__kmalloc_node(size_t size, gfp_t flags, int node) __size_overflow(1);
-
- static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
- {
-@@ -29,7 +29,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)
- return __kmalloc_node(size, flags, -1);
- }
-
--static __always_inline void *__kmalloc(size_t size, gfp_t flags)
-+static __always_inline __size_overflow(1) void *__kmalloc(size_t size, gfp_t flags)
- {
- return kmalloc(size, flags);
- }
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
-index a32bcfd..4a77b17 100644
+index a32bcfd..f0246c3 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -89,7 +89,7 @@ struct kmem_cache {
@@ -76520,39 +77019,13 @@ index a32bcfd..4a77b17 100644
void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
-void *__kmalloc(size_t size, gfp_t flags);
-+void *__kmalloc(size_t size, gfp_t flags) __alloc_size(1) __size_overflow(1);
++void *__kmalloc(size_t size, gfp_t flags) __alloc_size(1);
-static __always_inline void *
+static __always_inline __size_overflow(1) void *
kmalloc_order(size_t size, gfp_t flags, unsigned int order)
{
void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order);
-@@ -256,7 +256,7 @@ kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order)
- }
- #endif
-
--static __always_inline void *kmalloc_large(size_t size, gfp_t flags)
-+static __always_inline __size_overflow(1) void *kmalloc_large(size_t size, gfp_t flags)
- {
- unsigned int order = get_order(size);
- return kmalloc_order_trace(size, flags, order);
-@@ -281,7 +281,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)
- }
-
- #ifdef CONFIG_NUMA
--void *__kmalloc_node(size_t size, gfp_t flags, int node);
-+void *__kmalloc_node(size_t size, gfp_t flags, int node) __size_overflow(1);
- void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
-
- #ifdef CONFIG_TRACING
-@@ -298,6 +298,7 @@ kmem_cache_alloc_node_trace(struct kmem_cache *s,
- }
- #endif
-
-+static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) __size_overflow(1);
- static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
- {
- if (__builtin_constant_p(size) &&
diff --git a/include/linux/sonet.h b/include/linux/sonet.h
index de8832d..0147b46 100644
--- a/include/linux/sonet.h
@@ -77021,7 +77494,7 @@ index 57a9723..dbe234a 100644
struct list_head {
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
-index 5ca0951..53a2fff 100644
+index 5ca0951..ab496a5 100644
--- a/include/linux/uaccess.h
+++ b/include/linux/uaccess.h
@@ -76,11 +76,11 @@ static inline unsigned long __copy_from_user_nocache(void *to,
@@ -77039,15 +77512,6 @@ index 5ca0951..53a2fff 100644
ret; \
})
-@@ -105,7 +105,7 @@ extern long __probe_kernel_read(void *dst, const void *src, size_t size);
- * Safely write to address @dst from the buffer at @src. If a kernel fault
- * happens, handle that and return -EFAULT.
- */
--extern long notrace probe_kernel_write(void *dst, const void *src, size_t size);
-+extern long notrace probe_kernel_write(void *dst, const void *src, size_t size) __size_overflow(3);
- extern long notrace __probe_kernel_write(void *dst, const void *src, size_t size);
-
- #endif /* __LINUX_UACCESS_H__ */
diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h
index 99c1b4d..562e6f3 100644
--- a/include/linux/unaligned/access_ok.h
@@ -77197,7 +77661,7 @@ index 6f8fbcf..8259001 100644
+ MODULE_GRSEC
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
-index 4bde182..dff01df 100644
+index 4bde182..943f335 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -14,6 +14,11 @@ struct vm_area_struct; /* vma defining user mapping in mm_types.h */
@@ -77212,22 +77676,11 @@ index 4bde182..dff01df 100644
/* bits [20..32] reserved for arch specific ioremap internals */
/*
-@@ -62,7 +67,7 @@ extern void *vmalloc_32_user(unsigned long size);
- extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
- extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
- unsigned long start, unsigned long end, gfp_t gfp_mask,
-- pgprot_t prot, int node, void *caller);
-+ pgprot_t prot, int node, void *caller) __size_overflow(1);
- extern void vfree(const void *addr);
-
- extern void *vmap(struct page **pages, unsigned int count,
-@@ -123,8 +128,8 @@ extern struct vm_struct *alloc_vm_area(size_t size, pte_t **ptes);
- extern void free_vm_area(struct vm_struct *area);
+@@ -124,7 +129,7 @@ extern void free_vm_area(struct vm_struct *area);
/* for /dev/kmem */
--extern long vread(char *buf, char *addr, unsigned long count);
+ extern long vread(char *buf, char *addr, unsigned long count);
-extern long vwrite(char *buf, char *addr, unsigned long count);
-+extern long vread(char *buf, char *addr, unsigned long count) __size_overflow(3);
+extern long vwrite(char *buf, char *addr, unsigned long count) __size_overflow(3);
/*
@@ -78604,7 +79057,7 @@ index 2531811..4f036c4 100644
#ifdef CONFIG_BLK_DEV_RAM
int fd;
diff --git a/init/main.c b/init/main.c
-index 5d0eb1d..8255113 100644
+index 5d0eb1d..83506bb 100644
--- a/init/main.c
+++ b/init/main.c
@@ -96,6 +96,8 @@ static inline void mark_rodata_ro(void) { }
@@ -78712,7 +79165,30 @@ index 5d0eb1d..8255113 100644
return ret;
}
-@@ -821,7 +883,7 @@ static int __init kernel_init(void * unused)
+@@ -748,6 +810,10 @@ static void run_init_process(const char *init_filename)
+ kernel_execve(init_filename, argv_init, envp_init);
+ }
+
++#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
++extern int gr_init_ran;
++#endif
++
+ /* This is a non __init function. Force it to be noinline otherwise gcc
+ * makes it inline to init() and it becomes part of init.text section
+ */
+@@ -769,6 +835,11 @@ static noinline int init_post(void)
+ ramdisk_execute_command);
+ }
+
++#ifdef CONFIG_GRKERNSEC_CHROOT_INITRD
++ /* if no initrd was used, be extra sure we enforce chroot restrictions */
++ gr_init_ran = 1;
++#endif
++
+ /*
+ * We try each of these until one succeeds.
+ *
+@@ -821,7 +892,7 @@ static int __init kernel_init(void * unused)
do_basic_setup();
/* Open the /dev/console on the rootfs, this should never fail */
@@ -78721,7 +79197,7 @@ index 5d0eb1d..8255113 100644
printk(KERN_WARNING "Warning: unable to open an initial console.\n");
(void) sys_dup(0);
-@@ -834,11 +896,13 @@ static int __init kernel_init(void * unused)
+@@ -834,11 +905,13 @@ static int __init kernel_init(void * unused)
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
@@ -79075,7 +79551,7 @@ index d4bc594..b26065d 100644
if (!ab)
return;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index 47b7fc1..9af0605 100644
+index 47b7fc1..b8e1e47 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -67,6 +67,7 @@
@@ -79106,9 +79582,12 @@ index 47b7fc1..9af0605 100644
/**
* audit_set_loginuid - set a task's audit_context loginuid
-@@ -2131,7 +2132,7 @@ static atomic_t session_id = ATOMIC_INIT(0);
+@@ -2129,9 +2130,9 @@ static atomic_t session_id = ATOMIC_INIT(0);
+ *
+ * Called (set) from fs/proc/base.c::proc_loginuid_write().
*/
- int audit_set_loginuid(struct task_struct *task, uid_t loginuid)
+-int audit_set_loginuid(struct task_struct *task, uid_t loginuid)
++int __intentional_overflow(-1) audit_set_loginuid(struct task_struct *task, uid_t loginuid)
{
- unsigned int sessionid = atomic_inc_return(&session_id);
+ unsigned int sessionid = atomic_inc_return_unchecked(&session_id);
@@ -79833,7 +80312,7 @@ index a2101bb..f2e0354 100644
do {
unsigned long size = min_t(unsigned long, handle->size, len);
diff --git a/kernel/exit.c b/kernel/exit.c
-index 234e152..0ae0243 100644
+index 234e152..4c61aa3 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -168,6 +168,10 @@ void release_task(struct task_struct * p)
@@ -79856,17 +80335,64 @@ index 234e152..0ae0243 100644
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
return 0;
-@@ -416,6 +420,9 @@ void daemonize(const char *name, ...)
- vsnprintf(current->comm, sizeof(current->comm), name, args);
- va_end(args);
+@@ -402,56 +406,6 @@ int disallow_signal(int sig)
-+ gr_put_exec_file(current);
-+ gr_set_kernel_label(current);
-+
- /*
- * If we were started as result of loading a module, close all of the
- * user space pages. We don't need them, and if we didn't close them
-@@ -874,6 +881,8 @@ NORET_TYPE void do_exit(long code)
+ EXPORT_SYMBOL(disallow_signal);
+
+-/*
+- * Put all the gunge required to become a kernel thread without
+- * attached user resources in one place where it belongs.
+- */
+-
+-void daemonize(const char *name, ...)
+-{
+- va_list args;
+- sigset_t blocked;
+-
+- va_start(args, name);
+- vsnprintf(current->comm, sizeof(current->comm), name, args);
+- va_end(args);
+-
+- /*
+- * If we were started as result of loading a module, close all of the
+- * user space pages. We don't need them, and if we didn't close them
+- * they would be locked into memory.
+- */
+- exit_mm(current);
+- /*
+- * We don't want to have TIF_FREEZE set if the system-wide hibernation
+- * or suspend transition begins right now.
+- */
+- current->flags |= (PF_NOFREEZE | PF_KTHREAD);
+-
+- if (current->nsproxy != &init_nsproxy) {
+- get_nsproxy(&init_nsproxy);
+- switch_task_namespaces(current, &init_nsproxy);
+- }
+- set_special_pids(&init_struct_pid);
+- proc_clear_tty(current);
+-
+- /* Block and flush all signals */
+- sigfillset(&blocked);
+- sigprocmask(SIG_BLOCK, &blocked, NULL);
+- flush_signals(current);
+-
+- /* Become as one with the init task */
+-
+- daemonize_fs_struct();
+- exit_files(current);
+- current->files = init_task.files;
+- atomic_inc(&current->files->count);
+-
+- reparent_to_kthreadd();
+-}
+-
+-EXPORT_SYMBOL(daemonize);
+-
+ static void close_files(struct files_struct * files)
+ {
+ int i, j;
+@@ -874,6 +828,8 @@ NORET_TYPE void do_exit(long code)
struct task_struct *tsk = current;
int group_dead;
@@ -79875,7 +80401,7 @@ index 234e152..0ae0243 100644
profile_task_exit(tsk);
WARN_ON(blk_needs_flush_plug(tsk));
-@@ -890,7 +899,6 @@ NORET_TYPE void do_exit(long code)
+@@ -890,7 +846,6 @@ NORET_TYPE void do_exit(long code)
* mm_release()->clear_child_tid() from writing to a user-controlled
* kernel address.
*/
@@ -79883,7 +80409,7 @@ index 234e152..0ae0243 100644
ptrace_event(PTRACE_EVENT_EXIT, code);
-@@ -952,6 +960,9 @@ NORET_TYPE void do_exit(long code)
+@@ -952,6 +907,9 @@ NORET_TYPE void do_exit(long code)
tsk->exit_code = code;
taskstats_exit(tsk, group_dead);
@@ -79893,7 +80419,7 @@ index 234e152..0ae0243 100644
exit_mm(tsk);
if (group_dead)
-@@ -1065,7 +1076,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
+@@ -1065,7 +1023,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
* Take down every thread in the group. This is called by fatal signals
* as well as by sys_exit_group (below).
*/
@@ -80586,7 +81112,7 @@ index dc7bc08..4601964 100644
/* Don't allow clients that don't understand the native
diff --git a/kernel/kmod.c b/kernel/kmod.c
-index a16dac1..a1ac7cb 100644
+index a16dac1..97aeff5 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -64,7 +64,7 @@ static void free_modprobe_argv(struct subprocess_info *info)
@@ -80714,7 +81240,37 @@ index a16dac1..a1ac7cb 100644
EXPORT_SYMBOL(__request_module);
#endif /* CONFIG_MODULES */
-@@ -265,7 +318,7 @@ static int wait_for_helper(void *data)
+@@ -188,6 +241,18 @@ static int ____call_usermodehelper(void *data)
+ */
+ set_user_nice(current, 0);
+
++#ifdef CONFIG_GRKERNSEC
++ /* this is race-free as far as userland is concerned as we copied
++ out the path to be used prior to this point and are now operating
++ on that copy
++ */
++ if (strncmp(sub_info->path, "/sbin/", 6) || strstr(sub_info->path, "..")) {
++ printk(KERN_ALERT "grsec: denied exec of usermode helper binary %.950s located outside of /sbin\n", sub_info->path);
++ retval = -EPERM;
++ goto fail;
++ }
++#endif
++
+ retval = -ENOMEM;
+ new = prepare_kernel_cred(current);
+ if (!new)
+@@ -221,6 +286,10 @@ fail:
+
+ void call_usermodehelper_freeinfo(struct subprocess_info *info)
+ {
++#ifdef CONFIG_GRKERNSEC
++ kfree(info->path);
++ info->path = info->origpath;
++#endif
+ if (info->cleanup)
+ (*info->cleanup)(info);
+ kfree(info);
+@@ -265,7 +334,7 @@ static int wait_for_helper(void *data)
*
* Thus the __user pointer cast is valid here.
*/
@@ -80723,7 +81279,20 @@ index a16dac1..a1ac7cb 100644
/*
* If ret is 0, either ____call_usermodehelper failed and the
-@@ -512,7 +565,7 @@ EXPORT_SYMBOL(call_usermodehelper_exec);
+@@ -413,7 +482,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
+ goto out;
+
+ INIT_WORK(&sub_info->work, __call_usermodehelper);
++#ifdef CONFIG_GRKERNSEC
++ sub_info->origpath = path;
++ sub_info->path = kstrdup(path, gfp_mask);
++#else
+ sub_info->path = path;
++#endif
+ sub_info->argv = argv;
+ sub_info->envp = envp;
+ out:
+@@ -512,7 +586,7 @@ EXPORT_SYMBOL(call_usermodehelper_exec);
static int proc_cap_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -84592,7 +85161,7 @@ index e660464..c8b9e67 100644
return cmd_attr_register_cpumask(info);
else if (info->attrs[TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK])
diff --git a/kernel/time.c b/kernel/time.c
-index 73e416d..71905c5 100644
+index 73e416d..cfc6f69 100644
--- a/kernel/time.c
+++ b/kernel/time.c
@@ -163,6 +163,11 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
@@ -84607,15 +85176,6 @@ index 73e416d..71905c5 100644
/* SMP safe, global irq locking makes it work. */
sys_tz = *tz;
update_vsyscall_tz();
-@@ -499,7 +504,7 @@ EXPORT_SYMBOL(usecs_to_jiffies);
- * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
- * value to a scaled second value.
- */
--unsigned long
-+unsigned long __intentional_overflow(-1)
- timespec_to_jiffies(const struct timespec *value)
- {
- unsigned long sec = value->tv_sec;
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index 8a46f5d..bbe6f9c 100644
--- a/kernel/time/alarmtimer.c
@@ -91057,7 +91617,7 @@ index 136ac4f..f917fa9 100644
mm->unmap_area = arch_unmap_area;
}
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index eeba3bb..5ebaf67 100644
+index eeba3bb..a22618a 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -39,8 +39,19 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
@@ -91160,15 +91720,6 @@ index eeba3bb..5ebaf67 100644
if (!pmd_none(*pmd)) {
pte_t *ptep, pte;
-@@ -329,7 +365,7 @@ static void purge_vmap_area_lazy(void);
- * Allocate a region of KVA of the specified size and alignment, within the
- * vstart and vend.
- */
--static struct vmap_area *alloc_vmap_area(unsigned long size,
-+static __size_overflow(1) struct vmap_area *alloc_vmap_area(unsigned long size,
- unsigned long align,
- unsigned long vstart, unsigned long vend,
- int node, gfp_t gfp_mask)
@@ -1295,6 +1331,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
struct vm_struct *area;
@@ -94225,6 +94776,19 @@ index 66363b6..b0654a3 100644
if (!(flg & TCP_FLAG_RST))
req->rsk_ops->send_reset(sk, skb);
+diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
+index 3add486..a5df757 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -1318,7 +1318,7 @@ static void tcp_cwnd_validate(struct sock *sk)
+ * modulo only when the receiver window alone is the limiting factor or
+ * when we would be allowed to send the split-due-to-Nagle skb fully.
+ */
+-static unsigned int tcp_mss_split_point(const struct sock *sk, const struct sk_buff *skb,
++static unsigned int __intentional_overflow(0) tcp_mss_split_point(const struct sock *sk, const struct sk_buff *skb,
+ unsigned int mss_now, unsigned int max_segs)
+ {
+ const struct tcp_sock *tp = tcp_sk(sk);
diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
index 85ee7eb..53277ab 100644
--- a/net/ipv4/tcp_probe.c
@@ -97477,6 +98041,19 @@ index c80c162..83a1e28 100644
/* Initialize storage for argp and resp */
memset(rqstp->rq_argp, 0, procp->pc_argsize);
+diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
+index ce13632..144987d 100644
+--- a/net/sunrpc/svcauth_unix.c
++++ b/net/sunrpc/svcauth_unix.c
+@@ -602,7 +602,7 @@ struct cache_detail unix_gid_cache = {
+ .alloc = unix_gid_alloc,
+ };
+
+-static struct unix_gid *unix_gid_lookup(uid_t uid)
++static struct unix_gid * __intentional_overflow(-1) unix_gid_lookup(uid_t uid)
+ {
+ struct unix_gid ug;
+ struct cache_head *ch;
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 296192c..5a95b93 100644
--- a/net/sunrpc/svcsock.c
@@ -104166,11 +104743,12 @@ index 0000000..679b9ef
+}
diff --git a/tools/gcc/size_overflow_hash.data b/tools/gcc/size_overflow_hash.data
new file mode 100644
-index 0000000..6fcc08d
+index 0000000..05e26dd
--- /dev/null
+++ b/tools/gcc/size_overflow_hash.data
-@@ -0,0 +1,4784 @@
+@@ -0,0 +1,5989 @@
+intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL
++ocfs2_get_refcount_tree_3 ocfs2_get_refcount_tree 0 3 NULL
+storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL
+compat_sock_setsockopt_23 compat_sock_setsockopt 5 23 NULL
+carl9170_alloc_27 carl9170_alloc 1 27 NULL
@@ -104178,84 +104756,115 @@ index 0000000..6fcc08d
+padzero_55 padzero 1 55 &sel_read_policyvers_55
+cfg80211_disconnected_57 cfg80211_disconnected 4 57 NULL
+vis_data_count_prim_sec_64 vis_data_count_prim_sec 0 64 NULL
-+DepcaSignature_80 DepcaSignature 2 80 NULL nohasharray
-+crypto_authenc_setkey_80 crypto_authenc_setkey 3 80 &DepcaSignature_80
++__skb_to_sgvec_72 __skb_to_sgvec 0 72 NULL
++crypto_authenc_setkey_80 crypto_authenc_setkey 3 80 NULL
+snd_korg1212_copy_to_92 snd_korg1212_copy_to 6 92 NULL
+load_msg_95 load_msg 2 95 NULL
+device_flush_iotlb_115 device_flush_iotlb 2-3 115 NULL
++ipath_verbs_send_117 ipath_verbs_send 5-3 117 NULL
+init_q_132 init_q 4 132 NULL
++ocfs2_local_alloc_slide_window_134 ocfs2_local_alloc_slide_window 0 134 NULL
+memstick_alloc_host_142 memstick_alloc_host 1 142 NULL
-+tracing_trace_options_write_153 tracing_trace_options_write 3 153 NULL
-+iscsi_session_setup_196 iscsi_session_setup 4-5 196 NULL
++ext4_ext_get_actual_len_153 ext4_ext_get_actual_len 0 153 NULL nohasharray
++tracing_trace_options_write_153 tracing_trace_options_write 3 153 &ext4_ext_get_actual_len_153
++pci_request_selected_regions_169 pci_request_selected_regions 0 169 NULL
++iscsi_session_setup_196 iscsi_session_setup 4-5-3 196 NULL
++device_add_bin_attributes_205 device_add_bin_attributes 0 205 NULL
+store_cpufv_215 store_cpufv 4 215 NULL
-+flex_array_clear_251 flex_array_clear 2 251 NULL
+proc_scsi_write_proc_267 proc_scsi_write_proc 3 267 NULL
+generic_file_direct_write_291 generic_file_direct_write 0 291 NULL
+read_file_war_stats_292 read_file_war_stats 3 292 NULL
+platform_device_add_data_310 platform_device_add_data 3 310 NULL
+iwl_dbgfs_tx_statistics_read_314 iwl_dbgfs_tx_statistics_read 3 314 NULL nohasharray
+dn_setsockopt_314 dn_setsockopt 5 314 &iwl_dbgfs_tx_statistics_read_314
-+next_node_allowed_318 next_node_allowed 1 318 NULL
-+compat_sys_ioctl_333 compat_sys_ioctl 3 333 NULL
++next_node_allowed_318 next_node_allowed 1-0 318 NULL
++ath9k_wmi_cmd_327 ath9k_wmi_cmd 4 327 NULL
++map_urb_for_dma_332 map_urb_for_dma 0 332 NULL
++cmtp_send_interopmsg_376 cmtp_send_interopmsg 7 376 NULL
++sysfs_create_dir_398 sysfs_create_dir 0 398 NULL
+btmrvl_txdnldready_read_413 btmrvl_txdnldready_read 3 413 NULL
+lbs_rdmac_read_418 lbs_rdmac_read 3 418 NULL
++insert_vm_struct_428 insert_vm_struct 0 428 NULL
+snd_ca0106_ptr_read_467 snd_ca0106_ptr_read 0 467 NULL
+_alloc_get_attr_desc_470 _alloc_get_attr_desc 2 470 NULL
+pidlist_resize_496 pidlist_resize 2 496 NULL
++iwl_dbgfs_protection_mode_write_502 iwl_dbgfs_protection_mode_write 3 502 NULL
++smp_send_cmd_512 smp_send_cmd 3 512 NULL
++_snd_pcm_hw_param_first_516 _snd_pcm_hw_param_first 0 516 NULL
+ocfs2_validate_meta_ecc_bhs_527 ocfs2_validate_meta_ecc_bhs 0 527 NULL
+ipv6_skip_exthdr_536 ipv6_skip_exthdr 0-2 536 NULL
-+zlib_deflate_workspacesize_537 zlib_deflate_workspacesize 0-1-2 537 NULL
+iwl_dbgfs_wowlan_sram_read_540 iwl_dbgfs_wowlan_sram_read 3 540 NULL
++dle_count_543 dle_count 0 543 NULL
+devres_alloc_551 devres_alloc 2 551 NULL
++lpfc_nlp_state_name_556 lpfc_nlp_state_name 2 556 NULL
+snd_aw2_saa7146_get_hw_ptr_playback_558 snd_aw2_saa7146_get_hw_ptr_playback 0 558 NULL
+dev_hard_header_565 dev_hard_header 0 565 NULL nohasharray
+start_isoc_chain_565 start_isoc_chain 2 565 &dev_hard_header_565
+compat_sys_preadv_583 compat_sys_preadv 3 583 NULL
++ocfs2_refcounted_xattr_delete_need_584 ocfs2_refcounted_xattr_delete_need 0 584 NULL
+ni_gpct_device_construct_610 ni_gpct_device_construct 5 610 NULL
-+compat_sys_shmat_620 compat_sys_shmat 3 620 NULL
+sysfs_acpi_set_625 sysfs_acpi_set 3 625 NULL
+viafb_dfpl_proc_write_627 viafb_dfpl_proc_write 3 627 NULL
-+isp1760_register_628 isp1760_register 1-2 628 NULL
++ocfs2_num_free_extents_632 ocfs2_num_free_extents 0 632 NULL
+drbd_bm_find_next_643 drbd_bm_find_next 2 643 NULL
-+unlink_queued_645 unlink_queued 3-4 645 NULL
++unlink_queued_645 unlink_queued 4-3 645 NULL
+iwl_legacy_dbgfs_force_reset_read_649 iwl_legacy_dbgfs_force_reset_read 3 649 NULL
+dtim_interval_read_654 dtim_interval_read 3 654 NULL
-+ceph_copy_user_to_page_vector_656 ceph_copy_user_to_page_vector 4-3 656 NULL
++ceph_copy_user_to_page_vector_656 ceph_copy_user_to_page_vector 3-4 656 NULL
++div_u64_rem_672 div_u64_rem 0 672 NULL
++xfrm_aevent_msgsize_674 xfrm_aevent_msgsize 0 674 NULL
+rtl8169_try_rx_copy_705 rtl8169_try_rx_copy 3 705 NULL
-+ipath_resize_cq_712 ipath_resize_cq 2 712 NULL
-+context_struct_compute_av_722 context_struct_compute_av 3 722 NULL
+sctp_setsockopt_peer_addr_params_734 sctp_setsockopt_peer_addr_params 3 734 NULL
++ddp_set_map_751 ddp_set_map 4 751 NULL
+dvb_video_write_754 dvb_video_write 3 754 NULL
+iwl_read_targ_mem_772 iwl_read_targ_mem 0 772 NULL
++jbd2_journal_dirty_metadata_784 jbd2_journal_dirty_metadata 0 784 NULL
++snd_pcm_drain_811 snd_pcm_drain 0 811 NULL
+if_writecmd_815 if_writecmd 2 815 NULL
+aac_change_queue_depth_825 aac_change_queue_depth 2 825 NULL
-+um_idi_read_850 um_idi_read 3 850 NULL
++read_fifo_826 read_fifo 3 826 NULL
+o2net_send_message_vec_879 o2net_send_message_vec 4 879 NULL nohasharray
+iwl_dbgfs_fh_reg_read_879 iwl_dbgfs_fh_reg_read 3 879 &o2net_send_message_vec_879
++intel_alloc_iova_883 intel_alloc_iova 3 883 NULL
+snd_pcm_action_single_905 snd_pcm_action_single 0 905 NULL
+btmrvl_hsstate_read_920 btmrvl_hsstate_read 3 920 NULL
++v4l2_ctrl_handler_init_928 v4l2_ctrl_handler_init 2 928 NULL
++readw_931 readw 0 931 NULL
+carl9170_cmd_buf_950 carl9170_cmd_buf 3 950 NULL
-+__nodes_weight_956 __nodes_weight 2 956 NULL
++__nodes_weight_956 __nodes_weight 2-0 956 NULL
+sys_msgrcv_959 sys_msgrcv 3 959 NULL
++memcmp_990 memcmp 0 990 NULL
++hdlcdev_rx_997 hdlcdev_rx 3 997 NULL
++free_ind_block_999 free_ind_block 0 999 NULL
++readreg_1017 readreg 0-1 1017 NULL
+pohmelfs_name_alloc_1036 pohmelfs_name_alloc 1 1036 NULL
+gigaset_initdriver_1060 gigaset_initdriver 2 1060 NULL
-+mce_request_packet_1073 mce_request_packet 3 1073 NULL
++Read_hfc16_1070 Read_hfc16 0 1070 NULL
++mce_request_packet_1073 mce_request_packet 3 1073 NULL nohasharray
++mlx4_create_eq_1073 mlx4_create_eq 2 1073 &mce_request_packet_1073
+agp_create_memory_1075 agp_create_memory 1 1075 NULL
+_scsih_adjust_queue_depth_1083 _scsih_adjust_queue_depth 2 1083 NULL
++inode_ref_info_1094 inode_ref_info 0 1094 NULL nohasharray
++llc_mac_hdr_init_1094 llc_mac_hdr_init 0 1094 &inode_ref_info_1094
+__arch_hweight8_1105 __arch_hweight8 0 1105 NULL
-+vmalloc_32_1135 vmalloc_32 1 1135 NULL
++__btrfs_cow_block_1125 __btrfs_cow_block 0-7 1125 NULL nohasharray
++__ext4_journal_stop_1125 __ext4_journal_stop 0 1125 &__btrfs_cow_block_1125
+i2400m_rx_ctl_1157 i2400m_rx_ctl 4 1157 NULL
++pfkey_xfrm_policy2msg_size_1176 pfkey_xfrm_policy2msg_size 0 1176 NULL
+ipc_alloc_1192 ipc_alloc 1 1192 NULL
+ib_create_send_mad_1196 ib_create_send_mad 5 1196 NULL
+i2400m_rx_ctl_ack_1199 i2400m_rx_ctl_ack 3 1199 NULL
+i2cdev_read_1206 i2cdev_read 3 1206 NULL
++generic_file_splice_read_1220 generic_file_splice_read 4 1220 NULL
++ipw_packet_received_skb_1230 ipw_packet_received_skb 2 1230 NULL
+acpi_battery_write_alarm_1240 acpi_battery_write_alarm 3 1240 NULL
+ocfs2_extend_file_1266 ocfs2_extend_file 3 1266 NULL
+ioctl_private_iw_point_1273 ioctl_private_iw_point 7 1273 NULL
-+compat_put_u64_1319 compat_put_u64 1 1319 NULL
++ocfs2_append_rec_to_path_1321 ocfs2_append_rec_to_path 0 1321 NULL
+ffs_1322 ffs 0 1322 NULL
++push_node_left_1327 push_node_left 0 1327 NULL
++carl9170_rx_stream_1334 carl9170_rx_stream 3 1334 NULL
+btrfs_submit_compressed_write_1347 btrfs_submit_compressed_write 5 1347 NULL
-+io_mapping_create_wc_1354 io_mapping_create_wc 1-2 1354 NULL
+snd_pcm_lib_write1_1358 snd_pcm_lib_write1 0-3 1358 NULL
+ipx_sendmsg_1362 ipx_sendmsg 4 1362 NULL
+ocfs2_prepare_inode_for_write_1372 ocfs2_prepare_inode_for_write 3 1372 NULL
@@ -104263,277 +104872,349 @@ index 0000000..6fcc08d
+do_msgsnd_1387 do_msgsnd 4 1387 NULL
+zone_page_state_1393 zone_page_state 0 1393 NULL
+file_read_actor_1401 file_read_actor 4 1401 NULL
++hci_si_event_1404 hci_si_event 3 1404 NULL
++init_rs_internal_1436 init_rs_internal 1 1436 NULL
+stack_max_size_read_1445 stack_max_size_read 3 1445 NULL
+tx_queue_len_read_1463 tx_queue_len_read 3 1463 NULL
+xprt_alloc_1475 xprt_alloc 2 1475 NULL
+sta_num_ps_buf_frames_read_1488 sta_num_ps_buf_frames_read 3 1488 NULL
+posix_acl_permission_1495 posix_acl_permission 0 1495 NULL
++fpregs_set_1497 fpregs_set 4 1497 NULL
++ocfs2_alloc_dinode_update_counts_1507 ocfs2_alloc_dinode_update_counts 0 1507 NULL
+tomoyo_round2_1518 tomoyo_round2 0 1518 NULL
-+sym_name_1571 sym_name 3 1571 NULL
++vp_request_intx_1578 vp_request_intx 0 1578 NULL
+ieee80211_if_read_dot11MeshHWMPnetDiameterTraversalTime_1589 ieee80211_if_read_dot11MeshHWMPnetDiameterTraversalTime 3 1589 NULL
++ipath_ht_handle_hwerrors_1592 ipath_ht_handle_hwerrors 3 1592 NULL
+fc_frame_alloc_1596 fc_frame_alloc 2 1596 NULL
+packet_buffer_init_1607 packet_buffer_init 2 1607 NULL
++i915_gem_execbuffer_wait_for_flips_1612 i915_gem_execbuffer_wait_for_flips 0 1612 NULL
+btmrvl_hscmd_read_1614 btmrvl_hscmd_read 3 1614 NULL
+v9fs_fid_xattr_get_1618 v9fs_fid_xattr_get 0 1618 NULL
+bluetooth_proc_write_1630 bluetooth_proc_write 3 1630 NULL
+btmrvl_hsmode_read_1647 btmrvl_hsmode_read 3 1647 NULL
+ikconfig_read_current_1658 ikconfig_read_current 3 1658 NULL
-+compat_x25_ioctl_1674 compat_x25_ioctl 3 1674 NULL
+configfs_read_file_1683 configfs_read_file 3 1683 NULL
++pdu_write_u_1710 pdu_write_u 3 1710 NULL
+coda_psdev_write_1711 coda_psdev_write 3 1711 NULL
++wl1271_rx_handle_data_1714 wl1271_rx_handle_data 3 1714 NULL nohasharray
++btrfs_dir_data_len_1714 btrfs_dir_data_len 0 1714 &wl1271_rx_handle_data_1714
+dma_memcpy_pg_to_iovec_1725 dma_memcpy_pg_to_iovec 6 1725 NULL
-+compat_cdrom_generic_command_1756 compat_cdrom_generic_command 4 1756 NULL
++internal_create_group_1733 internal_create_group 0 1733 NULL
+ieee80211_new_mesh_header_1761 ieee80211_new_mesh_header 0 1761 NULL
-+ebt_size_mwt_1768 ebt_size_mwt 0 1768 NULL
+cosa_write_1774 cosa_write 3 1774 NULL
-+__nodelist_scnprintf_1815 __nodelist_scnprintf 0-4-2 1815 NULL
++__nodelist_scnprintf_1815 __nodelist_scnprintf 2-4-0 1815 NULL
++hidp_queue_report_1881 hidp_queue_report 3 1881 NULL
++sb_issue_zeroout_1884 sb_issue_zeroout 0 1884 NULL
+iwl_legacy_dbgfs_rxon_flags_read_1894 iwl_legacy_dbgfs_rxon_flags_read 3 1894 NULL
++ext3_fiemap_1936 ext3_fiemap 4 1936 NULL
+ieee80211_if_fmt_dot11MeshConfirmTimeout_1945 ieee80211_if_fmt_dot11MeshConfirmTimeout 3 1945 NULL
-+read_swap_header_1957 read_swap_header 0 1957 NULL
++__assign_irq_vector_1961 __assign_irq_vector 0 1961 NULL
+ivtv_v4l2_read_1964 ivtv_v4l2_read 3 1964 NULL
+store_iwmct_log_level_fw_1974 store_iwmct_log_level_fw 4 1974 NULL
+sel_read_avc_hash_stats_1984 sel_read_avc_hash_stats 3 1984 NULL
-+xfs_trans_count_vecs_1991 xfs_trans_count_vecs 0 1991 NULL
++xfs_trans_count_vecs_1991 xfs_trans_count_vecs 0 1991 NULL nohasharray
++gpio_power_write_1991 gpio_power_write 3 1991 &xfs_trans_count_vecs_1991
+__alloc_bootmem_node_1992 __alloc_bootmem_node 2 1992 NULL
+atomic_read_unchecked_1995 atomic_read_unchecked 0 1995 NULL
+ocfs2_global_qinit_alloc_2018 ocfs2_global_qinit_alloc 0 2018 NULL
+write_flush_pipefs_2021 write_flush_pipefs 3 2021 NULL
-+BcmCopySection_2035 BcmCopySection 5 2035 NULL
-+devm_ioremap_nocache_2036 devm_ioremap_nocache 2-3 2036 NULL
++BcmCopySection_2035 BcmCopySection 0-5 2035 NULL
+ath6kl_fwlog_mask_read_2050 ath6kl_fwlog_mask_read 3 2050 NULL
+ocfs2_expand_inline_dir_2063 ocfs2_expand_inline_dir 3 2063 NULL
+subbuf_read_actor_2071 subbuf_read_actor 3 2071 NULL
++__generic_copy_from_user_intel_2073 __generic_copy_from_user_intel 0-3 2073 NULL
++diva_set_driver_dbg_mask_2077 diva_set_driver_dbg_mask 0 2077 NULL nohasharray
++alloc_retstack_tasklist_2077 alloc_retstack_tasklist 0 2077 &diva_set_driver_dbg_mask_2077
+iwl_dbgfs_current_sleep_command_read_2081 iwl_dbgfs_current_sleep_command_read 3 2081 NULL
++get_unaligned_le32_2092 get_unaligned_le32 0 2092 NULL
+idetape_chrdev_read_2097 idetape_chrdev_read 3 2097 NULL
-+audit_expand_2098 audit_expand 2 2098 NULL
++audit_expand_2098 audit_expand 2-0 2098 NULL
+num_pages_spanned_2105 num_pages_spanned 0 2105 NULL
+iwl_dbgfs_log_event_read_2107 iwl_dbgfs_log_event_read 3 2107 NULL
+ecryptfs_encrypt_and_encode_filename_2109 ecryptfs_encrypt_and_encode_filename 6 2109 NULL
+enable_read_2117 enable_read 3 2117 NULL
+pcf50633_write_block_2124 pcf50633_write_block 3 2124 NULL
++snd_interval_refine_last_2127 snd_interval_refine_last 0 2127 NULL
+check_load_and_stores_2143 check_load_and_stores 2 2143 NULL
-+mlx4_init_icm_table_2151 mlx4_init_icm_table 5-4 2151 NULL
++mlx4_init_icm_table_2151 mlx4_init_icm_table 4-5 2151 NULL
+iov_iter_count_2152 iov_iter_count 0 2152 NULL
-+_ore_get_io_state_2166 _ore_get_io_state 3-4-5 2166 NULL
-+ssb_bus_ssbbus_register_2217 ssb_bus_ssbbus_register 2 2217 NULL
-+u32_array_read_2219 u32_array_read 3 2219 NULL
++__copy_to_user_ll_2157 __copy_to_user_ll 0-3 2157 NULL
++ocfs2_et_sanity_check_2164 ocfs2_et_sanity_check 0 2164 NULL
++_ore_get_io_state_2166 _ore_get_io_state 5-3-4 2166 NULL
++picolcd_debug_reset_write_2195 picolcd_debug_reset_write 3 2195 NULL
++page_cache_async_readahead_2219 page_cache_async_readahead 6-5 2219 NULL nohasharray
++u32_array_read_2219 u32_array_read 3 2219 &page_cache_async_readahead_2219
+vhci_write_2224 vhci_write 3 2224 NULL
++__ocfs2_journal_access_2241 __ocfs2_journal_access 0 2241 NULL
++mlx4_buddy_init_2244 mlx4_buddy_init 2 2244 NULL
+ieee80211_if_read_dot11MeshHWMPRannInterval_2249 ieee80211_if_read_dot11MeshHWMPRannInterval 3 2249 NULL
+netlbl_secattr_catmap_walk_2255 netlbl_secattr_catmap_walk 0-2 2255 NULL
-+au_fidir_sz_2256 au_fidir_sz 0-1 2256 NULL nohasharray
-+sel_write_avc_cache_threshold_2256 sel_write_avc_cache_threshold 3 2256 &au_fidir_sz_2256
++sel_write_avc_cache_threshold_2256 sel_write_avc_cache_threshold 3 2256 NULL
+do_update_counters_2259 do_update_counters 4 2259 NULL
++ocfs2_shift_tree_depth_2292 ocfs2_shift_tree_depth 0 2292 NULL
+kvm_clear_guest_page_2308 kvm_clear_guest_page 4 2308 NULL
+picolcd_fb_write_2318 picolcd_fb_write 3 2318 NULL
-+gart_map_page_2325 gart_map_page 3-4 2325 NULL
++gart_map_page_2325 gart_map_page 4-3 2325 NULL
+__erst_read_to_erange_2341 __erst_read_to_erange 0 2341 NULL
+create_subvol_2347 create_subvol 4 2347 NULL
+zr364xx_read_2354 zr364xx_read 3 2354 NULL
+viafb_iga2_odev_proc_write_2363 viafb_iga2_odev_proc_write 3 2363 NULL
-+rtl_port_map_2385 rtl_port_map 1-2 2385 NULL
++rose_recvmsg_2368 rose_recvmsg 4 2368 NULL
+rxpipe_rx_prep_beacon_drop_read_2403 rxpipe_rx_prep_beacon_drop_read 3 2403 NULL
+isdn_v110_open_2418 isdn_v110_open 3 2418 NULL
-+ioremap_nocache_2439 ioremap_nocache 1-2 2439 NULL
++hfcpci_empty_fifo_2427 hfcpci_empty_fifo 4 2427 NULL
+tty_buffer_find_2443 tty_buffer_find 2 2443 NULL
++arch_msi_check_device_2449 arch_msi_check_device 0 2449 NULL
++__sock_recvmsg_2467 __sock_recvmsg 0 2467 NULL
+b43legacy_debugfs_read_2473 b43legacy_debugfs_read 3 2473 NULL
++xfrm_spdinfo_msgsize_2474 xfrm_spdinfo_msgsize 0 2474 NULL
++fc_fcp_send_data_2479 fc_fcp_send_data 4-3 2479 NULL
+update_pmkid_2481 update_pmkid 4 2481 NULL
+wiphy_new_2482 wiphy_new 2 2482 NULL
+squashfs_read_fragment_index_table_2506 squashfs_read_fragment_index_table 4 2506 NULL
+dm_write_2513 dm_write 3 2513 NULL
+v9fs_cached_file_read_2514 v9fs_cached_file_read 3 2514 NULL
+ext4_get_inode_loc_2516 ext4_get_inode_loc 0 2516 NULL
++ata_host_start_2545 ata_host_start 0 2545 NULL
+gspca_dev_probe_2570 gspca_dev_probe 4 2570 NULL
+pcm_sanity_check_2574 pcm_sanity_check 0 2574 NULL
+store_pwm1_enable_2577 store_pwm1_enable 4 2577 NULL
+smk_write_logging_2618 smk_write_logging 3 2618 NULL
++nlmsg_msg_size_2623 nlmsg_msg_size 0-1 2623 NULL
+iwl4965_ucode_general_stats_read_2639 iwl4965_ucode_general_stats_read 3 2639 NULL
+lro_gen_skb_2644 lro_gen_skb 6 2644 NULL
-+memcpy_fromiovecend_2707 memcpy_fromiovecend 3-4 2707 NULL
-+__xip_file_write_2733 __xip_file_write 4-3 2733 NULL
++ffs_ep0_read_2672 ffs_ep0_read 3 2672 NULL
++ocfs2_rotate_subtree_right_2674 ocfs2_rotate_subtree_right 0 2674 NULL
++oti6858_write_2692 oti6858_write 4 2692 NULL
++memcpy_fromiovecend_2707 memcpy_fromiovecend 4-3 2707 NULL
+hid_report_raw_event_2762 hid_report_raw_event 4 2762 NULL
-+mon_bin_ioctl_2771 mon_bin_ioctl 3 2771 NULL
++mon_bin_ioctl_2771 mon_bin_ioctl 3 2771 NULL nohasharray
++bictcp_update_2771 bictcp_update 2 2771 &mon_bin_ioctl_2771
+__next_cpu_2782 __next_cpu 1 2782 NULL
++usbatm_pdu_length_2786 usbatm_pdu_length 0-1 2786 NULL
++device_add_attrs_2789 device_add_attrs 0 2789 NULL
++iwl_dbgfs_clear_ucode_statistics_write_2804 iwl_dbgfs_clear_ucode_statistics_write 3 2804 NULL
+sel_read_enforce_2828 sel_read_enforce 3 2828 NULL
++snd_pcm_reset_2829 snd_pcm_reset 0 2829 NULL
+wait_for_avail_2847 wait_for_avail 0 2847 NULL
+ufs_free_fragments_2857 ufs_free_fragments 2 2857 NULL
+move_addr_to_user_2868 move_addr_to_user 2 2868 NULL
+nla_padlen_2883 nla_padlen 1 2883 NULL
+cmm_write_2896 cmm_write 3 2896 NULL
-+alloc_page_cgroup_2919 alloc_page_cgroup 1 2919 NULL
++count_esp_combs_2926 count_esp_combs 0 2926 NULL
+nes_read_indexed_2946 nes_read_indexed 0 2946 NULL
+tm6000_i2c_recv_regs16_2949 tm6000_i2c_recv_regs16 5 2949 NULL
++ppp_cp_event_2965 ppp_cp_event 6 2965 NULL
++ocfs2_find_branch_target_2989 ocfs2_find_branch_target 0 2989 NULL
+p9_nr_pages_2992 p9_nr_pages 0-2 2992 NULL
+store_cardr_2997 store_cardr 4 2997 NULL
-+do_dmabuf_dirty_sou_3017 do_dmabuf_dirty_sou 7 3017 NULL
++spin_time_accum_spinning_3020 spin_time_accum_spinning 1 3020 NULL
+depth_write_3021 depth_write 3 3021 NULL
+snd_azf3328_codec_inl_3022 snd_azf3328_codec_inl 0 3022 NULL
+xfrm_dst_alloc_copy_3034 xfrm_dst_alloc_copy 3 3034 NULL
-+iwl_dbgfs_sleep_level_override_read_3038 iwl_dbgfs_sleep_level_override_read 3 3038 NULL
++lpfc_idiag_mbxacc_write_3038 lpfc_idiag_mbxacc_write 3 3038 NULL nohasharray
++iwl_dbgfs_sleep_level_override_read_3038 iwl_dbgfs_sleep_level_override_read 3 3038 &lpfc_idiag_mbxacc_write_3038
+nr_free_buffer_pages_3044 nr_free_buffer_pages 0 3044 NULL
-+__blk_end_bidi_request_3070 __blk_end_bidi_request 3-4 3070 NULL
++calculate_min_size_3053 calculate_min_size 0 3053 NULL
++__blk_end_bidi_request_3070 __blk_end_bidi_request 4-3 3070 NULL
+dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 NULL
++ocfs2_get_right_path_3097 ocfs2_get_right_path 0 3097 NULL
+rb_alloc_3102 rb_alloc 1 3102 NULL
-+simple_write_to_buffer_3122 simple_write_to_buffer 5-2 3122 NULL
++simple_write_to_buffer_3122 simple_write_to_buffer 2-5 3122 NULL
+fill_write_buffer_3142 fill_write_buffer 3 3142 NULL
++b1_get_slice_3145 b1_get_slice 0 3145 NULL
+CIFSSMBSetPosixACL_3154 CIFSSMBSetPosixACL 5 3154 NULL
+compat_sys_migrate_pages_3157 compat_sys_migrate_pages 2 3157 NULL
+encrypted_instantiate_3168 encrypted_instantiate 3 3168 NULL
+uv_num_possible_blades_3177 uv_num_possible_blades 0 3177 NULL
++find_free_extent_3178 find_free_extent 5-7 3178 NULL
+compat_do_ip6t_set_ctl_3184 compat_do_ip6t_set_ctl 4 3184 NULL
+alloc_context_3194 alloc_context 1 3194 NULL
++codec_reg_write_file_3204 codec_reg_write_file 3 3204 NULL
+ath6kl_mgmt_tx_3230 ath6kl_mgmt_tx 9 3230 NULL
++btrfs_next_leaf_3232 btrfs_next_leaf 0 3232 NULL
+kimage_crash_alloc_3233 kimage_crash_alloc 3 3233 NULL
++write_adapter_mem_3234 write_adapter_mem 3 3234 NULL
+ext3_xattr_find_entry_3237 ext3_xattr_find_entry 0 3237 NULL
+key_key_read_3241 key_key_read 3 3241 NULL
-+number_3243 number 0 3243 NULL
-+__ilog2_u64_3284 __ilog2_u64 0 3284 NULL
++shrink_delalloc_3250 shrink_delalloc 0 3250 NULL
++__ilog2_u64_3284 __ilog2_u64 0-1 3284 NULL
++iwl_legacy_dbgfs_traffic_log_write_3296 iwl_legacy_dbgfs_traffic_log_write 3 3296 NULL
+arvo_sysfs_write_3311 arvo_sysfs_write 6 3311 NULL
++__iovec_copy_from_user_inatomic_3314 __iovec_copy_from_user_inatomic 0-4-3 3314 NULL
++i915_gem_gtt_bind_object_3319 i915_gem_gtt_bind_object 0 3319 NULL
+compat_sys_setsockopt_3326 compat_sys_setsockopt 5 3326 NULL
-+aac_rkt_ioremap_3333 aac_rkt_ioremap 2 3333 NULL
++de600_read_byte_3332 de600_read_byte 0 3332 NULL
++sctp_make_init_ack_3335 sctp_make_init_ack 4 3335 NULL
+read_from_oldmem_3337 read_from_oldmem 2 3337 NULL
++sysfs_create_group_3339 sysfs_create_group 0 3339 NULL
++noack_write_3343 noack_write 3 3343 NULL
+gsm_control_rls_3353 gsm_control_rls 3 3353 NULL
+scnprintf_3360 scnprintf 0-2 3360 NULL
++ReadByteAmd7930_3365 ReadByteAmd7930 0 3365 NULL
+send_stream_3397 send_stream 4 3397 NULL
+isdn_readbchan_3401 isdn_readbchan 0-5 3401 NULL
-+msix_map_region_3411 msix_map_region 3 3411 NULL
+pci_add_cap_save_buffer_3426 pci_add_cap_save_buffer 3 3426 NULL
+crystalhd_create_dio_pool_3427 crystalhd_create_dio_pool 2 3427 NULL
+pipe_iov_copy_to_user_3447 pipe_iov_copy_to_user 3 3447 NULL
+percpu_modalloc_3448 percpu_modalloc 2-3 3448 NULL
++s3fb_ddc_read_3451 s3fb_ddc_read 0 3451 NULL
++softsynth_write_3455 softsynth_write 3 3455 NULL
+jffs2_acl_setxattr_3464 jffs2_acl_setxattr 4 3464 NULL nohasharray
-+snd_pcm_lib_readv_transfer_3464 snd_pcm_lib_readv_transfer 4-2-5 3464 &jffs2_acl_setxattr_3464
++snd_pcm_lib_readv_transfer_3464 snd_pcm_lib_readv_transfer 5-4-2 3464 &jffs2_acl_setxattr_3464
+alloc_skb_fclone_3467 alloc_skb_fclone 1 3467 NULL
-+security_context_to_sid_default_3492 security_context_to_sid_default 2 3492 NULL nohasharray
-+efi_ioremap_3492 efi_ioremap 1-2 3492 &security_context_to_sid_default_3492
-+xfrm_migrate_msgsize_3496 xfrm_migrate_msgsize 1 3496 NULL
++security_context_to_sid_default_3492 security_context_to_sid_default 2 3492 NULL
++xfrm_migrate_msgsize_3496 xfrm_migrate_msgsize 1-0 3496 NULL
+ieee80211_wx_set_gen_ie_rsl_3521 ieee80211_wx_set_gen_ie_rsl 3 3521 NULL
+btrfs_dir_name_len_3549 btrfs_dir_name_len 0 3549 NULL
++b43legacy_read16_3561 b43legacy_read16 0 3561 NULL
++get_interface_3562 get_interface 0 3562 NULL
+alloc_smp_resp_3566 alloc_smp_resp 1 3566 NULL
+evtchn_read_3569 evtchn_read 3 3569 NULL
-+vc_resize_3585 vc_resize 2-3 3585 NULL
++vc_resize_3585 vc_resize 3-2 3585 NULL
+compat_sys_semtimedop_3606 compat_sys_semtimedop 3 3606 NULL
+sctp_getsockopt_events_3607 sctp_getsockopt_events 2 3607 NULL
+aligned_kmalloc_3628 aligned_kmalloc 1 3628 NULL
+cm_copy_private_data_3649 cm_copy_private_data 2 3649 NULL
+i915_compat_ioctl_3656 i915_compat_ioctl 2 3656 NULL
-+kmem_cache_alloc_3690 kmem_cache_alloc 0 3690 NULL
++ntfs_attr_make_non_resident_3694 ntfs_attr_make_non_resident 0 3694 NULL
+btmrvl_psmode_write_3703 btmrvl_psmode_write 3 3703 NULL nohasharray
+snd_m3_assp_read_3703 snd_m3_assp_read 0 3703 &btmrvl_psmode_write_3703 nohasharray
+create_irq_3703 create_irq 0 3703 &snd_m3_assp_read_3703
-+videobuf_pages_to_sg_3708 videobuf_pages_to_sg 2 3708 NULL
+ci_ll_write_3740 ci_ll_write 4 3740 NULL
++ping_sendmsg_3782 ping_sendmsg 4 3782 NULL
+sctp_setsockopt_auth_key_3793 sctp_setsockopt_auth_key 3 3793 NULL
++btrfs_alloc_chunk_3808 btrfs_alloc_chunk 0 3808 NULL
+ncp_file_write_3813 ncp_file_write 3 3813 NULL
++llc_ui_recvmsg_3826 llc_ui_recvmsg 4 3826 NULL
+read_file_tx_chainmask_3829 read_file_tx_chainmask 3 3829 NULL
+stringify_nodemap_3842 stringify_nodemap 2 3842 NULL
++__buf_prepare_3846 __buf_prepare 0 3846 NULL
+ubi_eba_read_leb_3847 ubi_eba_read_leb 0 3847 NULL
+smk_read_onlycap_3855 smk_read_onlycap 3 3855 NULL
+get_fd_set_3866 get_fd_set 1 3866 NULL
-+ubi_dbg_dump_flash_3870 ubi_dbg_dump_flash 4 3870 NULL
++apei_res_sub_3873 apei_res_sub 0 3873 NULL
+garp_attr_create_3883 garp_attr_create 3 3883 NULL
+uea_send_modem_cmd_3888 uea_send_modem_cmd 3 3888 NULL
+nvram_write_3894 nvram_write 3 3894 NULL
+comedi_buf_read_n_available_3899 comedi_buf_read_n_available 0 3899 NULL
+vcs_write_3910 vcs_write 3 3910 NULL
+pm860x_read_device_3958 pm860x_read_device 3 3958 NULL
-+atalk_compat_ioctl_3991 atalk_compat_ioctl 3 3991 NULL
++i915_gem_object_get_fence_3981 i915_gem_object_get_fence 0 3981 NULL
+do_add_counters_3992 do_add_counters 3 3992 NULL
+userspace_status_4004 userspace_status 4 4004 NULL
+mei_write_4005 mei_write 3 4005 NULL nohasharray
+xfs_check_block_4005 xfs_check_block 4 4005 &mei_write_4005
+snd_hdsp_capture_copy_4011 snd_hdsp_capture_copy 5 4011 NULL
++i915_gem_object_unbind_4016 i915_gem_object_unbind 0 4016 NULL
+blk_end_request_4024 blk_end_request 3 4024 NULL
+ext4_xattr_find_entry_4025 ext4_xattr_find_entry 0 4025 NULL
++b1_get_word_4035 b1_get_word 0 4035 NULL
++i915_gpu_idle_4062 i915_gpu_idle 0 4062 NULL
++get_dmabuf_4065 get_dmabuf 2 4065 NULL
++sctp_make_asconf_4078 sctp_make_asconf 3 4078 NULL
+fbcon_do_set_font_4079 fbcon_do_set_font 2-3 4079 NULL
++ab8500_address_write_4099 ab8500_address_write 3 4099 NULL
+tm6000_read_4151 tm6000_read 3 4151 NULL
+mpt_raid_phys_disk_get_num_paths_4155 mpt_raid_phys_disk_get_num_paths 0 4155 NULL
+msg_bits_4158 msg_bits 0-3-4 4158 NULL
+get_alua_req_4166 get_alua_req 3 4166 NULL
+blk_dropped_read_4168 blk_dropped_read 3 4168 NULL
+read_file_bool_4180 read_file_bool 3 4180 NULL
++ocfs2_find_cpos_for_right_leaf_4194 ocfs2_find_cpos_for_right_leaf 0 4194 NULL
+f1x_determine_channel_4202 f1x_determine_channel 2 4202 NULL
+_osd_req_list_objects_4204 _osd_req_list_objects 6 4204 NULL
+__snd_gf1_read_addr_4210 __snd_gf1_read_addr 0 4210 NULL
+ext4_new_inode_4247 ext4_new_inode 5 4247 NULL
-+xt_compat_add_offset_4289 xt_compat_add_offset 0 4289 NULL
+dvb_ringbuffer_pkt_read_user_4303 dvb_ringbuffer_pkt_read_user 2-3-5 4303 NULL
+ath6kl_wmi_tcmd_test_report_rx_4314 ath6kl_wmi_tcmd_test_report_rx 3 4314 NULL
++count_strings_4315 count_strings 0 4315 NULL
+snd_rawmidi_kernel_read_4328 snd_rawmidi_kernel_read 3 4328 NULL
-+__copy_from_user_inatomic_4365 __copy_from_user_inatomic 3 4365 NULL
++__copy_from_user_inatomic_4365 __copy_from_user_inatomic 0-3 4365 NULL nohasharray
++lookup_string_4365 lookup_string 0 4365 &__copy_from_user_inatomic_4365
+sys_setdomainname_4373 sys_setdomainname 2 4373 NULL
+irda_sendmsg_4388 irda_sendmsg 4 4388 NULL
-+access_process_vm_4412 access_process_vm 0-2-4 4412 NULL nohasharray
++access_process_vm_4412 access_process_vm 0 4412 NULL nohasharray
+cxacru_cm_get_array_4412 cxacru_cm_get_array 4 4412 &access_process_vm_4412
+libfc_vport_create_4415 libfc_vport_create 2 4415 NULL
+do_pages_stat_4437 do_pages_stat 2 4437 NULL
++memparse_4444 memparse 0 4444 NULL
++dn_alloc_send_pskb_4465 dn_alloc_send_pskb 2 4465 NULL
+at76_set_card_command_4471 at76_set_card_command 4 4471 NULL
+recv_control_msg_4476 recv_control_msg 5 4476 NULL
-+snd_seq_expand_var_event_4481 snd_seq_expand_var_event 0-5 4481 NULL
++snd_seq_expand_var_event_4481 snd_seq_expand_var_event 5-0 4481 NULL
+sys_semtimedop_4486 sys_semtimedop 3 4486 NULL
++ocfs2_grow_tree_4492 ocfs2_grow_tree 0 4492 NULL nohasharray
++udp_sendmsg_4492 udp_sendmsg 4 4492 &ocfs2_grow_tree_4492
+vmbus_establish_gpadl_4495 vmbus_establish_gpadl 3 4495 NULL
++l1oip_socket_parse_4507 l1oip_socket_parse 4 4507 NULL
+sys_llistxattr_4532 sys_llistxattr 3 4532 NULL
-+videobuf_vmalloc_to_sg_4548 videobuf_vmalloc_to_sg 2 4548 NULL
++Read_4560 Read 0 4560 NULL
+btrfs_file_extent_inline_item_len_4575 btrfs_file_extent_inline_item_len 0 4575 NULL
+bch_alloc_4593 bch_alloc 1 4593 NULL
++ocfs2_refcount_lock_4595 ocfs2_refcount_lock 0 4595 NULL
+rbd_create_rw_ops_4605 rbd_create_rw_ops 2 4605 NULL
+iwl_dbgfs_tx_queue_read_4635 iwl_dbgfs_tx_queue_read 3 4635 NULL
-+virtqueue_add_buf_gfp_4662 virtqueue_add_buf_gfp 3-4 4662 NULL
++virtqueue_add_buf_gfp_4662 virtqueue_add_buf_gfp 4-3 4662 NULL
+map_addr_4666 map_addr 6 4666 NULL
+skb_add_data_nocache_4682 skb_add_data_nocache 4 4682 NULL
+cx18_read_pos_4683 cx18_read_pos 3 4683 NULL
+short_retry_limit_read_4687 short_retry_limit_read 3 4687 NULL
+kone_receive_4690 kone_receive 4 4690 NULL
-+round_pipe_size_4701 round_pipe_size 0 4701 NULL
++round_pipe_size_4701 round_pipe_size 1-0 4701 NULL
+cxgbi_alloc_big_mem_4707 cxgbi_alloc_big_mem 1 4707 NULL
+trusted_instantiate_4710 trusted_instantiate 3 4710 NULL
+btmrvl_gpiogap_read_4718 btmrvl_gpiogap_read 3 4718 NULL
+ati_create_gatt_pages_4722 ati_create_gatt_pages 1 4722 NULL nohasharray
+show_header_4722 show_header 3 4722 &ati_create_gatt_pages_4722
++find_next_best_node_4774 find_next_best_node 1-0 4774 NULL
++ip6_ufo_append_data_4780 ip6_ufo_append_data 5-6-7 4780 NULL
+ncp__vol2io_4804 ncp__vol2io 5 4804 NULL
-+__iio_allocate_sw_ring_buffer_4843 __iio_allocate_sw_ring_buffer 3 4843 NULL
++__iio_allocate_sw_ring_buffer_4843 __iio_allocate_sw_ring_buffer 3-2 4843 NULL
+gigaset_if_receive_4861 gigaset_if_receive 3 4861 NULL
+key_tx_spec_read_4862 key_tx_spec_read 3 4862 NULL
-+ocfs2_defrag_extent_4873 ocfs2_defrag_extent 3 4873 NULL
++ocfs2_defrag_extent_4873 ocfs2_defrag_extent 2-3 4873 NULL
+hid_register_field_4874 hid_register_field 2-3 4874 NULL
+vga_arb_read_4886 vga_arb_read 3 4886 NULL
+sys_ipc_4889 sys_ipc 3 4889 NULL
-+sys_process_vm_writev_4928 sys_process_vm_writev 3-5 4928 NULL
-+ntfs_rl_insert_4931 ntfs_rl_insert 2-4 4931 NULL
++del_ptr_4894 del_ptr 0 4894 NULL
++sys_process_vm_writev_4928 sys_process_vm_writev 5-3 4928 NULL
++ocfs2_readahead_for_cow_4932 ocfs2_readahead_for_cow 4-3 4932 NULL
+ieee80211_if_fmt_ave_beacon_4941 ieee80211_if_fmt_ave_beacon 3 4941 NULL
+devm_kzalloc_4966 devm_kzalloc 2 4966 NULL
+compat_rawv6_setsockopt_4967 compat_rawv6_setsockopt 5 4967 NULL
+skb_network_header_len_4971 skb_network_header_len 0 4971 NULL
-+vmw_surface_define_size_4993 vmw_surface_define_size 0 4993 NULL
-+qla82xx_pci_mem_write_direct_5008 qla82xx_pci_mem_write_direct 2 5008 NULL
-+do_mincore_5018 do_mincore 0-1 5018 NULL
++do_mincore_5018 do_mincore 0-2-1 5018 NULL
+mtd_device_parse_register_5024 mtd_device_parse_register 5 5024 NULL
-+ocfs2_check_range_for_holes_5066 ocfs2_check_range_for_holes 2-3 5066 NULL
++ocfs2_check_range_for_holes_5066 ocfs2_check_range_for_holes 3-2 5066 NULL
++__kmalloc_track_caller_5071 __kmalloc_track_caller 1 5071 NULL
+snd_mixart_BA1_read_5082 snd_mixart_BA1_read 5 5082 NULL
+snd_emu10k1_ptr20_read_5087 snd_emu10k1_ptr20_read 0 5087 NULL
+get_random_bytes_5091 get_random_bytes 2 5091 NULL nohasharray
-+kfifo_copy_from_user_5091 kfifo_copy_from_user 3 5091 &get_random_bytes_5091 nohasharray
++kfifo_copy_from_user_5091 kfifo_copy_from_user 4-3-0 5091 &get_random_bytes_5091 nohasharray
+blk_rq_sectors_5091 blk_rq_sectors 0 5091 &kfifo_copy_from_user_5091
+sound_write_5102 sound_write 3 5102 NULL
++qib_7220_handle_hwerrors_5142 qib_7220_handle_hwerrors 3 5142 NULL
+ufs_add_fragments_5144 ufs_add_fragments 2 5144 NULL
-+compat_ptr_5159 compat_ptr 0-1 5159 NULL
++ocfs2_inode_lock_full_nested_5148 ocfs2_inode_lock_full_nested 0 5148 NULL
+__uwb_addr_print_5161 __uwb_addr_print 2 5161 NULL
+iwl_dbgfs_status_read_5171 iwl_dbgfs_status_read 3 5171 NULL
+acpi_pcc_get_sqty_5176 acpi_pcc_get_sqty 0 5176 NULL
-+sfi_map_memory_5183 sfi_map_memory 1-2 5183 NULL
-+skb_network_header_5203 skb_network_header 0 5203 NULL
++ds1wm_read_5200 ds1wm_read 0 5200 NULL
+pipe_set_size_5204 pipe_set_size 2 5204 NULL
+ppp_cp_parse_cr_5214 ppp_cp_parse_cr 4 5214 NULL
-+ssb_ioremap_5228 ssb_ioremap 2 5228 NULL
+isdn_ppp_skb_push_5236 isdn_ppp_skb_push 2 5236 NULL
-+do_atmif_sioc_5247 do_atmif_sioc 3 5247 NULL
++iommu_domain_identity_map_5284 iommu_domain_identity_map 2-3 5284 NULL
++usb_descriptor_fillbuf_5302 usb_descriptor_fillbuf 0 5302 NULL
++r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL
+pwr_elp_enter_read_5324 pwr_elp_enter_read 3 5324 NULL
-+allocate_cnodes_5329 allocate_cnodes 1 5329 NULL
+ad714x_i2c_read_5345 ad714x_i2c_read 4 5345 NULL
++ata_tlink_add_5349 ata_tlink_add 0 5349 NULL
+ps_pspoll_utilization_read_5361 ps_pspoll_utilization_read 3 5361 NULL
-+cciss_allocate_sg_chain_blocks_5368 cciss_allocate_sg_chain_blocks 3-2 5368 NULL
++cciss_allocate_sg_chain_blocks_5368 cciss_allocate_sg_chain_blocks 2-3 5368 NULL
+bitmap_fold_5396 bitmap_fold 4 5396 NULL
++perf_adjust_period_5408 perf_adjust_period 2-3 5408 NULL
+nilfs_palloc_entries_per_group_5418 nilfs_palloc_entries_per_group 0 5418 NULL
-+sfi_map_table_5462 sfi_map_table 1 5462 NULL
+xfs_efd_init_5463 xfs_efd_init 3 5463 NULL
+xfs_efi_init_5476 xfs_efi_init 2 5476 NULL
+cifs_security_flags_proc_write_5484 cifs_security_flags_proc_write 3 5484 NULL
@@ -104542,96 +105223,115 @@ index 0000000..6fcc08d
+ieee80211_if_fmt_last_beacon_5498 ieee80211_if_fmt_last_beacon 3 5498 &tomoyo_update_domain_5498
+__max_nr_grant_frames_5505 __max_nr_grant_frames 0 5505 NULL
+spidev_message_5518 spidev_message 3 5518 NULL
++sctp_make_op_error_space_5528 sctp_make_op_error_space 3 5528 NULL
+ieee80211_if_fmt_auto_open_plinks_5534 ieee80211_if_fmt_auto_open_plinks 3 5534 NULL
++iommu_prepare_identity_map_5540 iommu_prepare_identity_map 2-3 5540 NULL
++brcmu_pkt_buf_get_skb_5556 brcmu_pkt_buf_get_skb 1 5556 NULL
+le_readq_5557 le_readq 0 5557 NULL
+inw_5558 inw 0 5558 NULL
+__first_dma_cap_5560 __first_dma_cap 0 5560 NULL
+fir16_create_5574 fir16_create 3 5574 NULL
+bioset_create_5580 bioset_create 1 5580 NULL
++domain_sg_mapping_5586 domain_sg_mapping 4 5586 NULL
+do_msgrcv_5590 do_msgrcv 4 5590 NULL
-+usb_dump_device_descriptor_5599 usb_dump_device_descriptor 0 5599 NULL
+ldm_frag_add_5611 ldm_frag_add 2 5611 NULL
-+compat_copy_entries_5617 compat_copy_entries 0 5617 NULL
++hidp_output_raw_report_5629 hidp_output_raw_report 3 5629 NULL
+parse_arg_5657 parse_arg 2 5657 NULL
+ext4_xattr_get_5661 ext4_xattr_get 0 5661 NULL
+posix_clock_register_5662 posix_clock_register 2 5662 NULL
-+mthca_map_reg_5664 mthca_map_reg 2-3 5664 NULL
+get_arg_5694 get_arg 3 5694 NULL
++ntfs_attr_record_resize_5720 ntfs_attr_record_resize 0 5720 NULL
+vmw_kms_readback_5727 vmw_kms_readback 6 5727 NULL
+rts51x_transfer_data_partial_5735 rts51x_transfer_data_partial 6 5735 NULL
-+ubi_cdev_compat_ioctl_5746 ubi_cdev_compat_ioctl 3 5746 NULL
++get_packet_5747 get_packet 3 5747 NULL
+sctp_setsockopt_autoclose_5775 sctp_setsockopt_autoclose 3 5775 NULL
++mlx4_alloc_resize_buf_5778 mlx4_alloc_resize_buf 3 5778 NULL
+compat_sys_writev_5784 compat_sys_writev 3 5784 NULL
+__vxge_hw_blockpool_malloc_5786 __vxge_hw_blockpool_malloc 2 5786 NULL
++lpfc_sli_issue_mbox_5792 lpfc_sli_issue_mbox 0 5792 NULL
+skb_copy_datagram_iovec_5806 skb_copy_datagram_iovec 2-4 5806 NULL
+ceph_x_encrypt_buflen_5829 ceph_x_encrypt_buflen 0-1 5829 NULL
-+autofs4_root_compat_ioctl_5838 autofs4_root_compat_ioctl 3 5838 NULL
-+xen_request_microcode_user_5840 xen_request_microcode_user 3 5840 NULL
+ceph_msg_new_5846 ceph_msg_new 2 5846 NULL
+ixgb_check_copybreak_5847 ixgb_check_copybreak 3 5847 NULL
+setup_req_5848 setup_req 3 5848 NULL
-+compat_sys_move_pages_5861 compat_sys_move_pages 2 5861 NULL nohasharray
-+uinput_compat_ioctl_5861 uinput_compat_ioctl 3 5861 &compat_sys_move_pages_5861
++rx_q_entry_to_length_5855 rx_q_entry_to_length 0-1 5855 NULL
++compat_sys_move_pages_5861 compat_sys_move_pages 2 5861 NULL
++config_buf_5862 config_buf 0 5862 NULL
++ext4_ext_correct_indexes_5865 ext4_ext_correct_indexes 0 5865 NULL
+port_show_regs_5904 port_show_regs 3 5904 NULL
+uhci_debug_read_5911 uhci_debug_read 3 5911 NULL
-+qla82xx_pci_mem_read_2M_5912 qla82xx_pci_mem_read_2M 2 5912 NULL
-+ttm_bo_kmap_ttm_5922 ttm_bo_kmap_ttm 3 5922 NULL
+lbs_highsnr_read_5931 lbs_highsnr_read 3 5931 NULL
+edac_device_alloc_ctl_info_5941 edac_device_alloc_ctl_info 1 5941 NULL
+tipc_subseq_alloc_5957 tipc_subseq_alloc 1 5957 NULL
+__apu_get_register_5967 __apu_get_register 0 5967 NULL
+ieee80211_if_fmt_rc_rateidx_mask_5ghz_5971 ieee80211_if_fmt_rc_rateidx_mask_5ghz 3 5971 NULL
-+ntfs_rl_append_6037 ntfs_rl_append 2-4 6037 NULL
++jbd2_journal_stop_5979 jbd2_journal_stop 0 5979 NULL
++device_add_attributes_6058 device_add_attributes 0 6058 NULL
+send_video_command_6073 send_video_command 4 6073 NULL nohasharray
+sctp_setsockopt_connectx_6073 sctp_setsockopt_connectx 3 6073 &send_video_command_6073
++logarithmic_accumulation_6094 logarithmic_accumulation 0-2-1 6094 NULL
+ipmi_addr_length_6110 ipmi_addr_length 0 6110 NULL
+dfs_global_file_write_6112 dfs_global_file_write 3 6112 NULL
+netfs_trans_alloc_6136 netfs_trans_alloc 2-4 6136 NULL
-+skb_end_pointer_6144 skb_end_pointer 0 6144 NULL
+ivtv_copy_buf_to_user_6159 ivtv_copy_buf_to_user 4 6159 NULL
-+vdma_mem_alloc_6171 vdma_mem_alloc 1 6171 NULL
+wl1251_cmd_template_set_6172 wl1251_cmd_template_set 4 6172 NULL
++i915_gem_execbuffer_move_to_gpu_6197 i915_gem_execbuffer_move_to_gpu 0 6197 NULL
++nfc_alloc_skb_6216 nfc_alloc_skb 1 6216 NULL
+v4l2_ctrl_new_std_menu_6221 v4l2_ctrl_new_std_menu 4 6221 NULL
+mqueue_read_file_6228 mqueue_read_file 3 6228 NULL
-+au_br_do_del_brp_6232 au_br_do_del_brp 3 6232 NULL
++ata_host_register_6229 ata_host_register 0 6229 NULL
+f_hidg_read_6238 f_hidg_read 3 6238 NULL
+fbcon_prepare_logo_6246 fbcon_prepare_logo 5 6246 NULL
++ext4_ext_split_6249 ext4_ext_split 0 6249 NULL
+pcpu_next_pop_6277 pcpu_next_pop 4 6277 NULL
+snd_hda_override_conn_list_6282 snd_hda_override_conn_list 0 6282 NULL nohasharray
+xenbus_file_write_6282 xenbus_file_write 3 6282 &snd_hda_override_conn_list_6282
+iwl4965_rs_sta_dbgfs_stats_table_read_6289 iwl4965_rs_sta_dbgfs_stats_table_read 3 6289 NULL
+set_local_name_6310 set_local_name 4 6310 NULL
++hfa384x_inw_6329 hfa384x_inw 0 6329 NULL
+_proc_do_string_6376 _proc_do_string 2 6376 NULL
-+osd_req_read_sg_kern_6378 osd_req_read_sg_kern 5 6378 NULL
++global_reclaimable_pages_6378 global_reclaimable_pages 0 6378 NULL nohasharray
++osd_req_read_sg_kern_6378 osd_req_read_sg_kern 5 6378 &global_reclaimable_pages_6378
++BcmFlash2xBulkRead_6395 BcmFlash2xBulkRead 0 6395 NULL
++bt_skb_alloc_6404 bt_skb_alloc 1 6404 NULL
++l2up_create_6430 l2up_create 3 6430 NULL
+ipr_change_queue_depth_6431 ipr_change_queue_depth 2 6431 NULL
+__alloc_bootmem_node_nopanic_6432 __alloc_bootmem_node_nopanic 2 6432 NULL
-+ext4_compat_ioctl_6471 ext4_compat_ioctl 3 6471 NULL
++ceph_sync_write_6466 ceph_sync_write 3 6466 NULL
+ieee80211_if_fmt_dot11MeshMaxRetries_6476 ieee80211_if_fmt_dot11MeshMaxRetries 3 6476 NULL
+cipso_v4_map_lvl_hton_6490 cipso_v4_map_lvl_hton 0 6490 NULL
+dbg_intr_buf_6501 dbg_intr_buf 2 6501 NULL
++ttm_get_pages_6504 ttm_get_pages 4 6504 NULL
+mei_read_6507 mei_read 3 6507 NULL
+read_file_disable_ani_6536 read_file_disable_ani 3 6536 NULL
+rndis_set_oid_6547 rndis_set_oid 4 6547 NULL
+wdm_read_6549 wdm_read 3 6549 NULL
+fb_alloc_cmap_6554 fb_alloc_cmap 2 6554 NULL
-+usb_dump_config_descriptor_6572 usb_dump_config_descriptor 0 6572 NULL
-+usemap_size_6601 usemap_size 0 6601 NULL
++bt_skb_send_alloc_6581 bt_skb_send_alloc 2 6581 NULL
++snd_pcm_hw_refine_old_user_6586 snd_pcm_hw_refine_old_user 0 6586 NULL
+snmp_mib_init_6604 snmp_mib_init 2-3 6604 NULL
+ecryptfs_filldir_6622 ecryptfs_filldir 3 6622 NULL
-+virtscsi_alloc_tgt_6643 virtscsi_alloc_tgt 2 6643 NULL
++dn_alloc_skb_6631 dn_alloc_skb 2 6631 NULL
+process_rcvd_data_6679 process_rcvd_data 3 6679 NULL
-+ql_process_mac_rx_skb_6689 ql_process_mac_rx_skb 4 6689 NULL
-+btrfs_lookup_csums_range_6696 btrfs_lookup_csums_range 2 6696 NULL
++iwl_dbgfs_clear_traffic_statistics_write_6681 iwl_dbgfs_clear_traffic_statistics_write 3 6681 NULL
++ql_process_mac_rx_skb_6689 ql_process_mac_rx_skb 4 6689 NULL nohasharray
++pvscsi_allocate_rings_6689 pvscsi_allocate_rings 0 6689 &ql_process_mac_rx_skb_6689
++ieee80211_build_preq_ies_6691 ieee80211_build_preq_ies 0 6691 NULL
++btrfs_lookup_csums_range_6696 btrfs_lookup_csums_range 2-3 6696 NULL
+ps_pspoll_max_apturn_read_6699 ps_pspoll_max_apturn_read 3 6699 NULL
+mpeg_read_6708 mpeg_read 3 6708 NULL
++ibmpex_query_sensor_count_6709 ibmpex_query_sensor_count 0 6709 NULL
+video_proc_write_6724 video_proc_write 3 6724 NULL
+posix_acl_xattr_count_6725 posix_acl_xattr_count 0-1 6725 NULL
+rds_rdma_pages_6735 rds_rdma_pages 0 6735 NULL
++ocfs2_insert_extent_6737 ocfs2_insert_extent 0 6737 NULL
+device_queue_depth_6771 device_queue_depth 0 6771 NULL
-+sfi_check_table_6772 sfi_check_table 1 6772 NULL
++kobject_add_varg_6781 kobject_add_varg 0 6781 NULL
+iwl_dbgfs_channels_read_6784 iwl_dbgfs_channels_read 3 6784 NULL
+ieee80211_if_read_6785 ieee80211_if_read 3 6785 NULL
+hdlcdrv_register_6792 hdlcdrv_register 2 6792 NULL
++ocfs2_calc_refcount_meta_credits_6802 ocfs2_calc_refcount_meta_credits 0 6802 NULL
++lbs_rdrf_write_6826 lbs_rdrf_write 3 6826 NULL
+make_8259A_irq_6828 make_8259A_irq 1 6828 NULL
+calc_pages_for_6838 calc_pages_for 0-1-2 6838 NULL
+mon_bin_read_6841 mon_bin_read 3 6841 NULL
@@ -104643,63 +105343,89 @@ index 0000000..6fcc08d
+proc_sessionid_read_6911 proc_sessionid_read 3 6911 &spi_show_regs_6911
+__kfifo_dma_in_finish_r_6913 __kfifo_dma_in_finish_r 2-3 6913 NULL
+ieee80211_rx_mgmt_probe_resp_6918 ieee80211_rx_mgmt_probe_resp 3 6918 NULL
-+ieee80211_send_probe_req_6924 ieee80211_send_probe_req 6 6924 NULL
++ieee80211_send_probe_req_6924 ieee80211_send_probe_req 6-4 6924 NULL
+cache_do_downcall_6926 cache_do_downcall 3 6926 NULL
-+qsfp_cks_6945 qsfp_cks 0-2 6945 NULL
++ipath_verbs_send_dma_6929 ipath_verbs_send_dma 6 6929 NULL
++qsfp_cks_6945 qsfp_cks 2-0 6945 NULL
+ab3100_get_register_page_interruptible_6951 ab3100_get_register_page_interruptible 4 6951 NULL
++dn_ifaddr_nlmsg_size_6955 dn_ifaddr_nlmsg_size 0 6955 NULL nohasharray
++tg3_nvram_write_block_unbuffered_6955 tg3_nvram_write_block_unbuffered 3 6955 &dn_ifaddr_nlmsg_size_6955
+pch_uart_hal_read_6961 pch_uart_hal_read 0 6961 NULL
-+videobuf_dma_init_kernel_6963 videobuf_dma_init_kernel 3 6963 NULL
+crypto_authenc_esn_setkey_6985 crypto_authenc_esn_setkey 3 6985 NULL
+request_key_async_6990 request_key_async 4 6990 NULL
+r871x_set_wpa_ie_7000 r871x_set_wpa_ie 3 7000 NULL
+cipso_v4_gentag_enum_7006 cipso_v4_gentag_enum 0 7006 NULL
+tracing_cpumask_read_7010 tracing_cpumask_read 3 7010 NULL
++ld_usb_write_7022 ld_usb_write 3 7022 NULL
+wimax_msg_7030 wimax_msg 4 7030 NULL
+ipath_get_base_info_7043 ipath_get_base_info 3 7043 NULL
+snd_pcm_oss_bytes_7051 snd_pcm_oss_bytes 2 7051 NULL
++sctp_make_op_error_7057 sctp_make_op_error 6-5 7057 NULL
++hci_sock_recvmsg_7072 hci_sock_recvmsg 4 7072 NULL
+event_enable_read_7074 event_enable_read 3 7074 NULL
+beacon_interval_read_7091 beacon_interval_read 3 7091 NULL
-+lp_compat_ioctl_7098 lp_compat_ioctl 3 7098 NULL
+check_header_7108 check_header 0 7108 NULL
++do_async_mmap_readahead_7123 do_async_mmap_readahead 5 7123 NULL
++qib_format_hwerrors_7133 qib_format_hwerrors 5 7133 NULL
++send_mpa_reject_7135 send_mpa_reject 3 7135 NULL
++ipv6_recv_rxpmtu_7142 ipv6_recv_rxpmtu 3 7142 NULL
++ocfs2_get_left_path_7159 ocfs2_get_left_path 0 7159 NULL
+__alloc_objio_seg_7203 __alloc_objio_seg 1 7203 NULL nohasharray
+utf16_strsize_7203 utf16_strsize 0 7203 &__alloc_objio_seg_7203
-+sys32_ipc_7238 sys32_ipc 3-5-6 7238 NULL
-+dma_ops_alloc_addresses_7272 dma_ops_alloc_addresses 3-4-5 7272 NULL
++sys32_ipc_7238 sys32_ipc 3 7238 NULL
++hdlc_loop_7255 hdlc_loop 0 7255 NULL
++snd_mask_refine_7267 snd_mask_refine 0 7267 NULL
++f_midi_start_ep_7270 f_midi_start_ep 0 7270 NULL
++dma_ops_alloc_addresses_7272 dma_ops_alloc_addresses 3-4-5-0 7272 NULL
++get_string_7302 get_string 0 7302 NULL
++ieee80211_compatible_rates_7318 ieee80211_compatible_rates 0 7318 NULL
++wait_on_sync_kiocb_7327 wait_on_sync_kiocb 0 7327 NULL
+mgmt_control_7349 mgmt_control 3 7349 NULL
++t1_get_slice_7350 t1_get_slice 0 7350 NULL
+ext3_free_blocks_7362 ext3_free_blocks 3-4 7362 NULL
+ieee80211_if_read_dot11MeshHWMPactivePathTimeout_7368 ieee80211_if_read_dot11MeshHWMPactivePathTimeout 3 7368 NULL
-+hweight_long_7388 hweight_long 0-1 7388 NULL
++schedule_timeout_7371 schedule_timeout 0 7371 NULL
++hweight_long_7388 hweight_long 1-0 7388 NULL
+sl_change_mtu_7396 sl_change_mtu 2 7396 NULL
+readb_7401 readb 0 7401 NULL
+drm_property_create_blob_7414 drm_property_create_blob 2 7414 NULL
-+kvm_pv_mmu_op_7436 kvm_pv_mmu_op 3 7436 NULL
++kvm_pv_mmu_op_7436 kvm_pv_mmu_op 3-2 7436 NULL
+ip_options_get_alloc_7448 ip_options_get_alloc 1 7448 NULL
++rt2x00debug_read_queue_stats_7455 rt2x00debug_read_queue_stats 3 7455 NULL
+ms_rw_multi_sector_7459 ms_rw_multi_sector 3-4 7459 NULL
+__mutex_lock_common_7469 __mutex_lock_common 0 7469 NULL
+garp_request_join_7471 garp_request_join 4 7471 NULL
+compat_sys_msgrcv_7482 compat_sys_msgrcv 2 7482 NULL
++get_stats_7483 get_stats 0 7483 NULL
+snd_pcm_lib_read1_7491 snd_pcm_lib_read1 0-3 7491 NULL
+sdhci_alloc_host_7509 sdhci_alloc_host 2 7509 NULL nohasharray
+ahash_instance_headroom_7509 ahash_instance_headroom 0 7509 &sdhci_alloc_host_7509
+goal_in_my_reservation_7553 goal_in_my_reservation 3 7553 NULL
-+ext3_try_to_allocate_7590 ext3_try_to_allocate 5-3 7590 NULL
-+groups_alloc_7614 groups_alloc 1 7614 NULL
-+sg_virt_7616 sg_virt 0 7616 NULL
++ext4_ext_insert_extent_7576 ext4_ext_insert_extent 0 7576 NULL
++ext3_try_to_allocate_7590 ext3_try_to_allocate 3-5-0 7590 NULL
++create_dir_7614 create_dir 0 7614 NULL nohasharray
++groups_alloc_7614 groups_alloc 1 7614 &create_dir_7614
+set_connectable_7649 set_connectable 4 7649 NULL
-+acpi_ex_allocate_name_string_7685 acpi_ex_allocate_name_string 2-1 7685 NULL
++skb_copy_expand_7685 skb_copy_expand 3-2 7685 NULL nohasharray
++acpi_ex_allocate_name_string_7685 acpi_ex_allocate_name_string 1-2 7685 &skb_copy_expand_7685
+acpi_ns_get_pathname_length_7699 acpi_ns_get_pathname_length 0 7699 NULL
+dev_write_7708 dev_write 3 7708 NULL
-+brcms_attach_7709 brcms_attach 3 7709 NULL
++dbg_check_cats_7713 dbg_check_cats 0 7713 NULL
++pci_raw_set_power_state_7729 pci_raw_set_power_state 0 7729 NULL
+manip_pkt_7741 manip_pkt 3 7741 NULL
+vxge_device_register_7752 vxge_device_register 4 7752 NULL
+pohmelfs_path_length_7758 pohmelfs_path_length 0 7758 NULL
++btrfs_force_ra_7761 btrfs_force_ra 5-4 7761 NULL
+osdv2_attr_list_elem_size_7763 osdv2_attr_list_elem_size 0-1 7763 NULL
+ubi_io_read_vid_hdr_7766 ubi_io_read_vid_hdr 0 7766 NULL
++paths_from_inode_7774 paths_from_inode 0 7774 NULL
+alloc_candev_7776 alloc_candev 1-2 7776 NULL
+dfs_global_file_read_7787 dfs_global_file_read 3 7787 NULL
-+bnx2_nvram_write_7790 bnx2_nvram_write 4-2 7790 NULL
++bnx2_nvram_write_7790 bnx2_nvram_write 2-4 7790 NULL
+diva_os_copy_from_user_7792 diva_os_copy_from_user 4 7792 NULL
+ubifs_leb_read_7828 ubifs_leb_read 0 7828 NULL
++btrfs_find_space_for_alloc_7876 btrfs_find_space_for_alloc 2 7876 NULL
++config_desc_7878 config_desc 0 7878 NULL
+dvb_dmxdev_read_sec_7892 dvb_dmxdev_read_sec 4 7892 NULL
+xfs_trans_get_efi_7898 xfs_trans_get_efi 2 7898 NULL
+gfs2_tune_get_i_7903 gfs2_tune_get_i 0 7903 NULL
@@ -104709,52 +105435,63 @@ index 0000000..6fcc08d
+f_hidg_write_7932 f_hidg_write 3 7932 NULL
+io_apic_setup_irq_pin_once_7934 io_apic_setup_irq_pin_once 1 7934 NULL
+smk_write_load_self_7958 smk_write_load_self 3 7958 NULL
-+arch_gnttab_map_shared_7970 arch_gnttab_map_shared 3 7970 NULL
+sys_mbind_7990 sys_mbind 5 7990 NULL
+sep_lock_user_pages_8000 sep_lock_user_pages 2-3 8000 NULL
++extend_or_restart_transaction_8008 extend_or_restart_transaction 0 8008 NULL
+vcs_read_8017 vcs_read 3 8017 NULL
-+normalize_up_8037 normalize_up 0-1-2 8037 NULL
++normalize_up_8037 normalize_up 0-2-1 8037 NULL
+vhost_add_used_and_signal_n_8038 vhost_add_used_and_signal_n 4 8038 NULL
++iser_rcv_completion_8048 iser_rcv_completion 2 8048 NULL
+ms_read_multiple_pages_8052 ms_read_multiple_pages 5-4 8052 NULL
+leb_read_lock_8070 leb_read_lock 0 8070 NULL
-+alloc_targets_8074 alloc_targets 2 8074 NULL
++ext4_ext_map_blocks_8078 ext4_ext_map_blocks 0 8078 NULL
+venus_lookup_8121 venus_lookup 4 8121 NULL
+ieee80211_if_fmt_num_buffered_multicast_8127 ieee80211_if_fmt_num_buffered_multicast 3 8127 NULL
++CalcCalPLL_8136 CalcCalPLL 0 8136 NULL
+ext_sd_execute_write_data_8175 ext_sd_execute_write_data 9 8175 NULL
-+dma_map_area_8178 dma_map_area 5-2-3 8178 NULL
++dma_map_area_8178 dma_map_area 3-2-5-0 8178 NULL
+__sk_mem_schedule_8185 __sk_mem_schedule 2 8185 NULL
+ieee80211_if_fmt_dot11MeshHoldingTimeout_8187 ieee80211_if_fmt_dot11MeshHoldingTimeout 3 8187 NULL
-+__nf_nat_mangle_tcp_packet_8190 __nf_nat_mangle_tcp_packet 7-5 8190 NULL
++__nf_nat_mangle_tcp_packet_8190 __nf_nat_mangle_tcp_packet 5-7 8190 NULL
+recent_mt_proc_write_8206 recent_mt_proc_write 3 8206 NULL
++__ocfs2_lock_refcount_tree_8207 __ocfs2_lock_refcount_tree 0 8207 NULL
+rt2x00debug_write_bbp_8212 rt2x00debug_write_bbp 3 8212 NULL
+ad7879_spi_multi_read_8218 ad7879_spi_multi_read 3 8218 NULL
+play_iframe_8219 play_iframe 3 8219 NULL
+sctp_ssnmap_size_8228 sctp_ssnmap_size 0-1-2 8228 NULL
+check_xattr_ref_inode_8244 check_xattr_ref_inode 0 8244 NULL
++add_rx_skb_8257 add_rx_skb 3 8257 NULL
+t3_init_l2t_8261 t3_init_l2t 1 8261 NULL
+init_cdev_8274 init_cdev 1 8274 NULL
+qib_decode_7220_err_8315 qib_decode_7220_err 3 8315 NULL
++snd_pcm_update_state_8320 snd_pcm_update_state 0 8320 NULL
+construct_key_and_link_8321 construct_key_and_link 4 8321 NULL
+ipwireless_send_packet_8328 ipwireless_send_packet 4 8328 NULL
+__c4iw_init_resource_fifo_8334 __c4iw_init_resource_fifo 3 8334 NULL
+tracing_entries_read_8345 tracing_entries_read 3 8345 NULL
+ping_getfrag_8360 ping_getfrag 4-3 8360 NULL
++ath6kl_lrssi_roam_write_8362 ath6kl_lrssi_roam_write 3 8362 NULL
++ocfs2_decrease_refcount_rec_8385 ocfs2_decrease_refcount_rec 0 8385 NULL
+xdi_copy_from_user_8395 xdi_copy_from_user 4 8395 NULL
+zd_rf_scnprint_id_8406 zd_rf_scnprint_id 0-3 8406 NULL
+uvc_v4l2_ioctl_8411 uvc_v4l2_ioctl 2 8411 NULL
+snd_usb_ctl_msg_8436 snd_usb_ctl_msg 8 8436 NULL
++generic_bin_search_8440 generic_bin_search 0 8440 NULL
+afs_cell_lookup_8482 afs_cell_lookup 2 8482 NULL
++fore200e_chunk_alloc_8501 fore200e_chunk_alloc 4-3 8501 NULL
+dev_config_8506 dev_config 3 8506 NULL
+ACL_to_cifs_posix_8509 ACL_to_cifs_posix 3 8509 NULL
+utf16_strnlen_8513 utf16_strnlen 0 8513 NULL
-+pnp_resource_len_8532 pnp_resource_len 0 8532 NULL
-+alloc_pg_vec_8533 alloc_pg_vec 2 8533 NULL
++snd_malloc_sgbuf_pages_8532 snd_malloc_sgbuf_pages 2 8532 NULL
+ocfs2_read_virt_blocks_8538 ocfs2_read_virt_blocks 2-3 8538 NULL
+profile_remove_8556 profile_remove 3 8556 NULL
-+cache_slow_downcall_8570 cache_slow_downcall 2 8570 NULL
-+mga_ioremap_8571 mga_ioremap 1-2 8571 NULL
++pci_msi_check_device_8570 pci_msi_check_device 0 8570 NULL nohasharray
++cache_slow_downcall_8570 cache_slow_downcall 2 8570 &pci_msi_check_device_8570
+isr_dma0_done_read_8574 isr_dma0_done_read 3 8574 NULL
+tower_write_8580 tower_write 3 8580 NULL
++ocfs2_reserve_local_alloc_bits_8581 ocfs2_reserve_local_alloc_bits 0 8581 NULL
++tsi721_open_inb_mbox_8598 tsi721_open_inb_mbox 4 8598 NULL
++rtllib_MFIE_rate_len_8606 rtllib_MFIE_rate_len 0 8606 NULL
+shash_setkey_unaligned_8620 shash_setkey_unaligned 3 8620 NULL
+it821x_firmware_command_8628 it821x_firmware_command 3 8628 NULL
+scsi_dma_map_8632 scsi_dma_map 0 8632 NULL
@@ -104768,12 +105505,18 @@ index 0000000..6fcc08d
+i_size_read_8703 i_size_read 0 8703 NULL nohasharray
+init_header_8703 init_header 0 8703 &i_size_read_8703
+cifs_writedata_alloc_8710 cifs_writedata_alloc 1 8710 NULL
-+ctrl_out_8712 ctrl_out 3-5 8712 NULL
++ctrl_out_8712 ctrl_out 5-3 8712 NULL
++tracing_max_lat_write_8728 tracing_max_lat_write 3 8728 NULL
+jffs2_acl_count_8729 jffs2_acl_count 0-1 8729 NULL
-+em28xx_init_isoc_8755 em28xx_init_isoc 3-2 8755 NULL
++ocfs2_find_path_8754 ocfs2_find_path 0 8754 NULL
++em28xx_init_isoc_8755 em28xx_init_isoc 3-2-4-0 8755 NULL
++yurex_write_8761 yurex_write 3 8761 NULL
+joydev_compat_ioctl_8765 joydev_compat_ioctl 2 8765 NULL
-+__bitmap_weight_8796 __bitmap_weight 0-2 8796 NULL
++kstrtoint_from_user_8778 kstrtoint_from_user 2 8778 NULL
++aligned_nrpages_8791 aligned_nrpages 0-1-2 8791 NULL
++__bitmap_weight_8796 __bitmap_weight 2-0 8796 NULL
+cpuset_common_file_read_8800 cpuset_common_file_read 5 8800 NULL
++intel_ring_begin_8808 intel_ring_begin 0 8808 NULL
+metronomefb_write_8823 metronomefb_write 3 8823 NULL
+get_queue_depth_8833 get_queue_depth 0 8833 NULL
+dvb_ringbuffer_pkt_next_8834 dvb_ringbuffer_pkt_next 0-2 8834 NULL
@@ -104781,8 +105524,11 @@ index 0000000..6fcc08d
+wa_nep_queue_8858 wa_nep_queue 2 8858 NULL
+iwl_dbgfs_debug_level_write_8871 iwl_dbgfs_debug_level_write 3 8871 NULL
+compressed_bio_size_8887 compressed_bio_size 0-2 8887 NULL
-+tracing_max_lat_read_8890 tracing_max_lat_read 3 8890 NULL
++ab3100_get_set_reg_8890 ab3100_get_set_reg 3 8890 NULL nohasharray
++tracing_max_lat_read_8890 tracing_max_lat_read 3 8890 &ab3100_get_set_reg_8890
+sdio_max_byte_size_8907 sdio_max_byte_size 0 8907 NULL
++sysfs_merge_group_8917 sysfs_merge_group 0 8917 NULL
++write_file_ani_8918 write_file_ani 3 8918 NULL
+layout_commit_8926 layout_commit 3 8926 NULL
+adjust_priv_size_8935 adjust_priv_size 0-1 8935 NULL
+driver_stats_read_8944 driver_stats_read 3 8944 NULL
@@ -104793,213 +105539,265 @@ index 0000000..6fcc08d
+venus_mkdir_8967 venus_mkdir 4 8967 NULL
+vol_cdev_read_8968 vol_cdev_read 3 8968 NULL nohasharray
+seq_open_net_8968 seq_open_net 4 8968 &vol_cdev_read_8968
-+bio_integrity_get_tag_8974 bio_integrity_get_tag 3 8974 NULL nohasharray
-+selinux_proc_get_sid_8974 selinux_proc_get_sid 2 8974 &bio_integrity_get_tag_8974
++bio_integrity_get_tag_8974 bio_integrity_get_tag 3 8974 NULL
++btrfs_alloc_free_block_8986 btrfs_alloc_free_block 8 8986 NULL
++get_pipes_9008 get_pipes 0 9008 NULL
+snd_emu10k1_ptr_read_9026 snd_emu10k1_ptr_read 0-2 9026 NULL
++fd_ioctl_9028 fd_ioctl 3 9028 NULL
+nla_put_9042 nla_put 3 9042 NULL
-+snd_emu10k1_synth_copy_from_user_9061 snd_emu10k1_synth_copy_from_user 3-5 9061 NULL
++snd_emu10k1_synth_copy_from_user_9061 snd_emu10k1_synth_copy_from_user 5-3 9061 NULL
+snd_gus_dram_peek_9062 snd_gus_dram_peek 4 9062 NULL
+fib_info_hash_alloc_9075 fib_info_hash_alloc 1 9075 NULL
-+string_9080 string 0 9080 NULL
-+create_queues_9088 create_queues 2-3 9088 NULL
++create_queues_9088 create_queues 3-2 9088 NULL
+ftdi_prepare_write_buffer_9093 ftdi_prepare_write_buffer 3 9093 NULL
+caif_stream_sendmsg_9110 caif_stream_sendmsg 4 9110 NULL
+pmcraid_change_queue_depth_9116 pmcraid_change_queue_depth 2 9116 NULL
++brcmf_sdbrcm_send_buf_9129 brcmf_sdbrcm_send_buf 6 9129 NULL
++apei_resources_merge_9149 apei_resources_merge 0 9149 NULL
+dbg_command_buf_9165 dbg_command_buf 2 9165 NULL
+isr_irqs_read_9181 isr_irqs_read 3 9181 NULL
+alloc_group_attrs_9194 alloc_group_attrs 2 9194 NULL nohasharray
+altera_swap_ir_9194 altera_swap_ir 2 9194 &alloc_group_attrs_9194
-+gx1_gx_base_9198 gx1_gx_base 0 9198 NULL
-+sep_prepare_input_output_dma_table_9200 sep_prepare_input_output_dma_table 2-4-3 9200 NULL
++sep_prepare_input_output_dma_table_9200 sep_prepare_input_output_dma_table 4-3-2 9200 NULL
+snd_m3_get_pointer_9206 snd_m3_get_pointer 0 9206 NULL
+l2cap_create_connless_pdu_9222 l2cap_create_connless_pdu 3 9222 NULL
+sctp_getsockopt_delayed_ack_9232 sctp_getsockopt_delayed_ack 2 9232 NULL
-+ocfs2_clear_ext_refcount_9256 ocfs2_clear_ext_refcount 4 9256 NULL
++ext4_mark_iloc_dirty_9239 ext4_mark_iloc_dirty 0 9239 NULL
++schedule_erase_9240 schedule_erase 0 9240 NULL
++cmtp_add_msgpart_9252 cmtp_add_msgpart 4 9252 NULL
++ocfs2_clear_ext_refcount_9256 ocfs2_clear_ext_refcount 0-4 9256 NULL
+tcf_csum_ipv4_icmp_9258 tcf_csum_ipv4_icmp 3 9258 NULL
++btrfs_search_slot_9264 btrfs_search_slot 0 9264 NULL
++ocfs2_merge_rec_right_9267 ocfs2_merge_rec_right 0 9267 NULL
+sparse_early_usemaps_alloc_node_9269 sparse_early_usemaps_alloc_node 4 9269 NULL
+hdpvr_read_9273 hdpvr_read 3 9273 NULL
-+qla82xx_pci_set_window_9303 qla82xx_pci_set_window 0-2 9303 NULL
+iwl_dbgfs_stations_read_9309 iwl_dbgfs_stations_read 3 9309 NULL
+ceph_sync_setxattr_9310 ceph_sync_setxattr 4 9310 NULL
+sk_rmem_schedule_9331 sk_rmem_schedule 2 9331 NULL
+ocfs2_orphan_for_truncate_9342 ocfs2_orphan_for_truncate 4 9342 NULL
++get_request_type_9393 get_request_type 0 9393 NULL nohasharray
++mlx4_bitmap_init_9393 mlx4_bitmap_init 5-2 9393 &get_request_type_9393
+read_9397 read 3 9397 NULL
++set_gpio_9412 set_gpio 0 9412 NULL
+bm_realloc_pages_9431 bm_realloc_pages 2 9431 NULL
+ffs_ep0_write_9438 ffs_ep0_write 3 9438 NULL
+kmalloc_array_9444 kmalloc_array 1-2 9444 NULL
+ieee80211_if_fmt_fwded_unicast_9454 ieee80211_if_fmt_fwded_unicast 3 9454 NULL
++mcs_unwrap_mir_9455 mcs_unwrap_mir 3 9455 NULL
+ext3_xattr_set_acl_9467 ext3_xattr_set_acl 4 9467 NULL
+agp_generic_alloc_user_9470 agp_generic_alloc_user 1 9470 NULL
+rbd_coll_end_req_9472 rbd_coll_end_req 3 9472 NULL
+__alloc_preds_9492 __alloc_preds 2 9492 NULL
++sock_recvmsg_9500 sock_recvmsg 0 9500 NULL
++lbs_threshold_write_9502 lbs_threshold_write 5 9502 NULL
+lp_write_9511 lp_write 3 9511 NULL
++mext_calc_swap_extents_9517 mext_calc_swap_extents 4 9517 NULL
+scsi_tgt_kspace_exec_9522 scsi_tgt_kspace_exec 8 9522 NULL
+read_file_dma_9530 read_file_dma 3 9530 NULL
+ext3_alloc_branch_9534 ext3_alloc_branch 5 9534 NULL
++nlmsg_parse_9536 nlmsg_parse 2 9536 NULL
+pohmelfs_send_readpages_9537 pohmelfs_send_readpages 3 9537 NULL
+audit_log_n_untrustedstring_9548 audit_log_n_untrustedstring 3 9548 NULL
++readl_9557 readl 0 9557 NULL
+fw_node_create_9559 fw_node_create 2 9559 NULL
-+kobj_map_9566 kobj_map 2-3 9566 NULL
++kobj_map_9566 kobj_map 3-2 9566 NULL
+biovec_create_pools_9575 biovec_create_pools 2 9575 NULL
++ieee80211_tdls_mgmt_9581 ieee80211_tdls_mgmt 8 9581 NULL
+lguest_setup_irq_9587 lguest_setup_irq 1 9587 NULL
+do_sync_9604 do_sync 1 9604 NULL
+snd_emu10k1_fx8010_read_9605 snd_emu10k1_fx8010_read 5-6 9605 NULL
++ocfs2_claim_suballoc_bits_9615 ocfs2_claim_suballoc_bits 0 9615 NULL
+saa7164_buffer_alloc_user_9627 saa7164_buffer_alloc_user 2 9627 NULL
-+compat_sys_keyctl_9639 compat_sys_keyctl 4-2-3 9639 NULL
++acpi_ex_insert_into_field_9638 acpi_ex_insert_into_field 3 9638 NULL
++compat_sys_keyctl_9639 compat_sys_keyctl 4 9639 NULL
+ocfs2_xattr_get_rec_9652 ocfs2_xattr_get_rec 0 9652 NULL
-+snd_intelmad_register_irq_9654 snd_intelmad_register_irq 2-3 9654 NULL
-+uvc_alloc_buffers_9656 uvc_alloc_buffers 2-3 9656 NULL
+queue_received_packet_9657 queue_received_packet 5 9657 NULL
+snd_opl4_mem_proc_write_9670 snd_opl4_mem_proc_write 5 9670 NULL
+ks8842_read16_9676 ks8842_read16 0 9676 NULL nohasharray
-+dns_query_9676 dns_query 3 9676 &ks8842_read16_9676
++dns_query_9676 dns_query 3-0 9676 &ks8842_read16_9676
++ea_get_unstuffed_9677 ea_get_unstuffed 0 9677 NULL
+qib_7322_handle_hwerrors_9678 qib_7322_handle_hwerrors 3 9678 NULL
+__erst_read_from_storage_9690 __erst_read_from_storage 0 9690 NULL
-+is_hole_9694 is_hole 2 9694 NULL nohasharray
-+x25_asy_compat_ioctl_9694 x25_asy_compat_ioctl 4 9694 &is_hole_9694
-+fnb_9703 fnb 2-3 9703 NULL
++is_hole_9694 is_hole 2 9694 NULL
++vx_transfer_end_9701 vx_transfer_end 0 9701 NULL
++fnb_9703 fnb 2-3-0 9703 NULL
+ieee80211_if_read_aid_9705 ieee80211_if_read_aid 3 9705 NULL
-+ddb_input_read_9743 ddb_input_read 3 9743 NULL
-+__alloc_percpu_9764 __alloc_percpu 1-2 9764 NULL
++ddb_input_read_9743 ddb_input_read 3-0 9743 NULL
++__alloc_percpu_9764 __alloc_percpu 2-1 9764 NULL
+do_sigpending_9766 do_sigpending 2 9766 NULL
++btrfs_write_and_wait_transaction_9768 btrfs_write_and_wait_transaction 0 9768 NULL
+__blk_queue_init_tags_9778 __blk_queue_init_tags 2 9778 NULL
+snd_mem_proc_write_9786 snd_mem_proc_write 3 9786 NULL
++qlcnic_validate_ringparam_9794 qlcnic_validate_ringparam 1-2-3 9794 NULL
++parse_uac2_sample_rate_range_9801 parse_uac2_sample_rate_range 0 9801 NULL
++tpm_data_in_9802 tpm_data_in 0 9802 NULL
+ttm_bo_fbdev_io_9805 ttm_bo_fbdev_io 4 9805 NULL
-+ieee80211_if_read_state_9813 ieee80211_if_read_state 3 9813 NULL
-+pnp_mem_start_9817 pnp_mem_start 0 9817 NULL
-+kernel_physical_mapping_init_9818 kernel_physical_mapping_init 0-2-1 9818 NULL
-+dvb_dvr_set_buffer_size_9840 dvb_dvr_set_buffer_size 2 9840 NULL
++udpv6_recvmsg_9813 udpv6_recvmsg 4 9813 NULL nohasharray
++ieee80211_if_read_state_9813 ieee80211_if_read_state 3 9813 &udpv6_recvmsg_9813
+cfg80211_send_deauth_9862 cfg80211_send_deauth 3 9862 NULL
+get_blk_table_len_9863 get_blk_table_len 0 9863 NULL
+pmcraid_alloc_sglist_9864 pmcraid_alloc_sglist 1 9864 NULL
+mlx4_bitmap_alloc_range_9876 mlx4_bitmap_alloc_range 2-3 9876 NULL
+bm_register_write_9893 bm_register_write 3 9893 NULL nohasharray
+snd_midi_event_new_9893 snd_midi_event_new 1 9893 &bm_register_write_9893
-+snd_gf1_pcm_playback_copy_9895 snd_gf1_pcm_playback_copy 3-5 9895 NULL
++snd_gf1_pcm_playback_copy_9895 snd_gf1_pcm_playback_copy 5-3 9895 NULL
++iwm_rx_packet_alloc_9898 iwm_rx_packet_alloc 3 9898 NULL
+receive_DataRequest_9904 receive_DataRequest 3 9904 NULL
++norm_maxw_9907 norm_maxw 0 9907 NULL
++ext4_map_blocks_9916 ext4_map_blocks 0 9916 NULL
++root_nfs_parse_options_9937 root_nfs_parse_options 3 9937 NULL
+read_file_misc_9948 read_file_misc 3 9948 NULL
-+ext2_new_blocks_9954 ext2_new_blocks 2 9954 NULL
-+csum_partial_copy_fromiovecend_9957 csum_partial_copy_fromiovecend 3-4 9957 NULL
++set_rxd_buffer_pointer_9950 set_rxd_buffer_pointer 8 9950 NULL
++ext2_new_blocks_9954 ext2_new_blocks 2-0 9954 NULL
++csum_partial_copy_fromiovecend_9957 csum_partial_copy_fromiovecend 4-3 9957 NULL
+btrfs_add_link_9973 btrfs_add_link 5 9973 NULL
+nfs_readdata_alloc_9990 nfs_readdata_alloc 1 9990 NULL
+kovaplus_send_10009 kovaplus_send 4 10009 NULL
+aat2870_dump_reg_10019 aat2870_dump_reg 0 10019 NULL
+handle_request_10024 handle_request 9 10024 NULL
+rbd_coll_end_req_index_10041 rbd_coll_end_req_index 5 10041 NULL
++userpolicy_type_attrsize_10067 userpolicy_type_attrsize 0 10067 NULL
++cifs_llseek_10091 cifs_llseek 2 10091 NULL
+ufs_bitmap_search_10105 ufs_bitmap_search 0-3 10105 NULL
+get_elem_size_10110 get_elem_size 0-2 10110 NULL
+gfs2_meta_read_10112 gfs2_meta_read 0 10112 NULL
+offset_to_bit_10134 offset_to_bit 0 10134 NULL
-+au_sbr_realloc_10150 au_sbr_realloc 2 10150 NULL
+aes_decrypt_packets_read_10155 aes_decrypt_packets_read 3 10155 NULL
+rx_out_of_mem_read_10157 rx_out_of_mem_read 3 10157 NULL
+ol_chunk_entries_10159 ol_chunk_entries 0 10159 NULL
+asd_store_update_bios_10165 asd_store_update_bios 4 10165 NULL
++kstrtol_from_user_10168 kstrtol_from_user 2 10168 NULL
+proc_pid_attr_read_10173 proc_pid_attr_read 3 10173 NULL
++mlx4_ib_create_cq_10177 mlx4_ib_create_cq 2 10177 NULL
+jffs2_user_setxattr_10182 jffs2_user_setxattr 4 10182 NULL
-+do_ioctl_trans_10194 do_ioctl_trans 3 10194 NULL
++register_ftrace_function_10218 register_ftrace_function 0 10218 NULL
+cciss_proc_write_10259 cciss_proc_write 3 10259 NULL
++snd_pcm_lib_preallocate_pages1_10273 snd_pcm_lib_preallocate_pages1 2 10273 NULL
+snd_rme9652_capture_copy_10287 snd_rme9652_capture_copy 5 10287 NULL
++highmem_dirtyable_memory_10301 highmem_dirtyable_memory 0-1 10301 NULL
+read_emulate_10310 read_emulate 2-4 10310 NULL
+ttm_object_device_init_10321 ttm_object_device_init 2 10321 NULL
+ubi_leb_read_10328 ubi_leb_read 0 10328 NULL
+tun_sendmsg_10337 tun_sendmsg 4 10337 NULL
++em28xx_read_reg_req_len_10340 em28xx_read_reg_req_len 0 10340 NULL
+ufx_alloc_urb_list_10349 ufx_alloc_urb_list 3 10349 NULL
++whci_add_cap_10350 whci_add_cap 0 10350 NULL
+dbAllocAny_10354 dbAllocAny 0 10354 NULL
+ms_write_multiple_pages_10362 ms_write_multiple_pages 6-5 10362 NULL
+sta_ht_capa_read_10366 sta_ht_capa_read 3 10366 NULL
+ecryptfs_decode_and_decrypt_filename_10379 ecryptfs_decode_and_decrypt_filename 5 10379 NULL
++led_classdev_register_10384 led_classdev_register 0 10384 NULL
+do_compat_pselect_10398 do_compat_pselect 1 10398 NULL
-+mirror_status_10435 mirror_status 4 10435 NULL
+event_phy_transmit_error_read_10471 event_phy_transmit_error_read 3 10471 NULL
-+ca91cx42_alloc_resource_10502 ca91cx42_alloc_resource 2 10502 NULL
+qib_alloc_fast_reg_page_list_10507 qib_alloc_fast_reg_page_list 2 10507 NULL
-+rbd_get_segment_10511 rbd_get_segment 0-3-4 10511 NULL nohasharray
-+sel_write_disable_10511 sel_write_disable 3 10511 &rbd_get_segment_10511
++sel_write_disable_10511 sel_write_disable 3 10511 NULL nohasharray
++rbd_get_segment_10511 rbd_get_segment 0-3-4 10511 &sel_write_disable_10511
+osd_req_write_sg_kern_10514 osd_req_write_sg_kern 5 10514 NULL
+rds_message_alloc_10517 rds_message_alloc 1 10517 NULL
++snd_pcm_hw_params_user_10520 snd_pcm_hw_params_user 0 10520 NULL
+ocfs2_add_refcounted_extent_10526 ocfs2_add_refcounted_extent 6 10526 NULL
-+get_vm_area_caller_10527 get_vm_area_caller 1 10527 NULL
-+snd_pcm_lib_read_10536 snd_pcm_lib_read 0-3 10536 NULL
-+otp_read_10594 otp_read 2-4-5 10594 NULL
++snd_pcm_lib_read_10536 snd_pcm_lib_read 0-3 10536 NULL nohasharray
++kstrtouint_from_user_10536 kstrtouint_from_user 2 10536 &snd_pcm_lib_read_10536
++bcm_ioctl_fw_download_10548 bcm_ioctl_fw_download 0 10548 NULL
++i915_write_fence_reg_10551 i915_write_fence_reg 0 10551 NULL
++otp_read_10594 otp_read 5-4-2 10594 NULL
+supply_map_read_file_10608 supply_map_read_file 3 10608 NULL
+ima_show_htable_violations_10619 ima_show_htable_violations 3 10619 NULL
++cxgb3_get_cpl_reply_skb_10620 cxgb3_get_cpl_reply_skb 2 10620 NULL
+nes_alloc_resource_10624 nes_alloc_resource 3 10624 NULL
++write_file_rx_chainmask_10636 write_file_rx_chainmask 3 10636 NULL
++devm_request_irq_10640 devm_request_irq 0 10640 NULL
++__qbuf_mmap_10642 __qbuf_mmap 0 10642 NULL
++br_nlmsg_size_10645 br_nlmsg_size 0 10645 NULL
++ubi_io_write_vid_hdr_10660 ubi_io_write_vid_hdr 0 10660 NULL
++efx_max_tx_len_10662 efx_max_tx_len 0-2 10662 NULL
++ni65_alloc_mem_10664 ni65_alloc_mem 3 10664 NULL
+parport_write_10669 parport_write 0 10669 NULL
++tcp_push_10680 tcp_push 3 10680 NULL
++edge_write_10692 edge_write 4 10692 NULL
+inl_10708 inl 0 10708 NULL nohasharray
+selinux_inode_setxattr_10708 selinux_inode_setxattr 4 10708 &inl_10708
+pvr2_ioread_read_10720 pvr2_ioread_read 3 10720 NULL nohasharray
+shash_async_setkey_10720 shash_async_setkey 3 10720 &pvr2_ioread_read_10720
++__iscsi_complete_pdu_10726 __iscsi_complete_pdu 4 10726 NULL
+spi_sync_10731 spi_sync 0 10731 NULL
+sctp_getsockopt_maxseg_10737 sctp_getsockopt_maxseg 2 10737 NULL nohasharray
+apu_get_register_10737 apu_get_register 0 10737 &sctp_getsockopt_maxseg_10737
+compat_sys_msgsnd_10738 compat_sys_msgsnd 2 10738 NULL
-+alloc_one_pg_vec_page_10747 alloc_one_pg_vec_page 1 10747 NULL
++ttm_ref_object_add_10748 ttm_ref_object_add 0 10748 NULL
+vhost_add_used_n_10760 vhost_add_used_n 3 10760 NULL
+kvm_read_guest_atomic_10765 kvm_read_guest_atomic 4 10765 NULL
+posix_acl_to_xattr_10767 posix_acl_to_xattr 0 10767 NULL
++loopback_bytepos_update_10776 loopback_bytepos_update 2 10776 NULL
++i915_gem_wait_for_error_10791 i915_gem_wait_for_error 0 10791 NULL
++snd_mask_value_10794 snd_mask_value 0 10794 NULL
+sys_bind_10799 sys_bind 3 10799 NULL
-+compat_put_int_10828 compat_put_int 1 10828 NULL
++aun_incoming_10814 aun_incoming 3 10814 NULL
++diva_set_trace_filter_10820 diva_set_trace_filter 0-1 10820 NULL
++send_command_10832 send_command 4 10832 NULL
+lbs_sleepparams_read_10840 lbs_sleepparams_read 3 10840 NULL
+ida_get_new_above_10853 ida_get_new_above 2 10853 NULL
+fuse_conn_max_background_read_10855 fuse_conn_max_background_read 3 10855 NULL
+ol_chunk_blocks_10864 ol_chunk_blocks 0 10864 NULL
+snd_pcm_oss_write1_10872 snd_pcm_oss_write1 3 10872 NULL
++drm_ht_insert_item_10877 drm_ht_insert_item 0 10877 NULL
+get_scq_10897 get_scq 2 10897 NULL
+cgroup_write_string_10900 cgroup_write_string 5 10900 NULL
+tifm_alloc_adapter_10903 tifm_alloc_adapter 1 10903 NULL
-+__copy_from_user_10918 __copy_from_user 3 10918 NULL
++__copy_from_user_10918 __copy_from_user 3-0 10918 NULL
++kobject_add_10919 kobject_add 0 10919 NULL
+iwl_calib_set_10944 iwl_calib_set 3 10944 NULL
+bm_entry_read_10976 bm_entry_read 3 10976 NULL
+sched_autogroup_write_10984 sched_autogroup_write 3 10984 NULL
+xfrm_hash_alloc_10997 xfrm_hash_alloc 1 10997 NULL
-+mb_find_next_bit_11037 mb_find_next_bit 2-3-0 11037 NULL
++mb_find_next_bit_11037 mb_find_next_bit 0-2-3 11037 NULL
+tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL
++carl9170_handle_mpdu_11056 carl9170_handle_mpdu 3 11056 NULL
+tcp_send_mss_11079 tcp_send_mss 0 11079 NULL
++snd_pcm_delay_11081 snd_pcm_delay 0 11081 NULL
+count_argc_11083 count_argc 0 11083 NULL
+kvm_write_guest_cached_11106 kvm_write_guest_cached 4 11106 NULL
+tw_change_queue_depth_11116 tw_change_queue_depth 2 11116 NULL
+page_offset_11120 page_offset 0 11120 NULL
+tracing_buffers_read_11124 tracing_buffers_read 3 11124 NULL
+alloc_alien_cache_11127 alloc_alien_cache 2 11127 NULL
-+acpi_os_map_memory_11161 acpi_os_map_memory 1-2 11161 NULL
+ioat2_alloc_ring_11172 ioat2_alloc_ring 2 11172 NULL nohasharray
-+snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 3-4 11172 &ioat2_alloc_ring_11172
++snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 4-3 11172 &ioat2_alloc_ring_11172
++__swab16p_11220 __swab16p 0 11220 NULL
+hugetlbfs_read_11268 hugetlbfs_read 3 11268 NULL
-+cru_detect_11272 cru_detect 1 11272 NULL
+ext4_xattr_check_names_11314 ext4_xattr_check_names 0 11314 NULL
+construct_key_11329 construct_key 3 11329 NULL nohasharray
+__kfifo_out_peek_11329 __kfifo_out_peek 0-3 11329 &construct_key_11329
+next_segment_11330 next_segment 0-2-1 11330 NULL
+i915_max_freq_write_11350 i915_max_freq_write 3 11350 NULL
+sel_write_create_11353 sel_write_create 3 11353 NULL
-+handle_unit_11355 handle_unit 0-1 11355 NULL
+drm_vblank_init_11362 drm_vblank_init 2 11362 NULL
+qib_get_base_info_11369 qib_get_base_info 3 11369 NULL
+dev_irnet_write_11398 dev_irnet_write 3 11398 NULL
+___alloc_bootmem_11410 ___alloc_bootmem 1 11410 NULL
+str_to_user_11411 str_to_user 2 11411 NULL
+trace_options_read_11419 trace_options_read 3 11419 NULL
-+xd_read_multiple_pages_11422 xd_read_multiple_pages 5-4 11422 NULL
++__irq_set_trigger_11422 __irq_set_trigger 0 11422 NULL nohasharray
++xd_read_multiple_pages_11422 xd_read_multiple_pages 5-4 11422 &__irq_set_trigger_11422
+prepare_image_11424 prepare_image 0 11424 NULL
-+vring_size_11426 vring_size 0-1-2 11426 NULL
+bttv_read_11432 bttv_read 3 11432 NULL
+__bm_find_next_11447 __bm_find_next 2 11447 NULL
-+swp_offset_11475 swp_offset 0 11475 NULL
-+sca3000_read_first_n_hw_rb_11479 sca3000_read_first_n_hw_rb 2 11479 NULL
++pci_set_power_state_11479 pci_set_power_state 0 11479 NULL nohasharray
++sca3000_read_first_n_hw_rb_11479 sca3000_read_first_n_hw_rb 2 11479 &pci_set_power_state_11479
+sd_do_mode_sense_11507 sd_do_mode_sense 5 11507 NULL
+kmem_zalloc_11510 kmem_zalloc 1 11510 NULL
+setup_IO_APIC_irq_extra_11537 setup_IO_APIC_irq_extra 1 11537 NULL
+skb_cow_data_11565 skb_cow_data 0-2 11565 NULL
+mlx4_init_cmpt_table_11569 mlx4_init_cmpt_table 3 11569 NULL
++lpfc_idiag_ctlacc_write_11576 lpfc_idiag_ctlacc_write 3 11576 NULL
+oprofilefs_ulong_to_user_11582 oprofilefs_ulong_to_user 3 11582 NULL
+snd_pcm_action_11589 snd_pcm_action 0 11589 NULL
+fw_device_op_ioctl_11595 fw_device_op_ioctl 2 11595 NULL
++hycapi_rx_capipkt_11602 hycapi_rx_capipkt 3 11602 NULL
+sisusb_send_bridge_packet_11649 sisusb_send_bridge_packet 2 11649 NULL
+nla_total_size_11658 nla_total_size 0-1 11658 NULL
+ide_queue_pc_tail_11673 ide_queue_pc_tail 5 11673 NULL
+btrfs_alloc_delayed_item_11678 btrfs_alloc_delayed_item 1 11678 NULL
-+dsp_buffer_alloc_11684 dsp_buffer_alloc 2 11684 NULL
+iwm_ntf_calib_res_11686 iwm_ntf_calib_res 3 11686 NULL
+sctp_setsockopt_hmac_ident_11687 sctp_setsockopt_hmac_ident 3 11687 NULL
+split_11691 split 2 11691 NULL
@@ -105009,17 +105807,23 @@ index 0000000..6fcc08d
+tcf_csum_ipv6_icmp_11738 tcf_csum_ipv6_icmp 4 11738 NULL
+nfsd4_get_drc_mem_11748 nfsd4_get_drc_mem 0-1-2 11748 NULL
+iwl_dbgfs_qos_read_11753 iwl_dbgfs_qos_read 3 11753 NULL
++intel_map_page_11762 intel_map_page 4-3 11762 NULL
++rd_regl_11767 rd_regl 0 11767 NULL
++ocfs2_relink_block_group_11769 ocfs2_relink_block_group 0 11769 NULL
+ps_pspoll_timeouts_read_11776 ps_pspoll_timeouts_read 3 11776 NULL
-+ebt_buf_add_11779 ebt_buf_add 0 11779 NULL
++btrfs_key_blockptr_11786 btrfs_key_blockptr 0 11786 NULL
+pcpu_fc_alloc_11818 pcpu_fc_alloc 2 11818 NULL
++umc_device_register_11824 umc_device_register 0 11824 NULL
+zerocopy_sg_from_iovec_11828 zerocopy_sg_from_iovec 3 11828 NULL
+sctp_setsockopt_maxseg_11829 sctp_setsockopt_maxseg 3 11829 NULL
+rts51x_read_status_11830 rts51x_read_status 4 11830 NULL
-+avc_has_perm_11840 avc_has_perm 3 11840 NULL
+shmem_xattr_set_11843 shmem_xattr_set 4 11843 NULL
+unix_stream_connect_11844 unix_stream_connect 3 11844 NULL
+ecryptfs_copy_filename_11868 ecryptfs_copy_filename 4 11868 NULL
+l2cap_chan_send_11878 l2cap_chan_send 3 11878 NULL
++_l2_alloc_skb_11883 _l2_alloc_skb 1 11883 NULL
++xstateregs_get_11906 xstateregs_get 4 11906 NULL
++ti_write_11916 ti_write 4 11916 NULL
+kmalloc_slab_11917 kmalloc_slab 1 11917 NULL
+fs_devrw_entry_11924 fs_devrw_entry 3 11924 NULL
+bitmap_remap_11929 bitmap_remap 5 11929 NULL
@@ -105027,17 +105831,23 @@ index 0000000..6fcc08d
+dccp_feat_clone_sp_val_11942 dccp_feat_clone_sp_val 3 11942 NULL
+kvm_set_msr_common_11953 kvm_set_msr_common 3 11953 NULL
+f1x_swap_interleaved_region_11970 f1x_swap_interleaved_region 0-2 11970 NULL
++usc_InReg_11976 usc_InReg 0 11976 NULL nohasharray
++split_node_11976 split_node 0 11976 &usc_InReg_11976
++BeceemFlashBulkRead_11979 BeceemFlashBulkRead 0 11979 NULL
++atmel_read16_11981 atmel_read16 0 11981 NULL
+ftdi_elan_total_command_size_12045 ftdi_elan_total_command_size 0 12045 NULL
+pyra_send_12061 pyra_send 4 12061 NULL
+ptc_proc_write_12076 ptc_proc_write 3 12076 NULL
-+ubifs_recover_log_leb_12079 ubifs_recover_log_leb 3 12079 NULL
++i915_gem_object_pin_12083 i915_gem_object_pin 0 12083 NULL
+alloc_bulk_urbs_generic_12127 alloc_bulk_urbs_generic 5 12127 NULL
+xfs_handle_to_dentry_12135 xfs_handle_to_dentry 3 12135 NULL
+rawv6_seticmpfilter_12137 rawv6_seticmpfilter 5 12137 NULL
-+vmw_fifo_reserve_12141 vmw_fifo_reserve 2 12141 NULL
++generic_file_llseek_12139 generic_file_llseek 2 12139 NULL
+iwl4965_ucode_tx_stats_read_12143 iwl4965_ucode_tx_stats_read 3 12143 NULL
++rawsock_recvmsg_12144 rawsock_recvmsg 4 12144 NULL
+get_idx_gc_leb_12148 get_idx_gc_leb 0 12148 NULL
+btmrvl_sdio_host_to_card_12152 btmrvl_sdio_host_to_card 3 12152 NULL
++ocfs2_local_alloc_new_window_12153 ocfs2_local_alloc_new_window 0 12153 NULL
+vmbus_open_12154 vmbus_open 2-3 12154 NULL
+tt_update_changes_12155 tt_update_changes 3 12155 NULL
+dma_memcpy_to_iovec_12173 dma_memcpy_to_iovec 5 12173 NULL
@@ -105058,159 +105868,205 @@ index 0000000..6fcc08d
+note_last_dentry_12285 note_last_dentry 3 12285 NULL
+roundup_to_multiple_of_64_12288 roundup_to_multiple_of_64 0-1 12288 NULL
+iwm_notif_send_12295 iwm_notif_send 6 12295 NULL
-+vxge_get_num_vfs_12302 vxge_get_num_vfs 0 12302 NULL
-+__einj_error_trigger_12304 __einj_error_trigger 1 12304 NULL
++wrap_min_12303 wrap_min 0-1-2 12303 NULL
++__einj_error_trigger_12304 __einj_error_trigger 0 12304 NULL
++bt_sock_recvmsg_12316 bt_sock_recvmsg 4 12316 NULL
+alloc_trace_probe_12323 alloc_trace_probe 6 12323 NULL
+tipc_msg_build_12326 tipc_msg_build 4 12326 NULL
+pcbit_writecmd_12332 pcbit_writecmd 2 12332 NULL
+mptctl_ioctl_12355 mptctl_ioctl 2 12355 NULL
++receive_packet_12367 receive_packet 2 12367 NULL
+xfs_iext_inline_to_direct_12384 xfs_iext_inline_to_direct 2 12384 NULL
-+btrfs_file_extent_ram_bytes_12391 btrfs_file_extent_ram_bytes 0 12391 NULL
++btrfs_file_extent_ram_bytes_12391 btrfs_file_extent_ram_bytes 0 12391 NULL nohasharray
++populate_dir_12391 populate_dir 0 12391 &btrfs_file_extent_ram_bytes_12391
++ntfs_get_size_for_mapping_pairs_12413 ntfs_get_size_for_mapping_pairs 0 12413 NULL
++gfs2_llseek_12464 gfs2_llseek 2 12464 NULL
+skb_do_copy_data_nocache_12465 skb_do_copy_data_nocache 5 12465 NULL
+x25_sendmsg_12487 x25_sendmsg 4 12487 NULL
++rtllib_auth_challenge_12493 rtllib_auth_challenge 3 12493 NULL
+nfs_readdir_make_qstr_12509 nfs_readdir_make_qstr 3 12509 NULL
+qib_alloc_fast_reg_mr_12526 qib_alloc_fast_reg_mr 2 12526 NULL
++xfs_get_extsz_hint_12531 xfs_get_extsz_hint 0 12531 NULL
+iwl_legacy_dbgfs_rx_statistics_read_12545 iwl_legacy_dbgfs_rx_statistics_read 3 12545 NULL
++WriteRegs_12569 WriteRegs 0 12569 NULL
++ceph_osdc_wait_request_12572 ceph_osdc_wait_request 0 12572 NULL
+hvc_alloc_12579 hvc_alloc 4 12579 NULL
-+snd_pcm_plugin_alloc_12580 snd_pcm_plugin_alloc 2 12580 NULL
-+macvtap_compat_ioctl_12587 macvtap_compat_ioctl 3 12587 NULL
+pcpu_extend_area_map_12589 pcpu_extend_area_map 2 12589 NULL
+vhci_put_user_12604 vhci_put_user 4 12604 NULL
+fc_fcp_frame_alloc_12624 fc_fcp_frame_alloc 2 12624 NULL
-+ctrl_cdev_compat_ioctl_12634 ctrl_cdev_compat_ioctl 3 12634 NULL
+pn_sendmsg_12640 pn_sendmsg 4 12640 NULL
++nr_recvmsg_12649 nr_recvmsg 4 12649 NULL
+ocfs2_read_block_12659 ocfs2_read_block 0 12659 NULL
+trusted_update_12664 trusted_update 3 12664 NULL
+sel_read_class_12669 sel_read_class 3 12669 NULL nohasharray
+sparse_mem_maps_populate_node_12669 sparse_mem_maps_populate_node 4 12669 &sel_read_class_12669
+ieee80211_if_read_num_buffered_multicast_12716 ieee80211_if_read_num_buffered_multicast 3 12716 NULL
++inet6_prefix_nlmsg_size_12722 inet6_prefix_nlmsg_size 0 12722 NULL
+key_rx_spec_read_12736 key_rx_spec_read 3 12736 NULL
+ieee80211_if_read_dot11MeshMaxRetries_12756 ieee80211_if_read_dot11MeshMaxRetries 3 12756 NULL
+listxattr_12769 listxattr 3 12769 NULL
+sctp_ssnmap_init_12772 sctp_ssnmap_init 2-3 12772 NULL
++ip_ufo_append_data_12775 ip_ufo_append_data 6-7-8 12775 NULL
+platform_create_bundle_12785 platform_create_bundle 4-6 12785 NULL
+scsi_adjust_queue_depth_12802 scsi_adjust_queue_depth 3 12802 NULL
+xfs_inumbers_fmt_12817 xfs_inumbers_fmt 3 12817 NULL
++v4l_bound_align_image_12833 v4l_bound_align_image 2-3-6-7 12833 NULL
+TSS_authhmac_12839 TSS_authhmac 3 12839 NULL
+spidev_sync_12842 spidev_sync 0 12842 NULL
+twl4030_init_irq_12843 twl4030_init_irq 2 12843 NULL
+spidev_ioctl_12846 spidev_ioctl 2 12846 NULL
-+crypt_status_12876 crypt_status 4 12876 NULL
++xfs_rtallocate_extent_exact_12865 xfs_rtallocate_extent_exact 3-5-9 12865 NULL
+get_leb_cnt_12892 get_leb_cnt 0-2 12892 NULL
+ocfs2_hamming_encode_block_12904 ocfs2_hamming_encode_block 2 12904 NULL
+get_virtual_node_size_12908 get_virtual_node_size 0 12908 NULL
-+rds_pages_in_vec_12922 rds_pages_in_vec 0 12922 NULL
-+ci_ll_init_12930 ci_ll_init 3 12930 NULL
++cxgbi_create_session_12922 cxgbi_create_session 2 12922 NULL nohasharray
++rds_pages_in_vec_12922 rds_pages_in_vec 0 12922 &cxgbi_create_session_12922
++free_tind_blocks_12926 free_tind_blocks 0 12926 NULL
++iwl_legacy_dbgfs_sram_write_12932 iwl_legacy_dbgfs_sram_write 3 12932 NULL
+do_inode_permission_12946 do_inode_permission 0 12946 NULL
++bcsp_prepare_pkt_12961 bcsp_prepare_pkt 3 12961 NULL
+bm_status_write_12964 bm_status_write 3 12964 NULL
-+acpi_tb_install_table_12988 acpi_tb_install_table 1 12988 NULL
++sctp_make_chunk_12986 sctp_make_chunk 4 12986 NULL
+TransmitTcb_12989 TransmitTcb 4 12989 NULL
++__get_extent_inline_ref_13021 __get_extent_inline_ref 0 13021 NULL
+subsystem_filter_write_13022 subsystem_filter_write 3 13022 NULL
+generic_segment_checks_13041 generic_segment_checks 0 13041 NULL nohasharray
-+ubi_eba_atomic_leb_change_13041 ubi_eba_atomic_leb_change 5 13041 &generic_segment_checks_13041
++ubi_eba_atomic_leb_change_13041 ubi_eba_atomic_leb_change 0 13041 &generic_segment_checks_13041
+ocfs2_write_begin_13045 ocfs2_write_begin 3-4 13045 NULL
-+__dn_setsockopt_13060 __dn_setsockopt 5 13060 NULL
++ctnetlink_timestamp_size_13060 ctnetlink_timestamp_size 0 13060 NULL nohasharray
++__dn_setsockopt_13060 __dn_setsockopt 5 13060 &ctnetlink_timestamp_size_13060
++sandybridge_write_fence_reg_13080 sandybridge_write_fence_reg 0 13080 NULL
++_ocfs2_free_suballoc_bits_13085 _ocfs2_free_suballoc_bits 0 13085 NULL
+irq_set_chip_and_handler_13088 irq_set_chip_and_handler 1 13088 NULL
+xattr_getsecurity_13090 xattr_getsecurity 0 13090 NULL
+blk_rq_map_sg_13092 blk_rq_map_sg 0 13092 NULL
-+mb_find_next_zero_bit_13100 mb_find_next_zero_bit 2-3 13100 NULL
-+ubifs_compat_ioctl_13108 ubifs_compat_ioctl 3 13108 NULL
++mb_find_next_zero_bit_13100 mb_find_next_zero_bit 2-3-0 13100 NULL
+snd_rme96_playback_copy_13111 snd_rme96_playback_copy 5 13111 NULL
++snd_pcm_lib_preallocate_pages_for_all_13112 snd_pcm_lib_preallocate_pages_for_all 4 13112 NULL
+xen_allocate_irq_dynamic_13116 xen_allocate_irq_dynamic 0 13116 NULL
+bfad_debugfs_read_13119 bfad_debugfs_read 3 13119 NULL
++ip_make_skb_13129 ip_make_skb 5-6 13129 NULL
+blk_update_request_13146 blk_update_request 3 13146 NULL
-+flakey_status_13154 flakey_status 4 13154 NULL
+caif_stream_recvmsg_13173 caif_stream_recvmsg 4 13173 NULL
+pwr_disable_ps_read_13176 pwr_disable_ps_read 3 13176 NULL
-+compat_put_ulong_13186 compat_put_ulong 1 13186 NULL
++__cmpxchg64_13187 __cmpxchg64 0 13187 NULL
+comedi_read_13199 comedi_read 3 13199 NULL
+mmc_ext_csd_read_13205 mmc_ext_csd_read 3 13205 NULL
+__nodes_fold_13215 __nodes_fold 4 13215 NULL
+svm_msrpm_offset_13220 svm_msrpm_offset 0-1 13220 NULL
++wait_events_13243 wait_events 0 13243 NULL
+asix_read_cmd_13245 asix_read_cmd 5 13245 NULL
++snd_emu10k1_fx8010_tram_setup_13248 snd_emu10k1_fx8010_tram_setup 2 13248 NULL
++fw_download_code_13249 fw_download_code 3 13249 NULL
+init_tid_tabs_13252 init_tid_tabs 2-3-4 13252 NULL
++hostap_80211_get_hdrlen_13255 hostap_80211_get_hdrlen 0 13255 NULL
+bio_integrity_trim_13259 bio_integrity_trim 3 13259 NULL
++simple_attr_write_13260 simple_attr_write 3 13260 NULL
++smctr_process_rx_packet_13270 smctr_process_rx_packet 2 13270 NULL
++carl9170_rx_13272 carl9170_rx 3 13272 NULL
+pmcraid_notify_aen_13274 pmcraid_notify_aen 3 13274 NULL
+lpfc_idiag_mbxacc_get_setup_13282 lpfc_idiag_mbxacc_get_setup 0 13282 NULL
+platform_device_add_resources_13289 platform_device_add_resources 3 13289 NULL
-+nf_nat_mangle_udp_packet_13321 nf_nat_mangle_udp_packet 7-5 13321 NULL
++find_get_pages_contig_13317 find_get_pages_contig 0 13317 NULL
++nf_nat_mangle_udp_packet_13321 nf_nat_mangle_udp_packet 5-7 13321 NULL
+us122l_ctl_msg_13330 us122l_ctl_msg 8 13330 NULL
+kvm_read_nested_guest_page_13337 kvm_read_nested_guest_page 5 13337 NULL
-+mthca_alloc_mtt_range_13371 mthca_alloc_mtt_range 2 13371 NULL
+iso_sched_alloc_13377 iso_sched_alloc 1 13377 NULL nohasharray
+wep_key_not_found_read_13377 wep_key_not_found_read 3 13377 &iso_sched_alloc_13377
++BcmSetActiveSection_13389 BcmSetActiveSection 0 13389 NULL
+sky2_receive_13407 sky2_receive 2 13407 NULL
-+encrypted_update_13414 encrypted_update 3 13414 NULL
-+netxen_alloc_sds_rings_13417 netxen_alloc_sds_rings 2 13417 NULL
++encrypted_update_13414 encrypted_update 3 13414 NULL nohasharray
++ocfs2_inode_lock_update_13414 ocfs2_inode_lock_update 0 13414 &encrypted_update_13414
++netxen_alloc_sds_rings_13417 netxen_alloc_sds_rings 2 13417 NULL nohasharray
++i915_gem_execbuffer_sync_rings_13417 i915_gem_execbuffer_sync_rings 0 13417 &netxen_alloc_sds_rings_13417
+keyring_read_13438 keyring_read 3 13438 NULL
+sctp_setsockopt_peer_primary_addr_13440 sctp_setsockopt_peer_primary_addr 3 13440 NULL
+ath6kl_cfg80211_connect_event_13443 ath6kl_cfg80211_connect_event 7-8-9 13443 NULL
-+mthca_buddy_alloc_13454 mthca_buddy_alloc 2 13454 NULL
+ocfs2_align_bytes_to_blocks_13512 ocfs2_align_bytes_to_blocks 2 13512 NULL
+core_status_13515 core_status 4 13515 NULL
+sctp_tsnmap_mark_13527 sctp_tsnmap_mark 2 13527 NULL
+bm_init_13529 bm_init 2 13529 NULL
++request_any_context_irq_13530 request_any_context_irq 0 13530 NULL
++usb_hcd_link_urb_to_ep_13560 usb_hcd_link_urb_to_ep 0 13560 NULL
+ubifs_get_idx_gc_leb_13566 ubifs_get_idx_gc_leb 0 13566 NULL
+read_file_antenna_13574 read_file_antenna 3 13574 NULL
+cache_write_13589 cache_write 3 13589 NULL
-+aac_sa_ioremap_13596 aac_sa_ioremap 2 13596 NULL nohasharray
-+irias_new_octseq_value_13596 irias_new_octseq_value 2 13596 &aac_sa_ioremap_13596
-+usb_dump_interface_descriptor_13603 usb_dump_interface_descriptor 0 13603 NULL
-+swap_cgroup_swapon_13614 swap_cgroup_swapon 2 13614 NULL
++mpt_lan_receive_post_turbo_13592 mpt_lan_receive_post_turbo 2 13592 NULL
++irias_new_octseq_value_13596 irias_new_octseq_value 2 13596 NULL
++Rd_Indx_13602 Rd_Indx 3-2 13602 NULL
+wm8994_bulk_write_13615 wm8994_bulk_write 3 13615 NULL
+pmcraid_get_minor_13619 pmcraid_get_minor 0 13619 NULL
+iio_device_add_event_sysfs_13627 iio_device_add_event_sysfs 0 13627 NULL
+packet_snd_13634 packet_snd 3 13634 NULL
++__qbuf_userptr_13636 __qbuf_userptr 0 13636 NULL
+blk_msg_write_13655 blk_msg_write 3 13655 NULL
+nfs_idmap_lookup_id_13665 nfs_idmap_lookup_id 2 13665 NULL
+cache_downcall_13666 cache_downcall 3 13666 NULL
++ext3_xattr_list_entries_13682 ext3_xattr_list_entries 0 13682 NULL
++usb_get_string_13693 usb_get_string 0 13693 NULL
++atomic_cmpxchg_13700 atomic_cmpxchg 0 13700 NULL
++ocfs2_cache_block_dealloc_13731 ocfs2_cache_block_dealloc 0 13731 NULL
++cfg80211_testmode_alloc_event_skb_13739 cfg80211_testmode_alloc_event_skb 2 13739 NULL
+audit_unpack_string_13748 audit_unpack_string 3 13748 NULL
+ufs_dtog_13750 ufs_dtog 0-2 13750 NULL
+fb_sys_read_13778 fb_sys_read 3 13778 NULL
++CalcMainPLL_13811 CalcMainPLL 0 13811 NULL
++bat_ogm_aggregate_new_13813 bat_ogm_aggregate_new 2 13813 NULL
+random_read_13815 random_read 3 13815 NULL
++mutex_lock_interruptible_nested_13817 mutex_lock_interruptible_nested 0 13817 NULL
+mtd_do_readoob_13850 mtd_do_readoob 4 13850 NULL
-+evdev_ioctl_compat_13851 evdev_ioctl_compat 2-3 13851 NULL
++evdev_ioctl_compat_13851 evdev_ioctl_compat 2 13851 NULL
+compat_ip_setsockopt_13870 compat_ip_setsockopt 5 13870 NULL
+snd_pcm_aio_read_13900 snd_pcm_aio_read 3 13900 NULL
+qla2x00_get_ctx_sp_13912 qla2x00_get_ctx_sp 3 13912 NULL
+ext3_xattr_block_get_13936 ext3_xattr_block_get 0 13936 NULL
+ocfs2_xa_value_truncate_13940 ocfs2_xa_value_truncate 2 13940 NULL
+iwl_dbgfs_protection_mode_read_13943 iwl_dbgfs_protection_mode_read 3 13943 NULL
-+compat_chaninfo_13945 compat_chaninfo 2 13945 NULL
+ieee80211_if_read_min_discovery_timeout_13946 ieee80211_if_read_min_discovery_timeout 3 13946 NULL
+lpfc_idiag_queacc_read_13950 lpfc_idiag_queacc_read 3 13950 NULL
+snd_pcm_plug_slave_size_13967 snd_pcm_plug_slave_size 0-2 13967 NULL
-+com90xx_found_13974 com90xx_found 3 13974 NULL
++ext4_ind_calc_metadata_amount_13975 ext4_ind_calc_metadata_amount 2 13975 NULL
+qcam_read_13977 qcam_read 3 13977 NULL
+dsp_read_13980 dsp_read 2 13980 NULL
+bm_block_bits_13981 bm_block_bits 0 13981 NULL nohasharray
+dvb_demux_read_13981 dvb_demux_read 3 13981 &bm_block_bits_13981
+ieee80211_bss_info_update_13991 ieee80211_bss_info_update 4 13991 NULL
++create_files_14003 create_files 0 14003 NULL
++sddr09_write_data_14014 sddr09_write_data 3 14014 NULL
+btrfs_get_blocks_direct_14016 btrfs_get_blocks_direct 2 14016 NULL
++_rtl92s_firmware_downloadcode_14021 _rtl92s_firmware_downloadcode 3 14021 NULL
+dvb_usercopy_14036 dvb_usercopy 2 14036 NULL
+read_def_modal_eeprom_14041 read_def_modal_eeprom 3 14041 NULL
+ieee80211_if_fmt_aid_14055 ieee80211_if_fmt_aid 3 14055 NULL
++utf8_to_utf16le_14057 utf8_to_utf16le 0 14057 NULL
+sta_agg_status_read_14058 sta_agg_status_read 3 14058 NULL
-+do_tcp_sendpages_14083 do_tcp_sendpages 3-4 14083 NULL
++do_tcp_sendpages_14083 do_tcp_sendpages 4-3 14083 NULL
+do_proc_readlink_14096 do_proc_readlink 3 14096 NULL
+compat_sys_pselect6_14105 compat_sys_pselect6 1 14105 NULL
+nlmsg_len_14115 nlmsg_len 0 14115 NULL
-+ntfs_rl_replace_14136 ntfs_rl_replace 2-4 14136 NULL
+gsm_dlci_data_14155 gsm_dlci_data 3 14155 NULL
+print_input_mask_14168 print_input_mask 3-0 14168 NULL
++ocfs2_split_and_insert_14171 ocfs2_split_and_insert 0 14171 NULL
+ocfs2_xattr_value_truncate_14183 ocfs2_xattr_value_truncate 3 14183 NULL
++datafab_read_data_14186 datafab_read_data 4 14186 NULL
+tcp_manip_pkt_14202 tcp_manip_pkt 2 14202 NULL
+alloc_async_14208 alloc_async 1 14208 NULL
++ath6kl_regread_write_14220 ath6kl_regread_write 3 14220 NULL
+sys_kexec_load_14222 sys_kexec_load 2 14222 NULL
-+dma_declare_coherent_memory_14244 dma_declare_coherent_memory 4-2 14244 NULL
++dma_declare_coherent_memory_14244 dma_declare_coherent_memory 4 14244 NULL
+snd_soc_hw_bulk_write_raw_14245 snd_soc_hw_bulk_write_raw 4 14245 NULL
-+reiserfs_compat_ioctl_14265 reiserfs_compat_ioctl 3 14265 NULL
++ext4_journal_restart_14251 ext4_journal_restart 0 14251 NULL
++radix_tree_prev_hole_14252 radix_tree_prev_hole 0-2 14252 NULL
+ath6kl_connect_event_14267 ath6kl_connect_event 7-8-9 14267 NULL
+add_numbered_child_14273 add_numbered_child 5 14273 NULL
++OS_mem_token_alloc_14276 OS_mem_token_alloc 1 14276 NULL
+em28xx_i2c_eeprom_14280 em28xx_i2c_eeprom 3 14280 NULL
+snd_seq_oss_readq_new_14283 snd_seq_oss_readq_new 2 14283 NULL
++audit_send_reply_14292 audit_send_reply 7 14292 NULL
+rr_status_14293 rr_status 5 14293 NULL
+read_default_ldt_14302 read_default_ldt 2 14302 NULL
++xfs_qm_qino_alloc_14309 xfs_qm_qino_alloc 3 14309 NULL
++i915_gem_object_finish_gpu_14312 i915_gem_object_finish_gpu 0 14312 NULL
+oo_objects_14319 oo_objects 0 14319 NULL
+iwl_legacy_dbgfs_interrupt_read_14324 iwl_legacy_dbgfs_interrupt_read 3 14324 NULL
+p9_client_zc_rpc_14345 p9_client_zc_rpc 7 14345 NULL
@@ -105218,149 +106074,168 @@ index 0000000..6fcc08d
+acpi_get_override_irq_14381 acpi_get_override_irq 1 14381 NULL
+ath6kl_regdump_read_14393 ath6kl_regdump_read 3 14393 NULL
+smk_write_onlycap_14400 smk_write_onlycap 3 14400 NULL
++first_logical_byte_14403 first_logical_byte 0 14403 NULL
+mtd_concat_create_14416 mtd_concat_create 2 14416 NULL
+get_kcore_size_14425 get_kcore_size 0 14425 NULL
-+easycap_alsa_vmalloc_14426 easycap_alsa_vmalloc 2 14426 NULL
+gart_alloc_coherent_14437 gart_alloc_coherent 2 14437 NULL
+check_lpt_crc_14442 check_lpt_crc 0 14442 NULL
+block_size_14443 block_size 0 14443 NULL
+snd_emu10k1_proc_spdif_status_14457 snd_emu10k1_proc_spdif_status 4-5 14457 NULL
+udplite_getfrag_14479 udplite_getfrag 3-4 14479 NULL
+ieee80211_if_read_dot11MeshGateAnnouncementProtocol_14486 ieee80211_if_read_dot11MeshGateAnnouncementProtocol 3 14486 NULL
++cmd_complete_14502 cmd_complete 5 14502 NULL
+ocfs2_debug_read_14507 ocfs2_debug_read 3 14507 NULL
-+ep0_write_14536 ep0_write 3 14536 NULL nohasharray
-+dataflash_read_user_otp_14536 dataflash_read_user_otp 2-3 14536 &ep0_write_14536
++prepare_data_14536 prepare_data 3 14536 NULL nohasharray
++ep0_write_14536 ep0_write 3 14536 &prepare_data_14536 nohasharray
++dataflash_read_user_otp_14536 dataflash_read_user_otp 3-2 14536 &ep0_write_14536
++register_trace_sched_switch_14545 register_trace_sched_switch 0 14545 NULL
++l2cap_send_cmd_14548 l2cap_send_cmd 4 14548 NULL
+picolcd_debug_eeprom_read_14549 picolcd_debug_eeprom_read 3 14549 NULL
-+drm_vmalloc_dma_14550 drm_vmalloc_dma 1 14550 NULL
-+usb_dump_desc_14553 usb_dump_desc 0 14553 NULL
+nfqnl_mangle_14583 nfqnl_mangle 2 14583 NULL
+idmap_pipe_downcall_14591 idmap_pipe_downcall 3 14591 NULL
++ocfs2_steal_meta_14602 ocfs2_steal_meta 0 14602 NULL
+ocfs2_trim_group_14641 ocfs2_trim_group 4-3 14641 NULL
+dbJoin_14644 dbJoin 0 14644 NULL
+profile_replace_14652 profile_replace 3 14652 NULL
++min_bytes_needed_14675 min_bytes_needed 0 14675 NULL
+ieee80211_if_fmt_rc_rateidx_mask_2ghz_14683 ieee80211_if_fmt_rc_rateidx_mask_2ghz 3 14683 NULL
-+tsi148_master_set_14685 tsi148_master_set 4 14685 NULL
+u_audio_playback_14709 u_audio_playback 3 14709 NULL
+vfd_write_14717 vfd_write 3 14717 NULL
++ext4_da_map_blocks_14723 ext4_da_map_blocks 2 14723 NULL nohasharray
++inet_listen_14723 inet_listen 2 14723 &ext4_da_map_blocks_14723
+__blk_end_request_14729 __blk_end_request 3 14729 NULL nohasharray
+do_mmap_14729 do_mmap 0 14729 &__blk_end_request_14729
++rh_urb_enqueue_14733 rh_urb_enqueue 0 14733 NULL
+store_camera_14751 store_camera 4 14751 NULL
-+qla82xx_pci_mem_write_2M_14765 qla82xx_pci_mem_write_2M 2 14765 NULL
+sta_dev_read_14782 sta_dev_read 3 14782 NULL
-+cp_tm1217_read_14792 cp_tm1217_read 3 14792 NULL
++keys_proc_write_14792 keys_proc_write 3 14792 NULL nohasharray
++cp_tm1217_read_14792 cp_tm1217_read 3 14792 &keys_proc_write_14792
+ext4_kvmalloc_14796 ext4_kvmalloc 1 14796 NULL
-+nfs_parse_server_name_14800 nfs_parse_server_name 2 14800 NULL
-+hpet_readl_14801 hpet_readl 0 14801 NULL nohasharray
-+snd_als300_gcr_read_14801 snd_als300_gcr_read 0 14801 &hpet_readl_14801
-+bcma_scan_read32_14802 bcma_scan_read32 0 14802 NULL
++__kfifo_in_14797 __kfifo_in 3-0 14797 NULL
++snd_als300_gcr_read_14801 snd_als300_gcr_read 0 14801 NULL nohasharray
++hpet_readl_14801 hpet_readl 0 14801 &snd_als300_gcr_read_14801
++__i2400ms_rx_get_size_14826 __i2400ms_rx_get_size 0 14826 NULL
+do_tune_cpucache_14828 do_tune_cpucache 2 14828 NULL
+__mutex_fastpath_lock_retval_14844 __mutex_fastpath_lock_retval 0 14844 NULL
+lcd_write_14857 lcd_write 3 14857 NULL nohasharray
+__krealloc_14857 __krealloc 2 14857 &lcd_write_14857
+get_user_cpu_mask_14861 get_user_cpu_mask 2 14861 NULL
-+sriov_enable_migration_14889 sriov_enable_migration 2 14889 NULL
+acpi_os_allocate_14892 acpi_os_allocate 1 14892 NULL
-+ubi_leb_change_14899 ubi_leb_change 4 14899 NULL
++ubi_leb_change_14899 ubi_leb_change 0 14899 NULL
+krealloc_14908 krealloc 2 14908 NULL
+__arch_hweight64_14923 __arch_hweight64 0 14923 NULL
+store_sys_wmi_14934 store_sys_wmi 4 14934 NULL
+ocfs2_expand_nonsparse_inode_14936 ocfs2_expand_nonsparse_inode 3-4 14936 NULL
+queue_cnt_14951 queue_cnt 0 14951 NULL
++unix_dgram_recvmsg_14952 unix_dgram_recvmsg 4 14952 NULL
+videobuf_read_stream_14956 videobuf_read_stream 3 14956 NULL
+help_14971 help 4 14971 NULL
+mce_flush_rx_buffer_14976 mce_flush_rx_buffer 2 14976 NULL
+setkey_14987 setkey 3 14987 NULL
+store_touchpad_15003 store_touchpad 4 15003 NULL
-+vmap_15025 vmap 2 15025 NULL
+blk_integrity_tuple_size_15027 blk_integrity_tuple_size 0 15027 NULL
-+irq_get_next_irq_15053 irq_get_next_irq 1 15053 NULL
++irq_get_next_irq_15053 irq_get_next_irq 1-0 15053 NULL
+store_lslvl_15059 store_lslvl 4 15059 NULL
+nfs4_write_cached_acl_15070 nfs4_write_cached_acl 4 15070 NULL
-+ntfs_copy_from_user_15072 ntfs_copy_from_user 3-5 15072 NULL
-+ubifs_write_node_15088 ubifs_write_node 5-3 15088 NULL
++ntfs_copy_from_user_15072 ntfs_copy_from_user 3-5-0 15072 NULL
++pppoe_recvmsg_15073 pppoe_recvmsg 4 15073 NULL
+hex_dump_to_buffer_15121 hex_dump_to_buffer 6 15121 NULL
+start_port_15124 start_port 0 15124 NULL
-+memchr_15126 memchr 0 15126 NULL
++perf_ctx_adjust_freq_15133 perf_ctx_adjust_freq 2 15133 NULL
+ipwireless_ppp_mru_15153 ipwireless_ppp_mru 0 15153 NULL
+iscsi_create_endpoint_15193 iscsi_create_endpoint 1 15193 NULL
+reserve_resources_15194 reserve_resources 3 15194 NULL
+bfad_debugfs_write_regrd_15218 bfad_debugfs_write_regrd 3 15218 NULL
-+udf_bitmap_new_block_15230 udf_bitmap_new_block 5 15230 NULL
++udf_bitmap_new_block_15230 udf_bitmap_new_block 5 15230 NULL nohasharray
++nlmsg_total_size_15230 nlmsg_total_size 0-1 15230 &udf_bitmap_new_block_15230
+variax_alloc_sysex_buffer_15237 variax_alloc_sysex_buffer 3 15237 NULL
-+compat_raw_ioctl_15290 compat_raw_ioctl 3 15290 NULL
-+sys_connect_15291 sys_connect 3 15291 NULL nohasharray
-+xlate_dev_mem_ptr_15291 xlate_dev_mem_ptr 1 15291 &sys_connect_15291
++iwl_dbgfs_sram_write_15239 iwl_dbgfs_sram_write 3 15239 NULL
++simple_strtol_15273 simple_strtol 0 15273 NULL
++fw_realloc_buffer_15280 fw_realloc_buffer 2 15280 NULL
++sys_connect_15291 sys_connect 3 15291 NULL
+arch_enable_uv_irq_15294 arch_enable_uv_irq 2 15294 NULL
+acpi_ev_create_gpe_block_15297 acpi_ev_create_gpe_block 5 15297 NULL
-+tpm_tis_init_15304 tpm_tis_init 2-3 15304 NULL
-+__ocfs2_remove_xattr_range_15330 __ocfs2_remove_xattr_range 4-5-3 15330 NULL
++ocfs2_read_refcount_block_15305 ocfs2_read_refcount_block 0 15305 NULL
++fcoe_ctlr_send_keep_alive_15308 fcoe_ctlr_send_keep_alive 3 15308 NULL
++__ocfs2_remove_xattr_range_15330 __ocfs2_remove_xattr_range 4-3-5 15330 NULL
+ioread16_15342 ioread16 0 15342 NULL
-+alloc_ring_15345 alloc_ring 2-4 15345 NULL
++alloc_ring_15345 alloc_ring 4-2 15345 NULL
+acpi_ut_create_string_object_15360 acpi_ut_create_string_object 1 15360 NULL
+compat_sys_process_vm_readv_15374 compat_sys_process_vm_readv 3-5 15374 NULL
-+fq_codel_zalloc_15378 fq_codel_zalloc 1 15378 NULL
+domain_flush_pages_15379 domain_flush_pages 2-3 15379 NULL
+alloc_fddidev_15382 alloc_fddidev 1 15382 NULL
-+btrfs_level_size_15392 btrfs_level_size 0 15392 NULL
+get_modalias_15406 get_modalias 2 15406 NULL
-+__videobuf_copy_to_user_15423 __videobuf_copy_to_user 4 15423 NULL
++__videobuf_copy_to_user_15423 __videobuf_copy_to_user 4-0 15423 NULL
+tcp_mtu_to_mss_15438 tcp_mtu_to_mss 0-2 15438 NULL
+hpsa_change_queue_depth_15449 hpsa_change_queue_depth 2 15449 NULL
-+vmalloc_15464 vmalloc 1 15464 NULL
++__mutex_lock_killable_slowpath_15472 __mutex_lock_killable_slowpath 0 15472 NULL
++iwl_legacy_dbgfs_wd_timeout_write_15478 iwl_legacy_dbgfs_wd_timeout_write 3 15478 NULL
++insert_old_idx_znode_15500 insert_old_idx_znode 0 15500 NULL
+zd_chip_is_zd1211b_15518 zd_chip_is_zd1211b 0 15518 NULL
++ifx_spi_write_15531 ifx_spi_write 3 15531 NULL
+p9_check_zc_errors_15534 p9_check_zc_errors 4 15534 NULL
+ql_process_mac_rx_page_15543 ql_process_mac_rx_page 4 15543 NULL
++xfrm_state_mtu_15548 xfrm_state_mtu 0-2 15548 NULL
++ieee80211_amsdu_to_8023s_15561 ieee80211_amsdu_to_8023s 5 15561 NULL
++mlx4_buf_alloc_15572 mlx4_buf_alloc 2 15572 NULL nohasharray
++snd_pcm_channel_info_15572 snd_pcm_channel_info 0 15572 &mlx4_buf_alloc_15572
+persistent_status_15574 persistent_status 4 15574 NULL
+bnx2fc_process_unsol_compl_15576 bnx2fc_process_unsol_compl 2 15576 NULL
+vme_user_write_15587 vme_user_write 3 15587 NULL
-+ocfs2_truncate_rec_15595 ocfs2_truncate_rec 7 15595 NULL
++ocfs2_truncate_rec_15595 ocfs2_truncate_rec 0-7 15595 NULL
+get_event_length_15598 get_event_length 0 15598 NULL
+sx150x_install_irq_chip_15609 sx150x_install_irq_chip 3 15609 NULL
+iommu_device_max_index_15620 iommu_device_max_index 0-3-2-1 15620 NULL nohasharray
+compat_fillonedir_15620 compat_fillonedir 3 15620 &iommu_device_max_index_15620
++dsp_cmx_send_member_15625 dsp_cmx_send_member 2 15625 NULL
+proc_loginuid_read_15631 proc_loginuid_read 3 15631 NULL
-+tomoyo_scan_bprm_15642 tomoyo_scan_bprm 2-4 15642 NULL
++tomoyo_scan_bprm_15642 tomoyo_scan_bprm 4-2 15642 NULL
++joydev_handle_JSIOCSBTNMAP_15643 joydev_handle_JSIOCSBTNMAP 3 15643 NULL
+xsd_read_15653 xsd_read 3 15653 NULL
+compat_sys_fcntl_15654 compat_sys_fcntl 3 15654 NULL
+unix_bind_15668 unix_bind 3 15668 NULL
+dm_read_15674 dm_read 3 15674 NULL
-+ocfs2_split_tree_15716 ocfs2_split_tree 5 15716 NULL
++i915_gem_object_set_to_cpu_domain_15705 i915_gem_object_set_to_cpu_domain 0 15705 NULL
++inet6_if_nlmsg_size_15711 inet6_if_nlmsg_size 0 15711 NULL
++ocfs2_split_tree_15716 ocfs2_split_tree 0-5 15716 NULL
+HiSax_readstatus_15752 HiSax_readstatus 2 15752 NULL
+sk_wmem_schedule_15759 sk_wmem_schedule 2 15759 NULL
-+bitmap_search_next_usable_block_15762 bitmap_search_next_usable_block 3-1 15762 NULL
-+do_test_15766 do_test 1 15766 NULL
++ftrace_profile_init_cpu_15761 ftrace_profile_init_cpu 0 15761 NULL
++bitmap_search_next_usable_block_15762 bitmap_search_next_usable_block 3-1-0 15762 NULL
++msi_alloc_irte_15798 msi_alloc_irte 3 15798 NULL
+smk_read_direct_15803 smk_read_direct 3 15803 NULL
-+snd_pcm_ioctl_compat_15804 snd_pcm_ioctl_compat 3 15804 NULL
-+gx1_read_conf_reg_15817 gx1_read_conf_reg 0 15817 NULL nohasharray
-+gnttab_expand_15817 gnttab_expand 1 15817 &gx1_read_conf_reg_15817
-+afs_proc_rootcell_write_15822 afs_proc_rootcell_write 3 15822 NULL nohasharray
-+random_N_15822 random_N 1 15822 &afs_proc_rootcell_write_15822
++gnttab_expand_15817 gnttab_expand 1 15817 NULL
++afs_proc_rootcell_write_15822 afs_proc_rootcell_write 3 15822 NULL
+table_size_15851 table_size 0-1-2 15851 NULL
-+ubi_io_write_15870 ubi_io_write 5-4 15870 NULL nohasharray
++ubi_io_write_15870 ubi_io_write 0 15870 NULL nohasharray
+media_entity_init_15870 media_entity_init 2-4 15870 &ubi_io_write_15870
++ddr_init_15874 ddr_init 0 15874 NULL
+__mptctl_ioctl_15875 __mptctl_ioctl 2 15875 NULL
+nfs_map_group_to_gid_15892 nfs_map_group_to_gid 3 15892 NULL
+native_read_msr_15905 native_read_msr 0 15905 NULL
+parse_audio_stream_data_15937 parse_audio_stream_data 3 15937 NULL
+power_read_15939 power_read 3 15939 NULL
-+lpfc_idiag_drbacc_read_15948 lpfc_idiag_drbacc_read 3 15948 NULL
-+snd_pcm_lib_read_transfer_15952 snd_pcm_lib_read_transfer 4-2-5 15952 NULL
-+process_vm_rw_pages_15954 process_vm_rw_pages 6-5 15954 NULL
-+remap_pci_mem_15966 remap_pci_mem 1-2 15966 NULL
-+frame_alloc_15981 frame_alloc 4 15981 NULL
-+alloc_vm_area_15989 alloc_vm_area 1 15989 NULL
++lpfc_idiag_drbacc_read_15948 lpfc_idiag_drbacc_read 3 15948 NULL nohasharray
++i2c_write_15948 i2c_write 0 15948 &lpfc_idiag_drbacc_read_15948
++snd_pcm_lib_read_transfer_15952 snd_pcm_lib_read_transfer 5-2-4 15952 NULL
++calculate_max_size_15977 calculate_max_size 0 15977 NULL
+get_entry_16003 get_entry 4 16003 NULL
+hdpvr_register_videodev_16010 hdpvr_register_videodev 3 16010 NULL
+viafb_vt1636_proc_write_16018 viafb_vt1636_proc_write 3 16018 NULL
++got_frame_16028 got_frame 2 16028 NULL
++dccp_recvmsg_16056 dccp_recvmsg 4 16056 NULL
++snd_sgbuf_aligned_pages_16063 snd_sgbuf_aligned_pages 0-1 16063 NULL
++ocfs2_sync_local_to_main_16076 ocfs2_sync_local_to_main 0 16076 NULL
+isr_tx_exch_complete_read_16103 isr_tx_exch_complete_read 3 16103 NULL
+dma_tx_requested_read_16110 dma_tx_requested_read 3 16110 NULL nohasharray
+isr_hw_pm_mode_changes_read_16110 isr_hw_pm_mode_changes_read 3 16110 &dma_tx_requested_read_16110
+irq_set_chip_and_handler_name_16111 irq_set_chip_and_handler_name 1 16111 NULL
++rd_mem_16117 rd_mem 0 16117 NULL
+snd_dma_pointer_16126 snd_dma_pointer 0-2 16126 NULL
+compat_sys_select_16131 compat_sys_select 1 16131 NULL
+fsm_init_16134 fsm_init 2 16134 NULL
++hysdn_rx_netpkt_16136 hysdn_rx_netpkt 3 16136 NULL
+ext4_xattr_block_get_16148 ext4_xattr_block_get 0 16148 NULL
-+bnx2i_get_cid_num_16166 bnx2i_get_cid_num 0 16166 NULL
+cipso_v4_map_cat_rng_hton_16203 cipso_v4_map_cat_rng_hton 0 16203 NULL
+create_table_16213 create_table 2 16213 NULL
+atomic_read_file_16227 atomic_read_file 3 16227 NULL
@@ -105370,163 +106245,206 @@ index 0000000..6fcc08d
+reiserfs_acl_count_16265 reiserfs_acl_count 0-1 16265 NULL
+ocfs2_xattr_bucket_value_truncate_16279 ocfs2_xattr_bucket_value_truncate 4 16279 NULL
+drbd_setsockopt_16280 drbd_setsockopt 5 16280 NULL nohasharray
-+nand_bch_init_16280 nand_bch_init 3-2 16280 &drbd_setsockopt_16280
-+account_16283 account 0-2-4 16283 NULL
++nand_bch_init_16280 nand_bch_init 2-3 16280 &drbd_setsockopt_16280
++account_16283 account 0-4-2 16283 NULL
++jumpshot_read_data_16287 jumpshot_read_data 4 16287 NULL
+stk_allocate_buffers_16291 stk_allocate_buffers 2 16291 NULL
+rsc_mgr_init_16299 rsc_mgr_init 3 16299 NULL
-+vmw_cursor_update_image_16332 vmw_cursor_update_image 3-4 16332 NULL
++sst_allocate_decode_buf_16349 sst_allocate_decode_buf 3 16349 NULL
+total_ps_buffered_read_16365 total_ps_buffered_read 3 16365 NULL
+iscsi_tcp_conn_setup_16376 iscsi_tcp_conn_setup 2 16376 NULL
+nl80211_send_unprot_deauth_16378 nl80211_send_unprot_deauth 4 16378 NULL
++i8042_create_kbd_port_16379 i8042_create_kbd_port 0 16379 NULL
++scsi_nl_send_vendor_msg_16394 scsi_nl_send_vendor_msg 5 16394 NULL
+alloc_trdev_16399 alloc_trdev 1 16399 NULL
-+diva_os_malloc_16406 diva_os_malloc 2 16406 NULL
+ieee80211_if_read_tsf_16420 ieee80211_if_read_tsf 3 16420 NULL
+rxrpc_server_keyring_16431 rxrpc_server_keyring 3 16431 NULL
++calculate_inocache_hashsize_16449 calculate_inocache_hashsize 0-1 16449 NULL
++ocfs2_expand_refcount_tree_16455 ocfs2_expand_refcount_tree 0 16455 NULL
+netlink_change_ngroups_16457 netlink_change_ngroups 2 16457 NULL
++sock_wmalloc_16472 sock_wmalloc 2 16472 NULL
++ab8500_val_write_16473 ab8500_val_write 3 16473 NULL
++ocfs2_block_group_set_bits_16488 ocfs2_block_group_set_bits 0 16488 NULL
+tracing_readme_read_16493 tracing_readme_read 3 16493 NULL
++filemap_write_and_wait_16506 filemap_write_and_wait 0 16506 NULL
++start_this_handle_16519 start_this_handle 0 16519 NULL
+snd_interval_max_16529 snd_interval_max 0 16529 NULL
+lpfc_debugfs_read_16566 lpfc_debugfs_read 3 16566 NULL
+agp_allocate_memory_wrap_16576 agp_allocate_memory_wrap 1 16576 NULL
++__cfg80211_testmode_alloc_skb_16611 __cfg80211_testmode_alloc_skb 2 16611 NULL
++btrfs_wait_marked_extents_16615 btrfs_wait_marked_extents 0 16615 NULL
++bnx2i_session_create_16624 bnx2i_session_create 2 16624 NULL
++packet_recv_error_16669 packet_recv_error 3 16669 NULL
+dlm_new_lockspace_16688 dlm_new_lockspace 2 16688 NULL
+calc_layout_16690 calc_layout 4 16690 NULL
+em28xx_v4l2_read_16701 em28xx_v4l2_read 3 16701 NULL
++iscsi_recv_pdu_16755 iscsi_recv_pdu 4 16755 NULL
+arcmsr_adjust_disk_queue_depth_16756 arcmsr_adjust_disk_queue_depth 2 16756 NULL
-+compat_blkdev_driver_ioctl_16769 compat_blkdev_driver_ioctl 4 16769 NULL
+blk_rq_map_user_iov_16772 blk_rq_map_user_iov 5 16772 NULL
+i2o_parm_issue_16790 i2o_parm_issue 0 16790 NULL
+get_server_iovec_16804 get_server_iovec 2 16804 NULL
+tipc_send2name_16809 tipc_send2name 6 16809 NULL
-+dm_vcalloc_16814 dm_vcalloc 1-2 16814 NULL
+mled_proc_write_16831 mled_proc_write 3 16831 NULL nohasharray
+drm_malloc_ab_16831 drm_malloc_ab 1-2 16831 &mled_proc_write_16831
+scsi_mode_sense_16835 scsi_mode_sense 5 16835 NULL
-+avc_has_perm_noaudit_16837 avc_has_perm_noaudit 3 16837 NULL
+hfsplus_min_io_size_16859 hfsplus_min_io_size 0 16859 NULL
+alloc_idx_lebs_16872 alloc_idx_lebs 2 16872 NULL
+carl9170_debugfs_ampdu_state_read_16873 carl9170_debugfs_ampdu_state_read 3 16873 NULL
+st_write_16874 st_write 3 16874 NULL
+__kfifo_peek_n_16877 __kfifo_peek_n 0 16877 NULL
-+edac_align_ptr_16901 edac_align_ptr 0-2 16901 NULL
++ext4_ext_zeroout_16895 ext4_ext_zeroout 0 16895 NULL
+mwifiex_update_curr_bss_params_16908 mwifiex_update_curr_bss_params 5 16908 NULL
+ivtv_v4l2_ioctl_16915 ivtv_v4l2_ioctl 2 16915 NULL
+psb_unlocked_ioctl_16926 psb_unlocked_ioctl 2 16926 NULL nohasharray
+snd_gf1_mem_proc_dump_16926 snd_gf1_mem_proc_dump 5 16926 &psb_unlocked_ioctl_16926
++paranoid_check_vid_hdr_16932 paranoid_check_vid_hdr 0 16932 NULL
+random32_16937 random32 0 16937 NULL
-+_sp2d_alloc_16944 _sp2d_alloc 1-2-3 16944 NULL
++ip_append_data_16942 ip_append_data 5-6 16942 NULL
++_sp2d_alloc_16944 _sp2d_alloc 3-2-1 16944 NULL
+squashfs_read_table_16945 squashfs_read_table 3 16945 NULL
+cfg80211_send_unprot_disassoc_16951 cfg80211_send_unprot_disassoc 3 16951 NULL
++wrm_16966 wrm 0 16966 NULL
+keyctl_instantiate_key_iov_16969 keyctl_instantiate_key_iov 3 16969 NULL
+ceph_read_dir_17005 ceph_read_dir 3 17005 NULL
++snd_mask_refine_first_17026 snd_mask_refine_first 0 17026 NULL
+copy_counters_to_user_17027 copy_counters_to_user 5 17027 NULL nohasharray
+iwm_if_alloc_17027 iwm_if_alloc 1 17027 &copy_counters_to_user_17027
+jffs2_trusted_setxattr_17048 jffs2_trusted_setxattr 4 17048 NULL
+__arch_hweight32_17060 __arch_hweight32 0 17060 NULL
++sddr55_read_data_17072 sddr55_read_data 4 17072 NULL
+dvb_dvr_read_17073 dvb_dvr_read 3 17073 NULL
+simple_transaction_read_17076 simple_transaction_read 3 17076 NULL
++expand_files_17080 expand_files 2 17080 NULL
+carl9170_debugfs_mem_usage_read_17084 carl9170_debugfs_mem_usage_read 3 17084 NULL
-+mac_address_string_17091 mac_address_string 0 17091 NULL
+entry_length_17093 entry_length 0 17093 NULL
+sys_preadv_17100 sys_preadv 3 17100 NULL
++ocfs2_get_refcount_cpos_end_17113 ocfs2_get_refcount_cpos_end 0 17113 NULL
++write_mem_17114 write_mem 3 17114 NULL
+pvr2_hdw_state_report_17121 pvr2_hdw_state_report 3 17121 NULL
+mwifiex_get_common_rates_17131 mwifiex_get_common_rates 3 17131 NULL
++wrmaltWithLock_17139 wrmaltWithLock 0 17139 NULL
++jumpshot_write_data_17151 jumpshot_write_data 4 17151 NULL
+befs_nls2utf_17163 befs_nls2utf 3 17163 NULL
+pm860x_page_bulk_read_17174 pm860x_page_bulk_read 3 17174 NULL
-+access_remote_vm_17189 access_remote_vm 0-2-4 17189 NULL
++access_remote_vm_17189 access_remote_vm 0 17189 NULL nohasharray
++iwl_dbgfs_txfifo_flush_write_17189 iwl_dbgfs_txfifo_flush_write 3 17189 &access_remote_vm_17189
+driver_state_read_17194 driver_state_read 3 17194 NULL nohasharray
+iscsit_find_cmd_from_itt_or_dump_17194 iscsit_find_cmd_from_itt_or_dump 3 17194 &driver_state_read_17194
+dn_recvmsg_17213 dn_recvmsg 4 17213 NULL
+ms_rw_17220 ms_rw 3-4 17220 NULL
++__be16_to_cpup_17261 __be16_to_cpup 0 17261 NULL
+alloc_ep_17269 alloc_ep 1 17269 NULL
+pg_read_17276 pg_read 3 17276 NULL
+raw_recvmsg_17277 raw_recvmsg 4 17277 NULL
+neigh_hash_grow_17283 neigh_hash_grow 2 17283 NULL
+minstrel_stats_read_17290 minstrel_stats_read 3 17290 NULL
-+qla4_8xxx_pci_mem_read_direct_17301 qla4_8xxx_pci_mem_read_direct 2 17301 NULL
+skb_pad_17302 skb_pad 2 17302 NULL
+mb_cache_create_17307 mb_cache_create 2 17307 NULL
+iwm_umac_set_config_var_17320 iwm_umac_set_config_var 4 17320 NULL
+ata_host_alloc_pinfo_17325 ata_host_alloc_pinfo 3 17325 NULL
++alloc_fdtable_17389 alloc_fdtable 1 17389 NULL
+lpfc_debugfs_dif_err_write_17424 lpfc_debugfs_dif_err_write 3 17424 NULL
++compat_sys_ppoll_17430 compat_sys_ppoll 2 17430 NULL
+sta_connected_time_read_17435 sta_connected_time_read 3 17435 NULL
++snd_hammerfall_get_buffer_17441 snd_hammerfall_get_buffer 3 17441 NULL
+nla_get_u32_17455 nla_get_u32 0 17455 NULL
-+__ref_totlen_17461 __ref_totlen 0 17461 NULL
-+compat_cmd_17465 compat_cmd 2 17465 NULL
-+probe_bios_17467 probe_bios 1 17467 NULL
++__send_request_17461 __send_request 0 17461 NULL nohasharray
++__ref_totlen_17461 __ref_totlen 0 17461 &__send_request_17461
++probe_kernel_write_17481 probe_kernel_write 3 17481 NULL
+TSS_rawhmac_17486 TSS_rawhmac 3 17486 NULL
+bitmap_pos_to_ord_17503 bitmap_pos_to_ord 3 17503 NULL
++lbs_highrssi_write_17515 lbs_highrssi_write 3 17515 NULL
+restore_i387_fxsave_17528 restore_i387_fxsave 2 17528 NULL
+__cfg80211_roamed_17529 __cfg80211_roamed 5-7 17529 NULL
-+__copy_to_user_17551 __copy_to_user 3 17551 NULL
-+copy_from_user_17559 copy_from_user 3 17559 NULL
++xlog_do_log_recovery_17550 xlog_do_log_recovery 3 17550 NULL
++__copy_to_user_17551 __copy_to_user 3-0 17551 NULL
++copy_from_user_17559 copy_from_user 3-0 17559 NULL
++snd_pcm_action_lock_irq_17569 snd_pcm_action_lock_irq 0 17569 NULL
+acpi_ut_create_package_object_17594 acpi_ut_create_package_object 1 17594 NULL
+neigh_hash_alloc_17595 neigh_hash_alloc 1 17595 NULL
+rts51x_write_mem_17598 rts51x_write_mem 4 17598 NULL
+brcmf_process_nvram_vars_17601 brcmf_process_nvram_vars 0 17601 NULL nohasharray
+iwl_dump_nic_event_log_17601 iwl_dump_nic_event_log 0 17601 &brcmf_process_nvram_vars_17601
++__inode_info_17603 __inode_info 0 17603 NULL
+osst_execute_17607 osst_execute 7-6 17607 NULL
+ocfs2_mark_extent_written_17615 ocfs2_mark_extent_written 6 17615 NULL
++dma_map_page_17628 dma_map_page 0 17628 NULL
++ocfs2_rotate_subtree_left_17634 ocfs2_rotate_subtree_left 0 17634 NULL
+packet_setsockopt_17662 packet_setsockopt 5 17662 NULL nohasharray
+ubi_io_read_data_17662 ubi_io_read_data 0 17662 &packet_setsockopt_17662
++dsp_tone_hw_message_17678 dsp_tone_hw_message 3 17678 NULL
+pwr_enable_ps_read_17686 pwr_enable_ps_read 3 17686 NULL
-+venus_rename_17707 venus_rename 5-4 17707 NULL
-+multipath_status_17726 multipath_status 4 17726 NULL
++filemap_fdatawait_17688 filemap_fdatawait 0 17688 NULL
++venus_rename_17707 venus_rename 4-5 17707 NULL
++intel_wait_ring_buffer_17727 intel_wait_ring_buffer 0 17727 NULL
+exofs_read_lookup_dev_table_17733 exofs_read_lookup_dev_table 3 17733 NULL
+sctpprobe_read_17741 sctpprobe_read 3 17741 NULL
+mark_unsafe_pages_17759 mark_unsafe_pages 0 17759 NULL
-+_snd_pcm_lib_alloc_vmalloc_buffer_17820 _snd_pcm_lib_alloc_vmalloc_buffer 2 17820 NULL
++perf_clock_17787 perf_clock 0 17787 NULL
++get_unaligned_be64_17794 get_unaligned_be64 0 17794 NULL
+gnet_stats_copy_app_17821 gnet_stats_copy_app 3 17821 NULL
+cipso_v4_gentag_rbm_17836 cipso_v4_gentag_rbm 0 17836 NULL
+count_leafs_17842 count_leafs 0 17842 NULL
++tcp_left_out_17860 tcp_left_out 0 17860 NULL
+sisusb_send_bulk_msg_17864 sisusb_send_bulk_msg 3 17864 NULL
+alloc_sja1000dev_17868 alloc_sja1000dev 1 17868 NULL
+ray_cs_essid_proc_write_17875 ray_cs_essid_proc_write 3 17875 NULL
-+orinoco_set_key_17878 orinoco_set_key 5-7 17878 NULL
++orinoco_set_key_17878 orinoco_set_key 7-5 17878 NULL
+init_per_cpu_17880 init_per_cpu 1 17880 NULL
+ieee80211_if_fmt_dot11MeshMaxPeerLinks_17883 ieee80211_if_fmt_dot11MeshMaxPeerLinks 3 17883 NULL
+compat_sys_pwritev_17886 compat_sys_pwritev 3 17886 NULL
+ieee80211_if_fmt_dot11MeshHWMPRootMode_17890 ieee80211_if_fmt_dot11MeshHWMPRootMode 3 17890 NULL
+ocfs2_clusters_to_blocks_17896 ocfs2_clusters_to_blocks 0-2 17896 NULL
-+recover_head_17904 recover_head 3 17904 NULL
+dccp_feat_register_sp_17914 dccp_feat_register_sp 5 17914 NULL
+xfs_buf_associate_memory_17915 xfs_buf_associate_memory 3 17915 NULL
++xfs_rtallocate_extent_near_17916 xfs_rtallocate_extent_near 3-5-9 17916 NULL
+srp_iu_pool_alloc_17920 srp_iu_pool_alloc 2 17920 NULL
+scsi_bufflen_17933 scsi_bufflen 0 17933 NULL
-+ufs_free_blocks_17963 ufs_free_blocks 2-3 17963 NULL
++beacon_interval_write_17952 beacon_interval_write 3 17952 NULL
++ufs_free_blocks_17963 ufs_free_blocks 3-2 17963 NULL
+calc_nr_buckets_17976 calc_nr_buckets 0 17976 NULL
+smk_write_cipso_17989 smk_write_cipso 3 17989 NULL
-+gnttab_max_grant_frames_17993 gnttab_max_grant_frames 0 17993 NULL
+ext4_num_overhead_clusters_18001 ext4_num_overhead_clusters 2 18001 NULL
+pvr2_v4l2_read_18006 pvr2_v4l2_read 3 18006 NULL
+prandom32_18007 prandom32 0 18007 NULL
+alloc_rx_desc_ring_18016 alloc_rx_desc_ring 2 18016 NULL
+fill_read_18019 fill_read 0 18019 NULL
+o2hb_highest_node_18034 o2hb_highest_node 2 18034 NULL
-+cryptd_alloc_instance_18048 cryptd_alloc_instance 2-3 18048 NULL
++ocfs2_cache_cluster_dealloc_18043 ocfs2_cache_cluster_dealloc 0 18043 NULL
++cryptd_alloc_instance_18048 cryptd_alloc_instance 3-2 18048 NULL
+ddebug_proc_write_18055 ddebug_proc_write 3 18055 NULL
++fpregs_get_18066 fpregs_get 4 18066 NULL
++packet_came_18072 packet_came 3 18072 NULL
+kvm_read_guest_page_18074 kvm_read_guest_page 5 18074 NULL
-+get_vm_area_18080 get_vm_area 1 18080 NULL
++pvclock_get_nsec_offset_18104 pvclock_get_nsec_offset 0 18104 NULL
+netlink_kernel_create_18110 netlink_kernel_create 3 18110 NULL
++iwch_create_cq_18115 iwch_create_cq 2 18115 NULL
+dfs_file_read_18116 dfs_file_read 3 18116 NULL
+svc_getnl_18120 svc_getnl 0 18120 NULL
-+vmw_surface_dma_size_18132 vmw_surface_dma_size 0 18132 NULL
+selinux_inode_setsecurity_18148 selinux_inode_setsecurity 4 18148 NULL
++is_idx_node_in_use_18165 is_idx_node_in_use 0 18165 NULL
+_has_tag_18169 _has_tag 2 18169 NULL
+pccard_store_cis_18176 pccard_store_cis 6 18176 NULL
++cfpkt_create_18197 cfpkt_create 1 18197 NULL
++snd_pcm_hw_refine_user_18204 snd_pcm_hw_refine_user 0 18204 NULL
+orinoco_add_extscan_result_18207 orinoco_add_extscan_result 3 18207 NULL
+gsm_control_message_18209 gsm_control_message 4 18209 NULL
++ocfs2_divide_leaf_refcount_block_18214 ocfs2_divide_leaf_refcount_block 0 18214 NULL
+do_ipv6_setsockopt_18215 do_ipv6_setsockopt 5 18215 NULL
+koneplus_send_18226 koneplus_send 4 18226 NULL
+gnttab_alloc_grant_references_18240 gnttab_alloc_grant_references 1 18240 NULL
-+snd_ctl_ioctl_compat_18250 snd_ctl_ioctl_compat 3 18250 NULL
+rfcomm_sock_setsockopt_18254 rfcomm_sock_setsockopt 5 18254 NULL
++__sysfs_add_one_18258 __sysfs_add_one 0 18258 NULL
+qdisc_class_hash_alloc_18262 qdisc_class_hash_alloc 1 18262 NULL
++call_usermodehelper_18268 call_usermodehelper 0 18268 NULL
+gfs2_alloc_sort_buffer_18275 gfs2_alloc_sort_buffer 1 18275 NULL
-+alloc_ring_18278 alloc_ring 2-4 18278 NULL
++alloc_ring_18278 alloc_ring 4-2 18278 NULL
+find_dirty_idx_leb_18280 find_dirty_idx_leb 0 18280 NULL
+mmc_send_bus_test_18285 mmc_send_bus_test 4 18285 NULL
+um_idi_write_18293 um_idi_write 3 18293 NULL
+ip6ip6_err_18308 ip6ip6_err 5 18308 NULL
+vga_r_18310 vga_r 0 18310 NULL
++alloc_and_copy_string_18321 alloc_and_copy_string 2 18321 NULL
+ecryptfs_send_message_18322 ecryptfs_send_message 2 18322 NULL
+bio_integrity_advance_18324 bio_integrity_advance 2 18324 NULL
+lcd_proc_write_18351 lcd_proc_write 3 18351 NULL
@@ -105538,11 +106456,15 @@ index 0000000..6fcc08d
+snd_hda_get_connections_18437 snd_hda_get_connections 0 18437 NULL
+fuse_perform_write_18457 fuse_perform_write 4 18457 NULL
+regset_tls_set_18459 regset_tls_set 4 18459 NULL
-+udpv6_setsockopt_18487 udpv6_setsockopt 5 18487 NULL
++write_file_tx_chainmask_18487 write_file_tx_chainmask 3 18487 NULL nohasharray
++udpv6_setsockopt_18487 udpv6_setsockopt 5 18487 &write_file_tx_chainmask_18487
++__copy_user_zeroing_intel_18510 __copy_user_zeroing_intel 0-3 18510 NULL
++snd_vx_inb_18514 snd_vx_inb 0 18514 NULL
+snd_gus_dram_poke_18525 snd_gus_dram_poke 4 18525 NULL
+seq_copy_in_user_18543 seq_copy_in_user 3 18543 NULL
+acpi_register_gsi_ioapic_18550 acpi_register_gsi_ioapic 2 18550 NULL
+sas_change_queue_depth_18555 sas_change_queue_depth 2 18555 NULL
++vb2_streamon_18562 vb2_streamon 0 18562 NULL
+debug_output_18575 debug_output 3 18575 NULL
+check_lpt_type_18577 check_lpt_type 0 18577 NULL
+__netdev_alloc_skb_18595 __netdev_alloc_skb 2 18595 NULL
@@ -105556,25 +106478,21 @@ index 0000000..6fcc08d
+unmap_page_18665 unmap_page 2-3 18665 NULL
+edge_tty_recv_18667 edge_tty_recv 4 18667 NULL nohasharray
+xfs_iext_insert_18667 xfs_iext_insert 3 18667 &edge_tty_recv_18667
-+replay_log_leb_18704 replay_log_leb 3 18704 NULL
+iwl_dbgfs_rx_handlers_read_18708 iwl_dbgfs_rx_handlers_read 3 18708 NULL
+ceph_alloc_page_vector_18710 ceph_alloc_page_vector 1 18710 NULL
-+ocfs2_trim_extent_18711 ocfs2_trim_extent 4-3 18711 NULL
++ocfs2_trim_extent_18711 ocfs2_trim_extent 3-4 18711 NULL
+blk_rq_bytes_18715 blk_rq_bytes 0 18715 NULL
+snd_als4k_gcr_read_addr_18741 snd_als4k_gcr_read_addr 0 18741 NULL
+o2hb_debug_create_18744 o2hb_debug_create 4 18744 NULL
+__erst_read_to_erange_from_nvram_18748 __erst_read_to_erange_from_nvram 0 18748 NULL
+wep_packets_read_18751 wep_packets_read 3 18751 NULL
-+md_compat_ioctl_18764 md_compat_ioctl 4 18764 NULL
+read_file_dump_nfcal_18766 read_file_dump_nfcal 3 18766 NULL
+ffs_epfile_read_18775 ffs_epfile_read 3 18775 NULL
+alloc_fcdev_18780 alloc_fcdev 1 18780 NULL
-+fat_compat_dir_ioctl_18800 fat_compat_dir_ioctl 3 18800 NULL
-+__do_kmalloc_18808 __do_kmalloc 0 18808 NULL
++ieee80211_auth_challenge_18810 ieee80211_auth_challenge 3 18810 NULL
+setup_ioapic_irq_18813 setup_ioapic_irq 1 18813 NULL
+iio_allocate_device_18821 iio_allocate_device 1 18821 NULL
+sys_modify_ldt_18824 sys_modify_ldt 3 18824 NULL
-+thin_status_18830 thin_status 4 18830 NULL
+mtf_test_write_18844 mtf_test_write 3 18844 NULL
+drm_ht_create_18853 drm_ht_create 2 18853 NULL
+sctp_setsockopt_events_18862 sctp_setsockopt_events 3 18862 NULL
@@ -105583,78 +106501,94 @@ index 0000000..6fcc08d
+width_to_agaw_18883 width_to_agaw 0-1 18883 NULL
+ceph_setxattr_18913 ceph_setxattr 4 18913 NULL
+snapshot_write_next_18937 snapshot_write_next 0 18937 NULL
++sctp_tsnmap_num_gabs_18952 sctp_tsnmap_num_gabs 0 18952 NULL
++fdb_nlmsg_size_18957 fdb_nlmsg_size 0 18957 NULL
+__nla_reserve_18974 __nla_reserve 3 18974 NULL
+alc_auto_create_extra_outs_18975 alc_auto_create_extra_outs 2 18975 NULL
+find_dirtiest_idx_leb_19001 find_dirtiest_idx_leb 0 19001 NULL
+layout_in_gaps_19006 layout_in_gaps 2 19006 NULL
+huge_page_size_19008 huge_page_size 0 19008 NULL
-+usbdev_compat_ioctl_19026 usbdev_compat_ioctl 3 19026 NULL
++push_leaf_right_19017 push_leaf_right 0 19017 NULL
+prepare_highmem_image_19028 prepare_highmem_image 0 19028 NULL
++ocfs2_steal_resource_19036 ocfs2_steal_resource 0 19036 NULL
+revalidate_19043 revalidate 2 19043 NULL
-+drm_fb_helper_init_19044 drm_fb_helper_init 3-4 19044 NULL
++drm_fb_helper_init_19044 drm_fb_helper_init 4-3 19044 NULL
++afs_vnode_store_data_19048 afs_vnode_store_data 2-3-4-5 19048 NULL
++do_vm86_irq_handling_19056 do_vm86_irq_handling 2 19056 NULL
+create_gpadl_header_19064 create_gpadl_header 2 19064 NULL
+ieee80211_key_alloc_19065 ieee80211_key_alloc 3 19065 NULL
+alloc_pbl_19075 alloc_pbl 2 19075 NULL
-+au_procfs_plm_write_19086 au_procfs_plm_write 3 19086 NULL
+copy_and_check_19089 copy_and_check 3 19089 NULL
-+sys_process_vm_readv_19090 sys_process_vm_readv 3-5 19090 NULL
++sys_process_vm_readv_19090 sys_process_vm_readv 5-3 19090 NULL
+sta_last_seq_ctrl_read_19106 sta_last_seq_ctrl_read 3 19106 NULL
+cifs_readv_from_socket_19109 cifs_readv_from_socket 3 19109 NULL
+skb_gro_offset_19123 skb_gro_offset 0 19123 NULL
+ext4_inode_table_19125 ext4_inode_table 0 19125 NULL
+snd_als4k_iobase_readl_19136 snd_als4k_iobase_readl 0 19136 NULL
+alloc_irdadev_19140 alloc_irdadev 1 19140 NULL
++count_history_pages_19171 count_history_pages 0-3 19171 NULL
+iwl_dbgfs_reply_tx_error_read_19205 iwl_dbgfs_reply_tx_error_read 3 19205 NULL
+vmw_unlocked_ioctl_19212 vmw_unlocked_ioctl 2 19212 NULL
-+__copy_to_user_inatomic_19214 __copy_to_user_inatomic 3 19214 NULL
++__copy_to_user_inatomic_19214 __copy_to_user_inatomic 3-0 19214 NULL
+dev_counters_read_19216 dev_counters_read 3 19216 NULL
+gsi_to_irq_19220 gsi_to_irq 0-1 19220 NULL
+snd_mask_max_19224 snd_mask_max 0 19224 NULL
++snd_pcm_capture_rewind_19229 snd_pcm_capture_rewind 0-2 19229 NULL
+sys_fcntl_19267 sys_fcntl 3 19267 NULL
-+io_mapping_map_wc_19284 io_mapping_map_wc 2 19284 NULL
-+____cache_alloc_node_19297 ____cache_alloc_node 0 19297 NULL
++setup_shmem_window_19292 setup_shmem_window 2-3 19292 NULL
+qc_capture_19298 qc_capture 3 19298 NULL
-+ocfs2_prepare_inode_for_refcount_19303 ocfs2_prepare_inode_for_refcount 3-4 19303 NULL
++ocfs2_prepare_inode_for_refcount_19303 ocfs2_prepare_inode_for_refcount 4-3 19303 NULL
+event_tx_stuck_read_19305 event_tx_stuck_read 3 19305 NULL
+debug_read_19322 debug_read 3 19322 NULL
-+cfg80211_inform_bss_19332 cfg80211_inform_bss 8 19332 NULL
++cfg80211_inform_bss_19332 cfg80211_inform_bss 8 19332 NULL nohasharray
++lbs_host_sleep_write_19332 lbs_host_sleep_write 3 19332 &cfg80211_inform_bss_19332
++firmware_data_write_19360 firmware_data_write 6-5 19360 NULL
+read_zero_19366 read_zero 3 19366 NULL
+interpret_user_input_19393 interpret_user_input 2 19393 NULL
++get_unaligned_be16_19400 get_unaligned_be16 0 19400 NULL
+get_n_events_by_type_19401 get_n_events_by_type 0 19401 NULL
++pep_recvmsg_19402 pep_recvmsg 4 19402 NULL
+dvbdmx_write_19423 dvbdmx_write 3 19423 NULL
+__phys_addr_19434 __phys_addr 0 19434 NULL
+xfrm_alg_auth_len_19454 xfrm_alg_auth_len 0 19454 NULL
-+hpet_compat_ioctl_19455 hpet_compat_ioctl 3 19455 NULL
+gnet_stats_copy_19458 gnet_stats_copy 4 19458 NULL
+sky2_read16_19475 sky2_read16 0 19475 NULL
++refill_pool_19477 refill_pool 2 19477 NULL
+efivar_create_sysfs_entry_19485 efivar_create_sysfs_entry 2 19485 NULL
++__read_status_pciv2_19492 __read_status_pciv2 0 19492 NULL
++kstrtoll_from_user_19500 kstrtoll_from_user 2 19500 NULL
+v4l2_event_subscribe_19510 v4l2_event_subscribe 3 19510 NULL
+skb_realloc_headroom_19516 skb_realloc_headroom 2 19516 NULL
++atm_alloc_charge_19517 atm_alloc_charge 2 19517 NULL nohasharray
++dev_alloc_skb_19517 dev_alloc_skb 1 19517 &atm_alloc_charge_19517
++apei_exec_pre_map_gars_19529 apei_exec_pre_map_gars 0 19529 NULL
+ocfs2_control_message_19564 ocfs2_control_message 3 19564 NULL
+ieee80211_if_read_tkip_mic_test_19565 ieee80211_if_read_tkip_mic_test 3 19565 NULL
+nfsd_read_19568 nfsd_read 5 19568 NULL
+cgroup_read_s64_19570 cgroup_read_s64 5 19570 NULL
+bm_status_read_19583 bm_status_read 3 19583 NULL
+load_xattr_datum_19594 load_xattr_datum 0 19594 NULL
++buffRdbkVerify_19644 buffRdbkVerify 0 19644 NULL
+alloc_coherent_19649 alloc_coherent 2 19649 NULL
-+usbvision_rvmalloc_19655 usbvision_rvmalloc 1 19655 NULL
+LoadBitmap_19658 LoadBitmap 2 19658 NULL
+rbd_snap_add_19678 rbd_snap_add 4 19678 NULL
+delay_status_19685 delay_status 4 19685 NULL
-+au_ibusy_compat_ioctl_19723 au_ibusy_compat_ioctl 2 19723 NULL nohasharray
-+read_reg_19723 read_reg 0 19723 &au_ibusy_compat_ioctl_19723
-+memcpy_toiovecend_19736 memcpy_toiovecend 4-3 19736 NULL
++btrfs_write_marked_extents_19720 btrfs_write_marked_extents 0 19720 NULL
++read_reg_19723 read_reg 0 19723 NULL
++memcpy_toiovecend_19736 memcpy_toiovecend 3-4 19736 NULL
+snd_es1968_get_dma_ptr_19747 snd_es1968_get_dma_ptr 0 19747 NULL
-+p9_client_read_19750 p9_client_read 5 19750 NULL
++p9_client_read_19750 p9_client_read 0-5 19750 NULL
+pnpbios_proc_write_19758 pnpbios_proc_write 3 19758 NULL
+jffs2_acl_from_medium_19762 jffs2_acl_from_medium 2 19762 NULL
-+slow_kernel_write_19764 slow_kernel_write 2 19764 NULL
++ocfs2_read_group_descriptor_19771 ocfs2_read_group_descriptor 0 19771 NULL
+__set_print_fmt_19776 __set_print_fmt 0 19776 NULL
+saa7146_vmalloc_build_pgtable_19780 saa7146_vmalloc_build_pgtable 2 19780 NULL
++madgemc_sifreadw_19811 madgemc_sifreadw 0 19811 NULL
+irda_setsockopt_19824 irda_setsockopt 5 19824 NULL
-+ubi_eba_write_leb_19826 ubi_eba_write_leb 5-6 19826 NULL
++ubi_eba_write_leb_19826 ubi_eba_write_leb 0 19826 NULL
+pcpu_next_unpop_19831 pcpu_next_unpop 4 19831 NULL
+vfs_getxattr_19832 vfs_getxattr 0 19832 NULL
++key_validate_19834 key_validate 0 19834 NULL
+security_context_to_sid_19839 security_context_to_sid 2 19839 NULL
+cfg80211_mlme_register_mgmt_19852 cfg80211_mlme_register_mgmt 5 19852 NULL
+__nla_put_19857 __nla_put 3 19857 NULL
@@ -105662,67 +106596,80 @@ index 0000000..6fcc08d
+ps_upsd_max_apturn_read_19918 ps_upsd_max_apturn_read 3 19918 NULL
+cgroup_task_count_19930 cgroup_task_count 0 19930 NULL
+iwl_dbgfs_rx_queue_read_19943 iwl_dbgfs_rx_queue_read 3 19943 NULL
-+dbg_leb_change_19969 dbg_leb_change 4 19969 NULL
++ax25_send_frame_19964 ax25_send_frame 2 19964 NULL
++dbg_leb_change_19969 dbg_leb_change 0 19969 NULL
+attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL
++ip_send_reply_19987 ip_send_reply 5 19987 NULL
+diva_um_idi_read_20003 diva_um_idi_read 0 20003 NULL
++jbd2_journal_create_slab_20043 jbd2_journal_create_slab 1 20043 NULL
++__be32_to_cpup_20056 __be32_to_cpup 0 20056 NULL
+alloc_ieee80211_20063 alloc_ieee80211 1 20063 NULL
+rawv6_sendmsg_20080 rawv6_sendmsg 4 20080 NULL
+fuse_conn_limit_read_20084 fuse_conn_limit_read 3 20084 NULL
++aat2870_reg_write_file_20086 aat2870_reg_write_file 3 20086 NULL
+qla2x00_adjust_sdev_qdepth_up_20097 qla2x00_adjust_sdev_qdepth_up 2 20097 NULL
++root_nfs_copy_20111 root_nfs_copy 3 20111 NULL
+hptiop_adjust_disk_queue_depth_20122 hptiop_adjust_disk_queue_depth 2 20122 NULL
+tomoyo_commit_ok_20167 tomoyo_commit_ok 2 20167 NULL
+read_flush_pipefs_20171 read_flush_pipefs 3 20171 NULL
+wep_addr_key_count_read_20174 wep_addr_key_count_read 3 20174 NULL
+create_trace_probe_20175 create_trace_probe 1 20175 NULL
++crystalhd_map_dio_20181 crystalhd_map_dio 3 20181 NULL
++ext4_llseek_20183 ext4_llseek 2 20183 NULL
+pvr2_ctrl_value_to_sym_20229 pvr2_ctrl_value_to_sym 5 20229 NULL
+rose_sendmsg_20249 rose_sendmsg 4 20249 NULL
+tm6000_i2c_send_regs_20250 tm6000_i2c_send_regs 5 20250 NULL
+pcpu_alloc_20255 pcpu_alloc 1-2 20255 NULL
+resource_size_20256 resource_size 0 20256 NULL
++_rtl92s_get_h2c_cmdlen_20312 _rtl92s_get_h2c_cmdlen 0 20312 NULL
++vx_send_msg_nolock_20322 vx_send_msg_nolock 0 20322 NULL
+snd_cs4281_BA1_read_20323 snd_cs4281_BA1_read 5 20323 NULL
++ocfs2_et_insert_check_20341 ocfs2_et_insert_check 0 20341 NULL
+gfs2_glock_nq_m_20347 gfs2_glock_nq_m 1 20347 NULL
-+qla82xx_pci_mem_read_direct_20368 qla82xx_pci_mem_read_direct 2 20368 NULL
-+u64_to_uptr_20384 u64_to_uptr 1 20384 NULL
++snd_pcm_stop_20376 snd_pcm_stop 0 20376 NULL
++block_read_full_page_20380 block_read_full_page 0 20380 NULL
+snd_nm256_readl_20394 snd_nm256_readl 0 20394 NULL
+__kfifo_from_user_20399 __kfifo_from_user 3 20399 NULL
+interface_rx_20404 interface_rx 4 20404 NULL
-+au_di_realloc_20412 au_di_realloc 2 20412 NULL
++find_skb_20431 find_skb 2 20431 NULL
++fmc_send_cmd_20435 fmc_send_cmd 5 20435 NULL
++tcp_fragment_20436 tcp_fragment 3 20436 NULL
+nfs3_setxattr_20458 nfs3_setxattr 4 20458 NULL
+ip_vs_icmp_xmit_v6_20464 ip_vs_icmp_xmit_v6 4 20464 NULL
+compat_ipv6_setsockopt_20468 compat_ipv6_setsockopt 5 20468 NULL
+read_buf_20469 read_buf 2 20469 NULL
-+dbg_leb_write_20478 dbg_leb_write 4-5 20478 NULL
-+fast_user_write_20494 fast_user_write 5 20494 NULL
+ocfs2_db_frozen_trigger_20503 ocfs2_db_frozen_trigger 4 20503 NULL nohasharray
+hidraw_report_event_20503 hidraw_report_event 3 20503 &ocfs2_db_frozen_trigger_20503
+pcpu_alloc_area_20511 pcpu_alloc_area 0-3 20511 NULL
-+pcpu_depopulate_chunk_20517 pcpu_depopulate_chunk 2-3 20517 NULL
++pcpu_depopulate_chunk_20517 pcpu_depopulate_chunk 3-2 20517 NULL
+xfs_iext_realloc_direct_20521 xfs_iext_realloc_direct 2 20521 NULL
+drbd_bm_resize_20522 drbd_bm_resize 2 20522 NULL
+amd_create_gatt_pages_20537 amd_create_gatt_pages 1 20537 NULL
+venus_create_20555 venus_create 4 20555 NULL
+crypto_ahash_reqsize_20569 crypto_ahash_reqsize 0 20569 NULL
+i915_max_freq_read_20581 i915_max_freq_read 3 20581 NULL
++ocfs2_cluster_lock_20588 ocfs2_cluster_lock 0 20588 NULL
+lirc_write_20604 lirc_write 3 20604 NULL
-+qib_qsfp_write_20614 qib_qsfp_write 0-4-2 20614 NULL
++qib_qsfp_write_20614 qib_qsfp_write 0-2-4 20614 NULL
+regcache_lzo_block_count_20628 regcache_lzo_block_count 0 20628 NULL
+snd_pcm_oss_prepare_20641 snd_pcm_oss_prepare 0 20641 NULL
-+kfifo_copy_to_user_20646 kfifo_copy_to_user 3 20646 NULL
-+cpulist_scnprintf_20648 cpulist_scnprintf 0-2 20648 NULL
-+__cache_alloc_20649 __cache_alloc 0 20649 NULL
++kfifo_copy_to_user_20646 kfifo_copy_to_user 4-3 20646 NULL
++cpulist_scnprintf_20648 cpulist_scnprintf 2-0 20648 NULL
+ceph_osdc_new_request_20654 ceph_osdc_new_request 15-4 20654 NULL
+snd_hdsp_playback_copy_20676 snd_hdsp_playback_copy 5 20676 NULL
-+qla4_8xxx_pci_mem_read_2M_20680 qla4_8xxx_pci_mem_read_2M 2 20680 NULL
+dvb_dmxdev_buffer_read_20682 dvb_dmxdev_buffer_read 0-4 20682 NULL
+cpumask_size_20683 cpumask_size 0 20683 NULL
++btrfs_node_blockptr_20685 btrfs_node_blockptr 0 20685 NULL
+read_file_tgt_int_stats_20697 read_file_tgt_int_stats 3 20697 NULL
+__maestro_read_20700 __maestro_read 0 20700 NULL
+cipso_v4_gentag_rng_20703 cipso_v4_gentag_rng 0 20703 NULL
++page_cache_sync_readahead_20706 page_cache_sync_readahead 5-4 20706 NULL
+pcpu_page_first_chunk_20712 pcpu_page_first_chunk 1 20712 NULL
+ocfs2_read_xattr_bucket_20722 ocfs2_read_xattr_bucket 0 20722 NULL
+security_context_to_sid_force_20724 security_context_to_sid_force 2 20724 NULL
-+vring_add_indirect_20737 vring_add_indirect 3-4 20737 NULL
++vring_add_indirect_20737 vring_add_indirect 4-3 20737 NULL
+io_apic_set_pci_routing_20740 io_apic_set_pci_routing 2 20740 NULL
++fb_prepare_logo_20743 fb_prepare_logo 0 20743 NULL
+vol_cdev_direct_write_20751 vol_cdev_direct_write 3 20751 NULL
+ocfs2_align_bytes_to_clusters_20754 ocfs2_align_bytes_to_clusters 2 20754 NULL
+ubi_io_read_20767 ubi_io_read 0 20767 NULL
@@ -105730,47 +106677,60 @@ index 0000000..6fcc08d
+iommu_range_alloc_20794 iommu_range_alloc 3 20794 NULL
+iwl_dbgfs_rxon_flags_read_20795 iwl_dbgfs_rxon_flags_read 3 20795 NULL
+sys_sendto_20809 sys_sendto 6 20809 NULL
++ext4_convert_unwritten_extents_endio_20812 ext4_convert_unwritten_extents_endio 0 20812 NULL
+strndup_user_20819 strndup_user 2 20819 NULL
+iwl_legacy_dbgfs_qos_read_20825 iwl_legacy_dbgfs_qos_read 3 20825 NULL
+wl1271_format_buffer_20834 wl1271_format_buffer 2 20834 NULL
-+uvc_alloc_entity_20836 uvc_alloc_entity 4-3 20836 NULL
++uvc_alloc_entity_20836 uvc_alloc_entity 3-4 20836 NULL
++p9_tag_alloc_20845 p9_tag_alloc 3 20845 NULL
+snd_pcm_capture_avail_20867 snd_pcm_capture_avail 0 20867 NULL
+ocfs2_bmap_20874 ocfs2_bmap 2 20874 NULL
+iwl3945_ucode_tx_stats_read_20879 iwl3945_ucode_tx_stats_read 3 20879 NULL
++rb_simple_write_20890 rb_simple_write 3 20890 NULL
+sisusb_send_packet_20891 sisusb_send_packet 2 20891 NULL
+key_icverrors_read_20895 key_icverrors_read 3 20895 NULL
++ext4_calc_metadata_amount_20905 ext4_calc_metadata_amount 2 20905 NULL
+compat_sys_readv_20911 compat_sys_readv 3 20911 NULL
++ixj_write_20912 ixj_write 3 20912 NULL
++lbs_rdbbp_write_20918 lbs_rdbbp_write 3 20918 NULL
+htable_bits_20933 htable_bits 0 20933 NULL
++check_eofblocks_fl_20942 check_eofblocks_fl 0 20942 NULL
+altera_set_ir_post_20948 altera_set_ir_post 2 20948 NULL
++get_init_ra_size_20955 get_init_ra_size 1 20955 NULL
++insert_ptr_20961 insert_ptr 0 20961 NULL
+snd_rme9652_playback_copy_20970 snd_rme9652_playback_copy 5 20970 NULL
++brcmf_tx_frame_20978 brcmf_tx_frame 3 20978 NULL
+alg_setsockopt_20985 alg_setsockopt 5 20985 NULL
++qib_verbs_send_20999 qib_verbs_send 5-3 20999 NULL
+ocfs2_free_clusters_21001 ocfs2_free_clusters 4 21001 NULL
+btrfs_inode_ref_name_len_21024 btrfs_inode_ref_name_len 0 21024 NULL
++snd_pcm_lib_preallocate_pages_21031 snd_pcm_lib_preallocate_pages 4 21031 NULL
+lbs_threshold_read_21046 lbs_threshold_read 5 21046 NULL
+proc_fault_inject_write_21058 proc_fault_inject_write 3 21058 NULL
++rose_create_facilities_21067 rose_create_facilities 0 21067 NULL
+event_calibration_read_21083 event_calibration_read 3 21083 NULL
-+compat_sock_ioctl_trans_21092 compat_sock_ioctl_trans 4 21092 NULL
+__cfg80211_send_disassoc_21096 __cfg80211_send_disassoc 3 21096 NULL
+ext2_valid_block_bitmap_21101 ext2_valid_block_bitmap 3 21101 NULL
+ath6kl_send_go_probe_resp_21113 ath6kl_send_go_probe_resp 3 21113 NULL
+i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL
++new_skb_21148 new_skb 1 21148 NULL
+ocfs2_block_check_validate_21149 ocfs2_block_check_validate 2 21149 NULL
+setup_msi_irq_21169 setup_msi_irq 3 21169 NULL
+cx18_v4l2_read_21196 cx18_v4l2_read 3 21196 NULL
+ipc_rcu_alloc_21208 ipc_rcu_alloc 1 21208 NULL
-+_ocfs2_free_clusters_21220 _ocfs2_free_clusters 4 21220 NULL
++_ocfs2_free_clusters_21220 _ocfs2_free_clusters 0-4 21220 NULL
+get_numpages_21227 get_numpages 0-1-2 21227 NULL
-+flex_array_get_21228 flex_array_get 2 21228 NULL
+input_ff_create_21240 input_ff_create 2 21240 NULL
+cfg80211_notify_new_peer_candidate_21242 cfg80211_notify_new_peer_candidate 4 21242 NULL
++sock_alloc_send_pskb_21246 sock_alloc_send_pskb 2 21246 NULL
+ocfs2_blocks_for_bytes_21268 ocfs2_blocks_for_bytes 0-2 21268 NULL
-+vmw_gmr2_bind_21305 vmw_gmr2_bind 3 21305 NULL
+store_bluetooth_21320 store_bluetooth 4 21320 NULL
+get_zeroed_page_21322 get_zeroed_page 0 21322 NULL
+ftrace_profile_read_21327 ftrace_profile_read 3 21327 NULL
+iwl_legacy_tx_queue_init_21332 iwl_legacy_tx_queue_init 3 21332 NULL
+gfs2_ea_get_copy_21353 gfs2_ea_get_copy 0 21353 NULL
+alloc_orinocodev_21371 alloc_orinocodev 1 21371 NULL
++split_leaf_21378 split_leaf 0 21378 NULL
+video_ioctl2_21380 video_ioctl2 2 21380 NULL
+diva_get_driver_dbg_mask_21399 diva_get_driver_dbg_mask 0 21399 NULL
+snd_m3_inw_21406 snd_m3_inw 0 21406 NULL
@@ -105778,184 +106738,225 @@ index 0000000..6fcc08d
+tcp_bound_to_half_wnd_21429 tcp_bound_to_half_wnd 0-2 21429 NULL
+tracing_saved_cmdlines_read_21434 tracing_saved_cmdlines_read 3 21434 NULL
+concat_writev_21451 concat_writev 3 21451 NULL
++ReadISAR_21453 ReadISAR 0 21453 NULL
+read_file_xmit_21487 read_file_xmit 3 21487 NULL
+mmc_alloc_sg_21504 mmc_alloc_sg 1 21504 NULL
++dma_skb_copy_datagram_iovec_21516 dma_skb_copy_datagram_iovec 3-5 21516 NULL
+btrfs_file_aio_write_21520 btrfs_file_aio_write 4 21520 NULL
+cipso_v4_map_cat_enum_hton_21540 cipso_v4_map_cat_enum_hton 0 21540 NULL
+rxrpc_send_data_21553 rxrpc_send_data 5 21553 NULL
++snd_es18xx_mixer_read_21586 snd_es18xx_mixer_read 0 21586 NULL
+ocfs2_acl_from_xattr_21604 ocfs2_acl_from_xattr 2 21604 NULL
++xlog_do_recovery_pass_21618 xlog_do_recovery_pass 3 21618 NULL
++ndisc_addr_option_pad_21630 ndisc_addr_option_pad 0 21630 NULL
+__jfs_getxattr_21631 __jfs_getxattr 0 21631 NULL
+validate_nnode_21638 validate_nnode 0 21638 NULL
-+__irq_alloc_descs_21639 __irq_alloc_descs 2-1-3 21639 NULL
++__irq_alloc_descs_21639 __irq_alloc_descs 2-1-3-0 21639 NULL
++ocfs2_lock_refcount_allocators_21646 ocfs2_lock_refcount_allocators 0 21646 NULL
++carl9170_rx_copy_data_21656 carl9170_rx_copy_data 2 21656 NULL
+hpet_setup_msi_irq_21662 hpet_setup_msi_irq 1 21662 NULL
+atalk_sendmsg_21677 atalk_sendmsg 4 21677 NULL
+ocfs2_xattr_get_nolock_21678 ocfs2_xattr_get_nolock 0 21678 NULL
-+rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL
++rtllib_alloc_txb_21687 rtllib_alloc_txb 1-2 21687 NULL
++kobject_uevent_env_21703 kobject_uevent_env 0 21703 NULL
+evdev_ioctl_handler_21705 evdev_ioctl_handler 2 21705 NULL
+drm_sman_init_21710 drm_sman_init 2-4-3 21710 NULL
-+reiserfs_allocate_list_bitmaps_21732 reiserfs_allocate_list_bitmaps 3 21732 NULL
++ocfs2_remove_rightmost_path_21729 ocfs2_remove_rightmost_path 0 21729 NULL
++ext4_split_extent_at_21732 ext4_split_extent_at 0 21732 NULL
+mthca_alloc_init_21754 mthca_alloc_init 2 21754 NULL
++l2down_create_21755 l2down_create 4 21755 NULL
++usbat_flash_read_data_21762 usbat_flash_read_data 4 21762 NULL
+gen_pool_add_21776 gen_pool_add 3 21776 NULL
++atomic64_cmpxchg_21782 atomic64_cmpxchg 0 21782 NULL
+xfs_da_grow_inode_int_21785 xfs_da_grow_inode_int 3 21785 NULL
-+kmalloc_order_trace_21788 kmalloc_order_trace 0-1 21788 NULL
-+__ioremap_caller_21800 __ioremap_caller 1-2 21800 NULL
++kmalloc_order_trace_21788 kmalloc_order_trace 1 21788 NULL
++libipw_get_hdrlen_21792 libipw_get_hdrlen 0 21792 NULL
+dvb_generic_ioctl_21810 dvb_generic_ioctl 2 21810 NULL
-+acpi_tb_check_xsdt_21862 acpi_tb_check_xsdt 1 21862 NULL
++__ocfs2_cluster_lock_21812 __ocfs2_cluster_lock 0 21812 NULL
+lpfc_idiag_extacc_avail_get_21865 lpfc_idiag_extacc_avail_get 0-3 21865 NULL
++msix_capability_init_21870 msix_capability_init 0 21870 NULL
+sisusbcon_bmove_21873 sisusbcon_bmove 6-5-7 21873 NULL nohasharray
+tcp_cookie_size_check_21873 tcp_cookie_size_check 0-1 21873 &sisusbcon_bmove_21873
-+security_compute_sid_21874 security_compute_sid 3 21874 NULL
-+__alloc_reserved_percpu_21895 __alloc_reserved_percpu 1-2 21895 NULL
++__alloc_reserved_percpu_21895 __alloc_reserved_percpu 2-1 21895 NULL
+dbAllocCtl_21911 dbAllocCtl 0 21911 NULL
+qsfp_1_read_21915 qsfp_1_read 3 21915 NULL
++__ocfs2_claim_clusters_21936 __ocfs2_claim_clusters 0 21936 NULL
+rbd_req_read_21952 rbd_req_read 4-5 21952 NULL
-+alloc_ldt_21972 alloc_ldt 2 21972 NULL
+rxpipe_descr_host_int_trig_rx_data_read_22001 rxpipe_descr_host_int_trig_rx_data_read 3 22001 NULL
++ocfs2_reserve_cluster_bitmap_bits_22016 ocfs2_reserve_cluster_bitmap_bits 0 22016 NULL
+ti_recv_22027 ti_recv 4 22027 NULL
+zd_usb_read_fw_22049 zd_usb_read_fw 4 22049 NULL
++atalk_recvmsg_22053 atalk_recvmsg 4 22053 NULL
+ieee80211_if_fmt_dropped_frames_ttl_22054 ieee80211_if_fmt_dropped_frames_ttl 3 22054 NULL
-+btrfs_reloc_clone_csums_22077 btrfs_reloc_clone_csums 2 22077 NULL
++iwl_legacy_dbgfs_clear_ucode_statistics_write_22072 iwl_legacy_dbgfs_clear_ucode_statistics_write 3 22072 NULL
++btrfs_reloc_clone_csums_22077 btrfs_reloc_clone_csums 2-3 22077 NULL
+mem_rw_22085 mem_rw 3 22085 NULL
++snd_pcm_xrun_22088 snd_pcm_xrun 0 22088 NULL
++sched_clock_cpu_22098 sched_clock_cpu 0 22098 NULL
++rt2x00debug_read_crypto_stats_22109 rt2x00debug_read_crypto_stats 3 22109 NULL
+sys_remap_file_pages_22124 sys_remap_file_pages 1 22124 NULL
-+compat_insn_22142 compat_insn 2 22142 NULL
-+__kfifo_alloc_22173 __kfifo_alloc 2-3 22173 NULL
++snd_hda_codec_read_22130 snd_hda_codec_read 0 22130 NULL
++__kfifo_alloc_22173 __kfifo_alloc 3-2 22173 NULL
+fls_22210 fls 0 22210 NULL nohasharray
+snd_soc_lzo_block_count_22210 snd_soc_lzo_block_count 0 22210 &fls_22210
-+bio_chain_clone_22227 bio_chain_clone 4 22227 NULL
++bio_chain_clone_22227 bio_chain_clone 4 22227 NULL nohasharray
++do_sync_mmap_readahead_22227 do_sync_mmap_readahead 4 22227 &bio_chain_clone_22227 nohasharray
++rfcomm_sock_recvmsg_22227 rfcomm_sock_recvmsg 4 22227 &do_sync_mmap_readahead_22227 nohasharray
++bitmap_clear_bits_22227 bitmap_clear_bits 3 22227 &rfcomm_sock_recvmsg_22227
+mem_write_22232 mem_write 3 22232 NULL
+p9_virtio_zc_request_22240 p9_virtio_zc_request 6-5 22240 NULL
+atomic64_xchg_22246 atomic64_xchg 0 22246 NULL
+compat_process_vm_rw_22254 compat_process_vm_rw 3-5 22254 NULL
+__btrfs_direct_write_22273 __btrfs_direct_write 4 22273 NULL
-+index_to_obj_22280 index_to_obj 0-3 22280 NULL
+__tun_chr_ioctl_22300 __tun_chr_ioctl 4 22300 NULL
+mesh_table_alloc_22305 mesh_table_alloc 1 22305 NULL
++udpv6_sendmsg_22316 udpv6_sendmsg 4 22316 NULL
+atomic_read_22342 atomic_read 0 22342 NULL
+mlx4_db_alloc_22358 mlx4_db_alloc 3 22358 NULL
+irq_reserve_irq_22360 irq_reserve_irq 1 22360 NULL
+snd_pcm_alsa_frames_22363 snd_pcm_alsa_frames 2 22363 NULL
+iwch_alloc_fast_reg_mr_22368 iwch_alloc_fast_reg_mr 2 22368 NULL
+evdev_ioctl_22371 evdev_ioctl 2 22371 NULL
++ocfs2_assign_bh_22392 ocfs2_assign_bh 0 22392 NULL
+btmrvl_psmode_read_22395 btmrvl_psmode_read 3 22395 NULL
-+alloc_private_22399 alloc_private 2 22399 NULL nohasharray
-+ubifs_leb_change_22399 ubifs_leb_change 4 22399 &alloc_private_22399
++ubifs_leb_change_22399 ubifs_leb_change 0 22399 NULL nohasharray
++alloc_private_22399 alloc_private 2 22399 &ubifs_leb_change_22399
+zoran_write_22404 zoran_write 3 22404 NULL
+queue_reply_22416 queue_reply 3 22416 NULL
+__set_enter_print_fmt_22431 __set_enter_print_fmt 0 22431 NULL
+queue_max_segments_22441 queue_max_segments 0 22441 NULL
+handle_received_packet_22457 handle_received_packet 3 22457 NULL
++rt6_nlmsg_size_22473 rt6_nlmsg_size 0 22473 NULL
++ecryptfs_write_22488 ecryptfs_write 4-3 22488 NULL
+cache_write_procfs_22491 cache_write_procfs 3 22491 NULL
+mp_find_ioapic_pin_22499 mp_find_ioapic_pin 0-2 22499 NULL
+mutex_lock_interruptible_22505 mutex_lock_interruptible 0 22505 NULL
-+ip4_addr_string_22511 ip4_addr_string 0 22511 NULL
+pskb_may_pull_22546 pskb_may_pull 2 22546 NULL
+ocfs2_read_extent_block_22550 ocfs2_read_extent_block 0 22550 NULL
+atomic_long_read_unchecked_22551 atomic_long_read_unchecked 0 22551 NULL
+agp_alloc_page_array_22554 agp_alloc_page_array 1 22554 NULL
++snd_pcm_hw_params_choose_22560 snd_pcm_hw_params_choose 0 22560 NULL
+dbFindCtl_22587 dbFindCtl 0 22587 NULL
+snapshot_read_22601 snapshot_read 3 22601 NULL
++ocfs2_get_refcount_block_22610 ocfs2_get_refcount_block 0 22610 NULL
++btrfs_delalloc_reserve_space_22617 btrfs_delalloc_reserve_space 0 22617 NULL
+sctp_setsockopt_connectx_old_22631 sctp_setsockopt_connectx_old 3 22631 NULL
+ide_core_cp_entry_22636 ide_core_cp_entry 3 22636 NULL
+pwr_wake_on_timer_exp_read_22640 pwr_wake_on_timer_exp_read 3 22640 NULL
++sysfs_attr_ns_22645 sysfs_attr_ns 0 22645 NULL
++fill_gap_22681 fill_gap 0 22681 NULL nohasharray
++l2tp_ip_recvmsg_22681 l2tp_ip_recvmsg 4 22681 &fill_gap_22681
+ocfs2_get_block_22687 ocfs2_get_block 2 22687 NULL
-+compat_fd_ioctl_22694 compat_fd_ioctl 4 22694 NULL
++sys_ppoll_22688 sys_ppoll 2 22688 NULL
+alloc_libipw_22708 alloc_libipw 1 22708 NULL
-+cache_alloc_refill_22713 cache_alloc_refill 0 22713 NULL
++brcmf_sdbrcm_read_control_22721 brcmf_sdbrcm_read_control 3 22721 NULL
+aa_features_read_22730 aa_features_read 3 22730 NULL
-+cx18_copy_buf_to_user_22735 cx18_copy_buf_to_user 4 22735 NULL
++cx18_copy_buf_to_user_22735 cx18_copy_buf_to_user 4-0 22735 NULL
++ax25_output_22736 ax25_output 2 22736 NULL
+ceph_decode_32_22738 ceph_decode_32 0 22738 NULL
+print_frame_22769 print_frame 0 22769 NULL
+ftrace_arch_read_dyn_info_22773 ftrace_arch_read_dyn_info 0 22773 NULL
-+compat_blkdev_ioctl_22841 compat_blkdev_ioctl 3 22841 NULL
-+can_nocow_odirect_22854 can_nocow_odirect 3 22854 NULL nohasharray
++ocfs2_block_group_alloc_22774 ocfs2_block_group_alloc 0 22774 NULL
++__generic_copy_to_user_intel_22806 __generic_copy_to_user_intel 0-3 22806 NULL
++can_nocow_odirect_22854 can_nocow_odirect 3-4 22854 NULL nohasharray
+read_file_rcstat_22854 read_file_rcstat 3 22854 &can_nocow_odirect_22854
-+do_atm_iobuf_22857 do_atm_iobuf 3 22857 NULL
+create_attr_set_22861 create_attr_set 1 22861 NULL
-+vmw_execbuf_process_22885 vmw_execbuf_process 5 22885 NULL
+usblp_new_writeurb_22894 usblp_new_writeurb 2 22894 NULL
+mdc800_device_read_22896 mdc800_device_read 3 22896 NULL
+virtqueue_add_buf_22924 virtqueue_add_buf 3-4 22924 NULL
++xstateregs_set_22932 xstateregs_set 4 22932 NULL
+pcpu_mem_zalloc_22948 pcpu_mem_zalloc 1 22948 NULL
-+alloc_sglist_22960 alloc_sglist 1-2-3 22960 NULL
++alloc_sglist_22960 alloc_sglist 1-3-2 22960 NULL
+caif_seqpkt_sendmsg_22961 caif_seqpkt_sendmsg 4 22961 NULL
+vme_get_size_22964 vme_get_size 0 22964 NULL
+usb_get_langid_22983 usb_get_langid 0 22983 NULL
+remote_settings_file_write_22987 remote_settings_file_write 3 22987 NULL
+viafb_dvp0_proc_write_23023 viafb_dvp0_proc_write 3 23023 NULL
++ocfs2_refcount_cow_xattr_23029 ocfs2_refcount_cow_xattr 0 23029 NULL
+st_status_23032 st_status 5 23032 NULL
-+reiserfs_add_entry_23062 reiserfs_add_entry 4 23062 NULL
++xfs_qm_write_sb_changes_23039 xfs_qm_write_sb_changes 2 23039 NULL
++reiserfs_add_entry_23062 reiserfs_add_entry 4 23062 NULL nohasharray
++unix_seqpacket_recvmsg_23062 unix_seqpacket_recvmsg 4 23062 &reiserfs_add_entry_23062
+vivi_read_23073 vivi_read 3 23073 NULL
+kvm_mmu_gva_to_gpa_write_23075 kvm_mmu_gva_to_gpa_write 0 23075 NULL
-+vm_map_ram_23078 vm_map_ram 2 23078 NULL nohasharray
-+raw_sendmsg_23078 raw_sendmsg 4 23078 &vm_map_ram_23078
++raw_sendmsg_23078 raw_sendmsg 4 23078 NULL
+isr_tx_procs_read_23084 isr_tx_procs_read 3 23084 NULL
+rt2x00debug_write_eeprom_23091 rt2x00debug_write_eeprom 3 23091 NULL
-+fls_long_23096 fls_long 0 23096 NULL
-+ntfs_ucstonls_23097 ntfs_ucstonls 3-5 23097 NULL
++fls_long_23096 fls_long 0-1 23096 NULL
++ntfs_ucstonls_23097 ntfs_ucstonls 5-3 23097 NULL
+pipe_iov_copy_from_user_23102 pipe_iov_copy_from_user 3 23102 NULL
-+mwl8k_cmd_set_beacon_23110 mwl8k_cmd_set_beacon 4 23110 NULL
++dgram_recvmsg_23104 dgram_recvmsg 4 23104 NULL
++ip_recv_error_23109 ip_recv_error 3 23109 NULL
++msix_setup_entries_23110 msix_setup_entries 0 23110 NULL nohasharray
++mwl8k_cmd_set_beacon_23110 mwl8k_cmd_set_beacon 4 23110 &msix_setup_entries_23110
+nl80211_send_rx_auth_23111 nl80211_send_rx_auth 4 23111 NULL
-+__clear_user_23118 __clear_user 0 23118 NULL
-+drm_mode_create_tv_properties_23122 drm_mode_create_tv_properties 2 23122 NULL
-+cfg80211_rx_mgmt_23138 cfg80211_rx_mgmt 4 23138 NULL
-+ca91cx42_master_set_23146 ca91cx42_master_set 4 23146 NULL
++__clear_user_23118 __clear_user 0-2 23118 NULL
++iwl_legacy_dbgfs_interrupt_write_23122 iwl_legacy_dbgfs_interrupt_write 3 23122 NULL nohasharray
++drm_mode_create_tv_properties_23122 drm_mode_create_tv_properties 2 23122 &iwl_legacy_dbgfs_interrupt_write_23122
++ata_scsi_change_queue_depth_23126 ata_scsi_change_queue_depth 2 23126 NULL
++cfg80211_rx_mgmt_23138 cfg80211_rx_mgmt 4 23138 NULL nohasharray
++em28xx_write_regs_req_23138 em28xx_write_regs_req 0 23138 &cfg80211_rx_mgmt_23138
+read_file_ani_23161 read_file_ani 3 23161 NULL
-+ioremap_23172 ioremap 1-2 23172 NULL
+usblp_write_23178 usblp_write 3 23178 NULL
-+msnd_fifo_alloc_23179 msnd_fifo_alloc 2 23179 NULL
+gss_pipe_downcall_23182 gss_pipe_downcall 3 23182 NULL
+ieee80211_get_mesh_hdrlen_23183 ieee80211_get_mesh_hdrlen 0 23183 NULL
-+fix_unclean_leb_23188 fix_unclean_leb 3 23188 NULL
-+__next_dma_cap_23195 __next_dma_cap 1 23195 NULL
-+convert_ip_to_linear_23198 convert_ip_to_linear 0 23198 NULL
-+compat_rawv6_ioctl_23210 compat_rawv6_ioctl 3 23210 NULL
-+tty_buffer_request_room_23228 tty_buffer_request_room 2 23228 NULL
-+xlog_get_bp_23229 xlog_get_bp 2 23229 NULL
-+__kmalloc_23231 __kmalloc 0 23231 NULL
++__next_dma_cap_23195 __next_dma_cap 1-0 23195 NULL
++tty_buffer_request_room_23228 tty_buffer_request_room 2-0 23228 NULL
++__read_status_pci_23229 __read_status_pci 0 23229 NULL nohasharray
++xlog_get_bp_23229 xlog_get_bp 2 23229 &__read_status_pci_23229
++__kmalloc_23231 __kmalloc 1 23231 NULL
++ft1000_read_dpram_mag_32_23232 ft1000_read_dpram_mag_32 0 23232 NULL
+rxrpc_client_sendmsg_23236 rxrpc_client_sendmsg 5 23236 NULL
-+ad799x_single_channel_from_ring_23265 ad799x_single_channel_from_ring 2 23265 NULL
++sctp_recvmsg_23265 sctp_recvmsg 4 23265 NULL nohasharray
++ad799x_single_channel_from_ring_23265 ad799x_single_channel_from_ring 2 23265 &sctp_recvmsg_23265
+uwb_dev_addr_print_23282 uwb_dev_addr_print 2 23282 NULL
-+doc_probe_23285 doc_probe 1 23285 NULL
+diva_get_trace_filter_23286 diva_get_trace_filter 0 23286 NULL
+i2cdev_write_23310 i2cdev_write 3 23310 NULL
+nl_pid_hash_zalloc_23314 nl_pid_hash_zalloc 1 23314 NULL
++try_context_readahead_23342 try_context_readahead 4-3 23342 NULL
+page_readlink_23346 page_readlink 3 23346 NULL
+get_dst_timing_23358 get_dst_timing 0 23358 NULL
+ip_nat_sdp_media_23386 ip_nat_sdp_media 8 23386 NULL
+iscsi_change_queue_depth_23416 iscsi_change_queue_depth 2 23416 NULL
+vga_mm_r_23419 vga_mm_r 0 23419 NULL
-+vzalloc_node_23424 vzalloc_node 1 23424 NULL
++ulog_alloc_skb_23427 ulog_alloc_skb 1 23427 NULL
+__cxio_init_resource_fifo_23447 __cxio_init_resource_fifo 3 23447 NULL nohasharray
+ocfs2_zero_tail_23447 ocfs2_zero_tail 3 23447 &__cxio_init_resource_fifo_23447
+hidraw_send_report_23449 hidraw_send_report 3 23449 NULL
-+linear_conf_23485 linear_conf 2 23485 NULL nohasharray
-+divasa_remap_pci_bar_23485 divasa_remap_pci_bar 3-4 23485 &linear_conf_23485
++__ata_change_queue_depth_23484 __ata_change_queue_depth 3-0 23484 NULL
++linear_conf_23485 linear_conf 2 23485 NULL
+si4713_send_command_23493 si4713_send_command 6 23493 NULL
+event_filter_read_23494 event_filter_read 3 23494 NULL
++ext4_remove_blocks_23497 ext4_remove_blocks 0 23497 NULL
+write_led_23517 write_led 2 23517 NULL
++__fill_vb2_buffer_23521 __fill_vb2_buffer 0 23521 NULL
+ima_show_measurements_count_23536 ima_show_measurements_count 3 23536 NULL
+xen_allocate_irq_gsi_23546 xen_allocate_irq_gsi 1-0 23546 NULL
+tcp_current_mss_23552 tcp_current_mss 0 23552 NULL
-+venus_symlink_23570 venus_symlink 4-6 23570 NULL
++tcp_match_skb_to_sack_23568 tcp_match_skb_to_sack 4-3 23568 NULL
++venus_symlink_23570 venus_symlink 6-4 23570 NULL
+iwl_dbgfs_interrupt_read_23574 iwl_dbgfs_interrupt_read 3 23574 NULL
++l2cap_parse_conf_req_23575 l2cap_parse_conf_req 0 23575 NULL
++xfpregs_get_23586 xfpregs_get 4 23586 NULL
+cifs_spnego_key_instantiate_23588 cifs_spnego_key_instantiate 3 23588 NULL
+snd_interval_min_23590 snd_interval_min 0 23590 NULL
++cfpkt_create_pfx_23594 cfpkt_create_pfx 2-1 23594 NULL
+_alloc_cdb_cont_23609 _alloc_cdb_cont 2 23609 NULL
+islpci_mgt_transaction_23610 islpci_mgt_transaction 5 23610 NULL
-+sm_checker_extend_23615 sm_checker_extend 2 23615 NULL
++ocfs2_journal_access_23616 ocfs2_journal_access 0 23616 NULL
+__i2400mu_send_barker_23652 __i2400mu_send_barker 3 23652 NULL
-+ext3_compat_ioctl_23659 ext3_compat_ioctl 3 23659 NULL
+sInW_23663 sInW 0 23663 NULL
-+proc_ioctl_compat_23682 proc_ioctl_compat 2 23682 NULL
+nftl_partscan_23688 nftl_partscan 0 23688 NULL
+cx18_read_23699 cx18_read 3 23699 NULL
++sock_alloc_send_skb_23720 sock_alloc_send_skb 2 23720 NULL
++snd_pcm_hw_refine_23721 snd_pcm_hw_refine 0 23721 NULL
+mp_config_acpi_gsi_23728 mp_config_acpi_gsi 2 23728 NULL
+pack_sg_list_p_23739 pack_sg_list_p 0-2 23739 NULL
+__kfifo_max_r_23768 __kfifo_max_r 0-2-1 23768 NULL
+tt_save_orig_buffer_23779 tt_save_orig_buffer 4 23779 NULL
+security_inode_getxattr_23781 security_inode_getxattr 0 23781 NULL
-+diva_alloc_dma_map_23798 diva_alloc_dma_map 2 23798 NULL
+rx_path_reset_read_23801 rx_path_reset_read 3 23801 NULL
++ocfs2_replace_cow_23803 ocfs2_replace_cow 0 23803 NULL
+__earlyonly_bootmem_alloc_23824 __earlyonly_bootmem_alloc 2 23824 NULL
+xfs_dir2_leaf_getdents_23841 xfs_dir2_leaf_getdents 3 23841 NULL
+iwl_dbgfs_nvm_read_23845 iwl_dbgfs_nvm_read 3 23845 NULL
@@ -105963,32 +106964,42 @@ index 0000000..6fcc08d
+ocfs2_xattr_get_clusters_23857 ocfs2_xattr_get_clusters 0 23857 NULL
+ieee80211_if_read_dot11MeshMaxPeerLinks_23878 ieee80211_if_read_dot11MeshMaxPeerLinks 3 23878 NULL
+ieee80211_if_read_channel_type_23884 ieee80211_if_read_channel_type 3 23884 NULL
++iwch_reject_cr_23901 iwch_reject_cr 3 23901 NULL
++device_create_bin_file_23914 device_create_bin_file 0 23914 NULL
+ipath_reg_phys_mr_23918 ipath_reg_phys_mr 3 23918 NULL
++i915_gem_object_bind_to_gtt_23921 i915_gem_object_bind_to_gtt 0 23921 NULL
+kvm_read_guest_23928 kvm_read_guest 4-2 23928 NULL
+__alloc_skb_23940 __alloc_skb 1 23940 NULL
+cifs_setxattr_23957 cifs_setxattr 4 23957 NULL
++ixj_enhanced_write_23973 ixj_enhanced_write 3 23973 NULL
++sddr55_write_data_23983 sddr55_write_data 4 23983 NULL
+zd_usb_iowrite16v_async_23984 zd_usb_iowrite16v_async 3 23984 NULL
++brcmf_sdcard_recv_buf_24006 brcmf_sdcard_recv_buf 6 24006 NULL
+cxgb_alloc_mem_24007 cxgb_alloc_mem 1 24007 NULL
+ocfs2_mark_extent_refcounted_24035 ocfs2_mark_extent_refcounted 6 24035 NULL
-+au_nhash_append_wh_24044 au_nhash_append_wh 3 24044 NULL
+afs_cell_alloc_24052 afs_cell_alloc 2 24052 NULL
+blkcipher_copy_iv_24075 blkcipher_copy_iv 3 24075 NULL
+request_key_auth_read_24109 request_key_auth_read 3 24109 NULL
+iwl_legacy_dbgfs_stations_read_24121 iwl_legacy_dbgfs_stations_read 3 24121 NULL
-+mpu401_read_24126 mpu401_read 3 24126 NULL
++mpu401_read_24126 mpu401_read 3-0 24126 NULL
++_picolcd_flash_write_24134 _picolcd_flash_write 4 24134 NULL
+irnet_ctrl_write_24139 irnet_ctrl_write 3 24139 NULL
++UpdateReg_24148 UpdateReg 0 24148 NULL
+adu_read_24177 adu_read 3 24177 NULL
+safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL
++shrink_tnc_24190 shrink_tnc 0 24190 NULL
+get_order_24203 get_order 0 24203 NULL
+ieee80211_if_read_dot11MeshHWMPpreqMinInterval_24208 ieee80211_if_read_dot11MeshHWMPpreqMinInterval 3 24208 NULL
+tcpprobe_sprint_24222 tcpprobe_sprint 0-2 24222 NULL
-+pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 1-2-3 24224 NULL
++pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 NULL
+pci_num_vf_24235 pci_num_vf 0 24235 NULL
+sel_read_bool_24236 sel_read_bool 3 24236 NULL
++esp6_get_mtu_24264 esp6_get_mtu 0-2 24264 NULL
++calculate_sizes_24273 calculate_sizes 2 24273 NULL
+msg_size_24288 msg_size 0 24288 NULL
-+fa_element_to_part_nr_24291 fa_element_to_part_nr 2 24291 NULL
-+ext2_free_blocks_24292 ext2_free_blocks 2-3 24292 NULL
++ext2_free_blocks_24292 ext2_free_blocks 3-2 24292 NULL
+map_page_24298 map_page 3-4 24298 NULL
++gserial_connect_24302 gserial_connect 0 24302 NULL
+btmrvl_pscmd_read_24308 btmrvl_pscmd_read 3 24308 NULL
+ocfs2_direct_IO_get_blocks_24333 ocfs2_direct_IO_get_blocks 2 24333 NULL
+kzalloc_node_24352 kzalloc_node 1 24352 NULL
@@ -105996,198 +107007,242 @@ index 0000000..6fcc08d
+cfi_read_pri_24366 cfi_read_pri 3 24366 NULL
+btrfs_item_size_nr_24367 btrfs_item_size_nr 0 24367 NULL
+igetword_24373 igetword 0 24373 NULL
++max_io_len_24384 max_io_len 0-1 24384 NULL
+pvr2_v4l2_ioctl_24398 pvr2_v4l2_ioctl 2 24398 NULL nohasharray
+getxattr_24398 getxattr 4 24398 &pvr2_v4l2_ioctl_24398
+blk_update_bidi_request_24415 blk_update_bidi_request 3-4 24415 NULL
+b43_debugfs_read_24425 b43_debugfs_read 3 24425 NULL
++xenbus_file_read_24427 xenbus_file_read 3 24427 NULL
+ieee80211_rx_mgmt_beacon_24430 ieee80211_rx_mgmt_beacon 3 24430 NULL
-+page_address_24444 page_address 0 24444 NULL
++__push_leaf_left_24456 __push_leaf_left 0 24456 NULL
+evdev_do_ioctl_24459 evdev_do_ioctl 2 24459 NULL
-+ocfs2_write_cluster_by_desc_24466 ocfs2_write_cluster_by_desc 5-6 24466 NULL
++lbs_highsnr_write_24460 lbs_highsnr_write 3 24460 NULL
++skb_copy_and_csum_datagram_iovec_24466 skb_copy_and_csum_datagram_iovec 2 24466 NULL nohasharray
++ocfs2_write_cluster_by_desc_24466 ocfs2_write_cluster_by_desc 6-5 24466 &skb_copy_and_csum_datagram_iovec_24466
++snd_pcm_hw_param_first_24487 snd_pcm_hw_param_first 0 24487 NULL
++push_nodes_for_insert_24496 push_nodes_for_insert 0 24496 NULL
+pd_video_read_24510 pd_video_read 3 24510 NULL
+request_key_with_auxdata_24515 request_key_with_auxdata 4 24515 NULL
+named_prepare_buf_24532 named_prepare_buf 2 24532 NULL
++rtnl_port_size_24537 rtnl_port_size 0 24537 NULL
+write_cache_pages_24562 write_cache_pages 0 24562 NULL
-+tsi148_alloc_resource_24563 tsi148_alloc_resource 2 24563 NULL
++printer_set_config_24568 printer_set_config 0 24568 NULL
++netlbl_domhsh_init_24576 netlbl_domhsh_init 1 24576 NULL
++ath6kl_wmi_startscan_cmd_24580 ath6kl_wmi_startscan_cmd 7 24580 NULL
+udf_compute_nr_groups_24594 udf_compute_nr_groups 0 24594 NULL
++ip6addrlbl_msgsize_24595 ip6addrlbl_msgsize 0 24595 NULL
+count_preds_24600 count_preds 0 24600 NULL
++alloc_wr_24635 alloc_wr 2-1 24635 NULL
+context_alloc_24645 context_alloc 3 24645 NULL
+blk_rq_err_bytes_24650 blk_rq_err_bytes 0 24650 NULL
++btrfs_check_data_free_space_24692 btrfs_check_data_free_space 0 24692 NULL
++datafab_write_data_24696 datafab_write_data 4 24696 NULL
++ext4_da_reserve_space_24702 ext4_da_reserve_space 2 24702 NULL
+simple_attr_read_24738 simple_attr_read 3 24738 NULL
-+au_rdhash_est_24740 au_rdhash_est 0-1 24740 NULL
+qla2x00_change_queue_depth_24742 qla2x00_change_queue_depth 2 24742 NULL
++ath_rxbuf_alloc_24745 ath_rxbuf_alloc 2 24745 NULL
+get_dma_residue_24749 get_dma_residue 0 24749 NULL
+kgdb_hex2mem_24755 kgdb_hex2mem 3 24755 NULL
+nfsd4_sanitize_slot_size_24756 nfsd4_sanitize_slot_size 0-1 24756 NULL
++mI_alloc_skb_24770 mI_alloc_skb 1 24770 NULL
+i915_cache_sharing_read_24775 i915_cache_sharing_read 3 24775 NULL
+ocfs2_read_blocks_24777 ocfs2_read_blocks 0 24777 NULL
+skb_make_writable_24783 skb_make_writable 2 24783 NULL
+datablob_hmac_verify_24786 datablob_hmac_verify 4 24786 NULL
+cache_read_24790 cache_read 3 24790 NULL
++user_regset_copyout_24796 user_regset_copyout 7 24796 NULL
+unpack_str_24798 unpack_str 0 24798 NULL
++kvm_read_guest_virt_helper_24804 kvm_read_guest_virt_helper 3-1 24804 NULL
+__next_cpu_nr_24805 __next_cpu_nr 1 24805 NULL
-+comedi_buf_alloc_24822 comedi_buf_alloc 3 24822 NULL
++ath6kl_fwlog_mask_write_24810 ath6kl_fwlog_mask_write 3 24810 NULL
++net2272_read_24825 net2272_read 0 24825 NULL
++copy_for_split_24826 copy_for_split 0 24826 NULL
+c4iw_alloc_fast_reg_mr_24838 c4iw_alloc_fast_reg_mr 2 24838 NULL nohasharray
+free_coherent_24838 free_coherent 4-2 24838 &c4iw_alloc_fast_reg_mr_24838
+snd_als4k_gcr_read_24840 snd_als4k_gcr_read 0 24840 NULL
+snd_pcm_lib_buffer_bytes_24865 snd_pcm_lib_buffer_bytes 0 24865 NULL
+pnp_alloc_24869 pnp_alloc 1 24869 NULL nohasharray
+put_data_to_circ_buf_24869 put_data_to_circ_buf 3 24869 &pnp_alloc_24869
-+bnx2fc_cmd_mgr_alloc_24873 bnx2fc_cmd_mgr_alloc 3-2 24873 NULL
++bnx2fc_cmd_mgr_alloc_24873 bnx2fc_cmd_mgr_alloc 2-3 24873 NULL
+queues_read_24877 queues_read 3 24877 NULL
+iwm_rx_handle_24899 iwm_rx_handle 3 24899 NULL
+codec_list_read_file_24910 codec_list_read_file 3 24910 NULL
-+ocfs2_fiemap_24949 ocfs2_fiemap 3-4 24949 NULL
++ocfs2_fiemap_24949 ocfs2_fiemap 4-3 24949 NULL
+packet_sendmsg_24954 packet_sendmsg 4 24954 NULL
+sys_rt_sigpending_24961 sys_rt_sigpending 2 24961 NULL
+llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL
+key_conf_hw_key_idx_read_25003 key_conf_hw_key_idx_read 3 25003 NULL
+iwl3945_ucode_general_stats_read_25009 iwl3945_ucode_general_stats_read 3 25009 NULL
+ni_660x_num_counters_25031 ni_660x_num_counters 0 25031 NULL
-+kmem_getpages_25058 kmem_getpages 0 25058 NULL
+gs_buf_alloc_25067 gs_buf_alloc 2 25067 NULL
+cxio_hal_init_rhdl_resource_25104 cxio_hal_init_rhdl_resource 1 25104 NULL
-+snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 NULL
++ubifs_dir_llseek_25106 ubifs_dir_llseek 2 25106 NULL nohasharray
++snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 &ubifs_dir_llseek_25106
+oom_adjust_read_25127 oom_adjust_read 3 25127 NULL
++fs32_to_cpu_25143 fs32_to_cpu 0 25143 NULL
+sys_fgetxattr_25166 sys_fgetxattr 4 25166 NULL
-+ipath_init_qp_table_25167 ipath_init_qp_table 2 25167 NULL
++ipath_init_qp_table_25167 ipath_init_qp_table 2 25167 NULL nohasharray
++sethdraddr_25167 sethdraddr 0 25167 &ipath_init_qp_table_25167
+sctp_getsockopt_local_addrs_25178 sctp_getsockopt_local_addrs 2 25178 NULL
+ks8851_rdreg32_25187 ks8851_rdreg32 0 25187 NULL
+ocfs2_block_check_compute_25223 ocfs2_block_check_compute 2 25223 NULL
+mon_stat_read_25238 mon_stat_read 3 25238 NULL
+tcf_csum_ipv6_udp_25241 tcf_csum_ipv6_udp 4 25241 NULL
+compat_rw_copy_check_uvector_25242 compat_rw_copy_check_uvector 0-3 25242 NULL
-+nilfs_palloc_find_available_slot_25245 nilfs_palloc_find_available_slot 3-5 25245 NULL
++nilfs_palloc_find_available_slot_25245 nilfs_palloc_find_available_slot 5-3 25245 NULL
+snd_pcm_start_25273 snd_pcm_start 0 25273 NULL
+crypto_alloc_instance2_25277 crypto_alloc_instance2 3 25277 NULL
+vfs_writev_25278 vfs_writev 3 25278 NULL
++sys_dup2_25284 sys_dup2 2 25284 NULL
+l2tp_session_create_25286 l2tp_session_create 1 25286 NULL
-+snd_seq_ioctl_compat_25307 snd_seq_ioctl_compat 3 25307 NULL
++ceph_calc_object_layout_25305 ceph_calc_object_layout 0 25305 NULL
+ath9k_debugfs_read_buf_25316 ath9k_debugfs_read_buf 3 25316 NULL
+rng_buffer_size_25348 rng_buffer_size 0 25348 NULL
-+i915_gem_execbuffer_relocate_slow_25355 i915_gem_execbuffer_relocate_slow 7 25355 NULL
++wait_for_completion_killable_25352 wait_for_completion_killable 0 25352 NULL
++i915_gem_execbuffer_relocate_slow_25355 i915_gem_execbuffer_relocate_slow 7-0 25355 NULL
+unix_mkname_25368 unix_mkname 0-2 25368 NULL
+sel_read_mls_25369 sel_read_mls 3 25369 NULL
-+ebt_buf_add_pad_25413 ebt_buf_add_pad 0 25413 NULL
++rh_queue_status_25378 rh_queue_status 0 25378 NULL
++ThermometerRead_25393 ThermometerRead 0 25393 NULL
+et61x251_read_25420 et61x251_read 3 25420 NULL
+dai_list_read_file_25421 dai_list_read_file 3 25421 NULL
+generic_file_buffered_write_25464 generic_file_buffered_write 4 25464 NULL
++ipath_decode_err_25468 ipath_decode_err 3 25468 NULL
+crypto_hash_digestsize_25469 crypto_hash_digestsize 0 25469 NULL
+ocfs2_hamming_encode_25501 ocfs2_hamming_encode 3 25501 NULL
-+ivtv_buf_copy_from_user_25502 ivtv_buf_copy_from_user 4 25502 NULL
++ivtv_buf_copy_from_user_25502 ivtv_buf_copy_from_user 4-0 25502 NULL
+snd_pcm_plugin_build_25505 snd_pcm_plugin_build 5 25505 NULL
+ext3_get_inode_loc_25542 ext3_get_inode_loc 0 25542 NULL
+ieee80211_if_read_path_refresh_time_25545 ieee80211_if_read_path_refresh_time 3 25545 NULL
+c4iw_init_resource_fifo_random_25547 c4iw_init_resource_fifo_random 3 25547 NULL
+wimax_addr_scnprint_25548 wimax_addr_scnprint 2 25548 NULL
++taskstats_packet_size_25553 taskstats_packet_size 0 25553 NULL
+ht_print_chan_25556 ht_print_chan 0 25556 NULL
+skb_tailroom_25567 skb_tailroom 0 25567 NULL
+realloc_packet_buffer_25569 realloc_packet_buffer 2 25569 NULL
++ping_recvmsg_25597 ping_recvmsg 4 25597 NULL
+__devres_alloc_25598 __devres_alloc 2 25598 NULL
++ddp_ppod_write_idata_25610 ddp_ppod_write_idata 5 25610 NULL
++copy_user_generic_25611 copy_user_generic 0 25611 NULL
+proc_coredump_filter_write_25625 proc_coredump_filter_write 3 25625 NULL
+__get_user_pages_25628 __get_user_pages 0 25628 NULL nohasharray
+befs_utf2nls_25628 befs_utf2nls 3 25628 &__get_user_pages_25628
-+ext2_try_to_allocate_25667 ext2_try_to_allocate 4-2 25667 NULL
++ext2_try_to_allocate_25667 ext2_try_to_allocate 2-4-0 25667 NULL
+aircable_prepare_write_buffer_25669 aircable_prepare_write_buffer 3 25669 NULL
++lpfc_idiag_cmd_get_25672 lpfc_idiag_cmd_get 2 25672 NULL
+sta_inactive_ms_read_25690 sta_inactive_ms_read 3 25690 NULL
+ebitmap_start_positive_25703 ebitmap_start_positive 0 25703 NULL
+ibmasm_new_command_25714 ibmasm_new_command 2 25714 NULL
++rx_queue_entry_next_25715 rx_queue_entry_next 0 25715 NULL
+sel_write_context_25726 sel_write_context 3 25726 NULL nohasharray
+__alloc_bootmem_low_node_25726 __alloc_bootmem_low_node 2 25726 &sel_write_context_25726
++mcs_unwrap_fir_25733 mcs_unwrap_fir 3 25733 NULL
+ext2_find_near_25734 ext2_find_near 0 25734 NULL
+cxgbi_device_portmap_create_25747 cxgbi_device_portmap_create 3 25747 NULL
++iommu_flush_iotlb_psi_25780 iommu_flush_iotlb_psi 4 25780 NULL
+event_rx_pool_read_25792 event_rx_pool_read 3 25792 NULL
+sg_read_25799 sg_read 3 25799 NULL
+sys32_rt_sigpending_25814 sys32_rt_sigpending 2 25814 NULL
+system_enable_read_25815 system_enable_read 3 25815 NULL
+realloc_buffer_25816 realloc_buffer 2 25816 NULL
++ftrace_profile_init_25821 ftrace_profile_init 0 25821 NULL
+pwr_missing_bcns_read_25824 pwr_missing_bcns_read 3 25824 NULL
+parport_read_25855 parport_read 0 25855 NULL
+xfs_dir2_sf_hdr_size_25858 xfs_dir2_sf_hdr_size 0 25858 NULL
+ath6kl_regread_read_25884 ath6kl_regread_read 3 25884 NULL
-+run_delalloc_nocow_25896 run_delalloc_nocow 3 25896 NULL
++run_delalloc_nocow_25896 run_delalloc_nocow 3-4 25896 NULL
+sisusbcon_scroll_area_25899 sisusbcon_scroll_area 4-3 25899 NULL
+lpfc_change_queue_depth_25905 lpfc_change_queue_depth 2 25905 NULL
+do_jffs2_setxattr_25910 do_jffs2_setxattr 5 25910 NULL
+rcname_read_25919 rcname_read 3 25919 NULL
++_get_word_25929 _get_word 0 25929 NULL
+snd_es1938_capture_copy_25930 snd_es1938_capture_copy 5 25930 NULL
+key_flags_read_25931 key_flags_read 3 25931 NULL
+copy_play_buf_25932 copy_play_buf 3 25932 NULL
-+security_compute_av_user_25950 security_compute_av_user 3 25950 NULL
+video_register_device_25971 video_register_device 3 25971 NULL
+udp_setsockopt_25985 udp_setsockopt 5 25985 NULL
-+ebt_compat_entry_padsize_26001 ebt_compat_entry_padsize 0 26001 NULL
-+lpfc_sli_probe_sriov_nr_virtfn_26004 lpfc_sli_probe_sriov_nr_virtfn 2 26004 NULL
+cap_file_mmap_26018 cap_file_mmap 0 26018 NULL
+xfs_xattr_acl_set_26028 xfs_xattr_acl_set 4 26028 NULL
-+skb_mac_header_26034 skb_mac_header 0 26034 NULL
+mptscsih_change_queue_depth_26036 mptscsih_change_queue_depth 2 26036 NULL
+selinux_inode_post_setxattr_26037 selinux_inode_post_setxattr 4 26037 NULL
+security_file_mmap_26056 security_file_mmap 0 26056 NULL
+keyctl_update_key_26061 keyctl_update_key 3 26061 NULL
-+__strnlen_user_26117 __strnlen_user 0-2 26117 NULL
++intel_wrap_ring_buffer_26117 intel_wrap_ring_buffer 0 26117 NULL nohasharray
++__strnlen_user_26117 __strnlen_user 0-2 26117 &intel_wrap_ring_buffer_26117
+user_instantiate_26131 user_instantiate 3 26131 NULL
+skb_cow_26138 skb_cow 2 26138 NULL
-+usb_dump_device_strings_26146 usb_dump_device_strings 0 26146 NULL
-+copy_oldmem_page_26164 copy_oldmem_page 1-3 26164 NULL
++__fswab64_26155 __fswab64 0 26155 NULL
++copy_oldmem_page_26164 copy_oldmem_page 3 26164 NULL
+gfs2_xattr_acl_get_26166 gfs2_xattr_acl_get 0 26166 NULL
+disk_devt_26180 disk_devt 0 26180 NULL
+get_registers_26187 get_registers 3 26187 NULL
+ieee80211_if_fmt_dot11MeshTTL_26198 ieee80211_if_fmt_dot11MeshTTL 3 26198 NULL
+xfs_idata_realloc_26199 xfs_idata_realloc 2 26199 NULL
+mce_write_26201 mce_write 3 26201 NULL
-+process_vm_rw_single_vec_26213 process_vm_rw_single_vec 1-2 26213 NULL
-+store_sys_hwmon_26225 store_sys_hwmon 3 26225 NULL
++mwifiex_regrdwr_write_26225 mwifiex_regrdwr_write 3 26225 NULL nohasharray
++store_sys_hwmon_26225 store_sys_hwmon 3 26225 &mwifiex_regrdwr_write_26225
+_scsih_change_queue_depth_26230 _scsih_change_queue_depth 2 26230 NULL
-+cxio_num_stags_26233 cxio_num_stags 0 26233 NULL
++cxio_num_stags_26233 cxio_num_stags 0 26233 NULL nohasharray
++rxrpc_recvmsg_26233 rxrpc_recvmsg 4 26233 &cxio_num_stags_26233
+bio_split_26235 bio_split 2 26235 NULL
+crypto_ctxsize_26278 crypto_ctxsize 0 26278 NULL
++apei_resources_request_26279 apei_resources_request 0 26279 NULL
+ext2_find_goal_26306 ext2_find_goal 0 26306 NULL
+snd_pcm_plug_client_channels_buf_26309 snd_pcm_plug_client_channels_buf 0-3 26309 NULL nohasharray
+pax_get_random_long_26309 pax_get_random_long 0 26309 &snd_pcm_plug_client_channels_buf_26309
+tled_proc_write_26315 tled_proc_write 3 26315 NULL
+pwr_wake_on_host_read_26321 pwr_wake_on_host_read 3 26321 NULL
-+ocfs2_duplicate_clusters_by_page_26357 ocfs2_duplicate_clusters_by_page 5 26357 NULL
++tcp_sacktag_walk_26339 tcp_sacktag_walk 5-6 26339 NULL
++snd_vx_check_reg_bit_26344 snd_vx_check_reg_bit 0 26344 NULL
++ocfs2_duplicate_clusters_by_page_26357 ocfs2_duplicate_clusters_by_page 0-6-3-5 26357 NULL
+dup_to_netobj_26363 dup_to_netobj 3 26363 NULL
+invalidate_inode_pages2_range_26403 invalidate_inode_pages2_range 0 26403 NULL
++ntty_write_26404 ntty_write 3 26404 NULL
++tcp_shift_skb_data_26405 tcp_shift_skb_data 5 26405 NULL
+iwl_legacy_dbgfs_sram_read_26419 iwl_legacy_dbgfs_sram_read 3 26419 NULL
++__vb2_get_done_vb_26426 __vb2_get_done_vb 0 26426 NULL
++pagemap_read_26441 pagemap_read 3 26441 NULL
++tower_read_26461 tower_read 3 26461 NULL
+ib_alloc_device_26483 ib_alloc_device 1 26483 NULL
+ulong_write_file_26485 ulong_write_file 3 26485 NULL
+dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL
+read_vmcore_26501 read_vmcore 3 26501 NULL
++l2cap_build_conf_req_26513 l2cap_build_conf_req 0 26513 NULL
++rds_message_inc_copy_to_user_26540 rds_message_inc_copy_to_user 3 26540 NULL
+__vhost_add_used_n_26554 __vhost_add_used_n 3 26554 NULL
-+ip6_addr_string_26568 ip6_addr_string 0 26568 NULL
+rts51x_read_mem_26577 rts51x_read_mem 4 26577 NULL
-+cirrusfb_get_memsize_26597 cirrusfb_get_memsize 0 26597 NULL
+__unmap_single_26604 __unmap_single 2-3 26604 NULL
+iommu_alloc_26621 iommu_alloc 4 26621 NULL
+pwr_fix_tsf_ps_read_26627 pwr_fix_tsf_ps_read 3 26627 NULL
++drm_ht_find_item_26637 drm_ht_find_item 0 26637 NULL
+mmap_region_26649 mmap_region 0-2 26649 NULL
+irq_alloc_generic_chip_26650 irq_alloc_generic_chip 2 26650 NULL nohasharray
+inb_p_26650 inb_p 0 26650 &irq_alloc_generic_chip_26650
++usb_reset_device_26661 usb_reset_device 0 26661 NULL
+cipso_v4_map_cat_rbm_hton_26680 cipso_v4_map_cat_rbm_hton 0 26680 NULL
+__alloc_pred_stack_26687 __alloc_pred_stack 2 26687 NULL
-+aty_ld_le32_26720 aty_ld_le32 0 26720 NULL
++rtllib_authentication_req_26713 rtllib_authentication_req 3 26713 NULL
++bos_desc_26752 bos_desc 0 26752 NULL
+srp_ring_alloc_26760 srp_ring_alloc 2 26760 NULL
+snd_hda_get_raw_connections_26762 snd_hda_get_raw_connections 0 26762 NULL
++dma_map_single_attrs_26779 dma_map_single_attrs 0 26779 NULL
+qlcnic_alloc_sds_rings_26795 qlcnic_alloc_sds_rings 2 26795 NULL
+cipso_v4_genopt_26812 cipso_v4_genopt 0 26812 NULL
+smk_write_load_26829 smk_write_load 3 26829 NULL
-+slgt_compat_ioctl_26834 slgt_compat_ioctl 3 26834 NULL
+__nodes_onto_26838 __nodes_onto 4 26838 NULL
-+scnprint_id_26842 scnprint_id 3 26842 NULL
++scnprint_id_26842 scnprint_id 3-0 26842 NULL
+ecryptfs_miscdev_write_26847 ecryptfs_miscdev_write 3 26847 NULL
-+netxen_nic_hw_read_wx_128M_26858 netxen_nic_hw_read_wx_128M 2 26858 NULL
+svc_print_xprts_26881 svc_print_xprts 0 26881 NULL
-+ext2_compat_ioctl_26883 ext2_compat_ioctl 3 26883 NULL
++ctnetlink_counters_size_26898 ctnetlink_counters_size 0 26898 NULL
++slhc_uncompress_26905 slhc_uncompress 0-3 26905 NULL
+x25_asy_change_mtu_26928 x25_asy_change_mtu 2 26928 NULL
-+compat_mtw_from_user_26932 compat_mtw_from_user 0 26932 NULL
+scsi_tgt_copy_sense_26933 scsi_tgt_copy_sense 3 26933 NULL
+pwr_ps_enter_read_26935 pwr_ps_enter_read 3 26935 NULL nohasharray
+sctp_setsockopt_adaptation_layer_26935 sctp_setsockopt_adaptation_layer 3 26935 &pwr_ps_enter_read_26935
+create_bm_block_list_26940 create_bm_block_list 0 26940 NULL
+hecubafb_write_26942 hecubafb_write 3 26942 NULL
+extract_entropy_user_26952 extract_entropy_user 3 26952 NULL
++omfs_allocate_range_27034 omfs_allocate_range 3 27034 NULL
+ufs_alloc_fragments_27059 ufs_alloc_fragments 3-0-2 27059 NULL
+__videobuf_alloc_vb_27062 __videobuf_alloc_vb 1 27062 NULL
+snd_pcm_lib_period_bytes_27071 snd_pcm_lib_period_bytes 0 27071 NULL
@@ -106196,44 +107251,53 @@ index 0000000..6fcc08d
+find_first_bit_27088 find_first_bit 0-2 27088 NULL
+btmrvl_hscmd_write_27089 btmrvl_hscmd_write 3 27089 NULL
+__devcgroup_inode_permission_27108 __devcgroup_inode_permission 0 27108 NULL
++spin_time_accum_total_27131 spin_time_accum_total 1 27131 NULL
++__ext4_handle_dirty_metadata_27137 __ext4_handle_dirty_metadata 0 27137 NULL
+drbd_get_capacity_27141 drbd_get_capacity 0 27141 NULL
+pms_capture_27142 pms_capture 4 27142 NULL
+btmrvl_hscfgcmd_write_27143 btmrvl_hscfgcmd_write 3 27143 NULL
-+au_br_do_del_hip_27168 au_br_do_del_hip 3 27168 NULL
+i2400m_net_rx_27170 i2400m_net_rx 5 27170 NULL
+ieee80211_if_read_rc_rateidx_mask_5ghz_27183 ieee80211_if_read_rc_rateidx_mask_5ghz 3 27183 NULL
-+mmc_blk_compat_ioctl_27194 mmc_blk_compat_ioctl 4 27194 NULL
++get_unaligned_be32_27184 get_unaligned_be32 0 27184 NULL
++ocfs2_read_blocks_sync_27210 ocfs2_read_blocks_sync 0 27210 NULL
++write_kmem_27225 write_kmem 3 27225 NULL
+dbAllocAG_27228 dbAllocAG 0 27228 NULL
+rxrpc_request_key_27235 rxrpc_request_key 3 27235 NULL
++ocfs2_journal_access_path_27243 ocfs2_journal_access_path 0 27243 NULL
+cfpkt_add_trail_27260 cfpkt_add_trail 3 27260 NULL
++nlmsg_new_27263 nlmsg_new 1 27263 NULL
++usb_submit_urb_27278 usb_submit_urb 0 27278 NULL
+__dma_map_cont_27289 __dma_map_cont 5 27289 NULL
+hpi_read_reg_27302 hpi_read_reg 0 27302 NULL
-+copy_from_buf_27308 copy_from_buf 4-2 27308 NULL
++copy_from_buf_27308 copy_from_buf 2-4 27308 NULL
++ath6kl_wmi_test_cmd_27312 ath6kl_wmi_test_cmd 3 27312 NULL
+ocfs2_blocks_to_clusters_27327 ocfs2_blocks_to_clusters 0-2 27327 NULL
+snd_pcm_oss_write2_27332 snd_pcm_oss_write2 3-0 27332 NULL
+afs_cell_create_27346 afs_cell_create 2 27346 NULL
++iwl_dbgfs_csr_write_27363 iwl_dbgfs_csr_write 3 27363 NULL
+pcbit_stat_27364 pcbit_stat 2 27364 NULL
-+init_memory_mapping_27395 init_memory_mapping 0 27395 NULL
-+phys_pte_init_27411 phys_pte_init 0-3-2 27411 NULL
-+acpi_os_get_root_pointer_27416 acpi_os_get_root_pointer 0 27416 NULL nohasharray
-+ieee80211_if_read_smps_27416 ieee80211_if_read_smps 3 27416 &acpi_os_get_root_pointer_27416
++if_nlmsg_size_27404 if_nlmsg_size 0 27404 NULL
++seq_read_27411 seq_read 3 27411 NULL
++ieee80211_if_read_smps_27416 ieee80211_if_read_smps 3 27416 NULL
++ocfs2_refcount_cal_cow_clusters_27422 ocfs2_refcount_cal_cow_clusters 0 27422 NULL
++cypress_write_27423 cypress_write 4 27423 NULL
+pack_sg_list_27425 pack_sg_list 0-2 27425 NULL
-+rtsx_write_cfg_seq_27485 rtsx_write_cfg_seq 5-3 27485 NULL
++sddr09_read_data_27447 sddr09_read_data 3 27447 NULL
+hcd_buffer_alloc_27495 hcd_buffer_alloc 2 27495 NULL
-+qib_create_cq_27497 qib_create_cq 2 27497 NULL
+ip_set_get_h32_27498 ip_set_get_h32 0 27498 NULL
+garmin_read_process_27509 garmin_read_process 3 27509 NULL
+xfs_buf_read_uncached_27519 xfs_buf_read_uncached 4 27519 NULL
+ib_copy_to_udata_27525 ib_copy_to_udata 3 27525 NULL
++intel_gtt_map_memory_27539 intel_gtt_map_memory 0 27539 NULL
+snd_sonicvibes_getdmaa_27552 snd_sonicvibes_getdmaa 0 27552 NULL
-+libipw_alloc_txb_27579 libipw_alloc_txb 1 27579 NULL
-+reciprocal_divide_27596 reciprocal_divide 0-1-2 27596 NULL
++libipw_alloc_txb_27579 libipw_alloc_txb 1-3-2 27579 NULL
++tipc_cfg_reply_alloc_27606 tipc_cfg_reply_alloc 1 27606 NULL
+iwl4965_rs_sta_dbgfs_rate_scale_data_read_27619 iwl4965_rs_sta_dbgfs_rate_scale_data_read 3 27619 NULL
+read_flush_procfs_27642 read_flush_procfs 3 27642 NULL nohasharray
+nl80211_send_connect_result_27642 nl80211_send_connect_result 5-7 27642 &read_flush_procfs_27642 nohasharray
+ocfs2_xattr_ibody_get_27642 ocfs2_xattr_ibody_get 0 27642 &nl80211_send_connect_result_27642
+add_new_gdb_27643 add_new_gdb 3 27643 NULL
-+ieee80211_build_probe_req_27660 ieee80211_build_probe_req 7 27660 NULL
++ieee80211_build_probe_req_27660 ieee80211_build_probe_req 7-5 27660 NULL
+cdrom_read_cdda_old_27664 cdrom_read_cdda_old 4 27664 NULL
+qword_get_27670 qword_get 0 27670 NULL
+ocfs2_extend_dir_27695 ocfs2_extend_dir 4 27695 NULL
@@ -106242,173 +107306,211 @@ index 0000000..6fcc08d
+evm_write_key_27715 evm_write_key 3 27715 NULL
+ieee80211_if_fmt_dot11MeshGateAnnouncementProtocol_27722 ieee80211_if_fmt_dot11MeshGateAnnouncementProtocol 3 27722 NULL
+pstore_write_27724 pstore_write 3 27724 NULL nohasharray
-+reg_w_buf_27724 reg_w_buf 3 27724 &pstore_write_27724
++iwl_dbgfs_traffic_log_write_27724 iwl_dbgfs_traffic_log_write 3 27724 &pstore_write_27724 nohasharray
++reg_w_buf_27724 reg_w_buf 3 27724 &iwl_dbgfs_traffic_log_write_27724
+xfs_dir2_block_sfsize_27727 xfs_dir2_block_sfsize 0 27727 NULL
-+a4t_cs_init_27734 a4t_cs_init 3 27734 NULL
-+kcalloc_27770 kcalloc 1-2 27770 NULL
-+DivaSTraceGetMemotyRequirement_27797 DivaSTraceGetMemotyRequirement 0-1 27797 NULL
++kcalloc_27770 kcalloc 2-1 27770 NULL
+ttm_object_file_init_27804 ttm_object_file_init 2 27804 NULL
++hpt374_read_freq_27828 hpt374_read_freq 0 27828 NULL
+init_header_complete_27833 init_header_complete 0 27833 NULL nohasharray
+sys_listxattr_27833 sys_listxattr 3 27833 &init_header_complete_27833
+read_profile_27859 read_profile 3 27859 NULL
+sky2_pci_read16_27863 sky2_pci_read16 0 27863 NULL
+mangle_packet_27864 mangle_packet 6-8 27864 NULL
++ocfs2_file_splice_read_27870 ocfs2_file_splice_read 4 27870 NULL
++paranoid_check_ec_hdr_27872 paranoid_check_ec_hdr 0 27872 NULL
+unix_seqpacket_sendmsg_27893 unix_seqpacket_sendmsg 4 27893 NULL
-+ubi_eba_write_leb_st_27896 ubi_eba_write_leb_st 5 27896 NULL
-+gluebi_write_27905 gluebi_write 3 27905 NULL
++ubi_eba_write_leb_st_27896 ubi_eba_write_leb_st 0 27896 NULL
+bm_find_next_27929 bm_find_next 2 27929 NULL
++check_mapped_name_27943 check_mapped_name 3 27943 NULL
++sctp_make_abort_violation_27959 sctp_make_abort_violation 4 27959 NULL
+tracing_clock_write_27961 tracing_clock_write 3 27961 NULL
-+mic_rx_pkts_read_27972 mic_rx_pkts_read 3 27972 NULL
++device_register_27972 device_register 0 27972 NULL nohasharray
++mic_rx_pkts_read_27972 mic_rx_pkts_read 3 27972 &device_register_27972
+snd_rawmidi_write_28008 snd_rawmidi_write 3 28008 NULL
-+serial8250_port_size_28019 serial8250_port_size 0 28019 NULL
++get_packet_pg_28023 get_packet_pg 4 28023 NULL
+raid_status_28025 raid_status 4 28025 NULL
+sctp_setsockopt_maxburst_28041 sctp_setsockopt_maxburst 3 28041 NULL
-+cx231xx_init_vbi_isoc_28053 cx231xx_init_vbi_isoc 3-2 28053 NULL
++cx231xx_init_vbi_isoc_28053 cx231xx_init_vbi_isoc 3-2-4 28053 NULL
++init_rs_non_canonical_28059 init_rs_non_canonical 1 28059 NULL
+lpfc_idiag_mbxacc_read_28061 lpfc_idiag_mbxacc_read 3 28061 NULL
-+gdth_init_isa_28091 gdth_init_isa 1 28091 NULL
-+mmc_test_alloc_mem_28102 mmc_test_alloc_mem 3-2 28102 NULL
++GetRecvByte_28082 GetRecvByte 0 28082 NULL
++mmc_test_alloc_mem_28102 mmc_test_alloc_mem 2-3 28102 NULL
+vgacon_adjust_height_28124 vgacon_adjust_height 2 28124 NULL
++tipc_msg_init_28128 tipc_msg_init 4-2 28128 NULL
+video_read_28148 video_read 3 28148 NULL
+snd_midi_channel_alloc_set_28153 snd_midi_channel_alloc_set 1 28153 NULL
+stats_dot11FCSErrorCount_read_28154 stats_dot11FCSErrorCount_read 3 28154 NULL
-+vread_28173 vread 0 28173 NULL
++vread_28173 vread 0-3 28173 NULL
++c4iw_reject_cr_28174 c4iw_reject_cr 3 28174 NULL
++pipe_fcntl_28181 pipe_fcntl 3 28181 NULL
+macvtap_get_user_28185 macvtap_get_user 4 28185 NULL
-+d_path_28198 d_path 0 28198 NULL
++ocfs2_cow_sync_writeback_28221 ocfs2_cow_sync_writeback 0 28221 NULL
+line6_alloc_sysex_buffer_28225 line6_alloc_sysex_buffer 4 28225 NULL
+amd_nb_num_28228 amd_nb_num 0 28228 NULL
+c4iw_rqtpool_alloc_28271 c4iw_rqtpool_alloc 2 28271 NULL
+usemap_size_28281 usemap_size 0 28281 NULL
+dma_map_sg_attrs_28289 dma_map_sg_attrs 0 28289 NULL
++kstrtos16_from_user_28300 kstrtos16_from_user 2 28300 NULL
++__hidp_send_ctrl_message_28303 __hidp_send_ctrl_message 4 28303 NULL
+acpi_register_gsi_xen_28305 acpi_register_gsi_xen 2 28305 NULL nohasharray
+nouveau_compat_ioctl_28305 nouveau_compat_ioctl 2 28305 &acpi_register_gsi_xen_28305
+snd_pcm_oss_read_28317 snd_pcm_oss_read 3 28317 NULL
+bm_entry_write_28338 bm_entry_write 3 28338 NULL
++tcp_copy_to_iovec_28344 tcp_copy_to_iovec 3 28344 NULL
+snapshot_write_28351 snapshot_write 3 28351 NULL
+orig_node_del_if_28371 orig_node_del_if 2 28371 NULL
+sys_writev_28384 sys_writev 3 28384 NULL
+dlmfs_file_read_28385 dlmfs_file_read 3 28385 NULL
+subdev_ioctl_28417 subdev_ioctl 2 28417 NULL
++get_extent_allocation_hint_28423 get_extent_allocation_hint 0 28423 NULL
+snd_emu10k1_efx_read_28452 snd_emu10k1_efx_read 2 28452 NULL
+alloc_irq_cpu_rmap_28459 alloc_irq_cpu_rmap 1 28459 NULL
-+vmw_du_crtc_cursor_set_28479 vmw_du_crtc_cursor_set 4-5 28479 NULL
-+snapshot_status_28480 snapshot_status 4 28480 NULL
+ocfs2_backup_super_blkno_28484 ocfs2_backup_super_blkno 0-2 28484 NULL
++__filemap_fdatawrite_28485 __filemap_fdatawrite 0 28485 NULL
+max_response_pages_28492 max_response_pages 0 28492 NULL
-+__next_node_28521 __next_node 1 28521 NULL
++__next_node_28521 __next_node 1-0 28521 NULL
+i2400m_tx_stats_read_28527 i2400m_tx_stats_read 3 28527 NULL
++capinc_tty_write_28539 capinc_tty_write 3 28539 NULL
+sel_read_policycap_28544 sel_read_policycap 3 28544 NULL
-+run_delalloc_range_28545 run_delalloc_range 3 28545 NULL nohasharray
++run_delalloc_range_28545 run_delalloc_range 3-4 28545 NULL nohasharray
+mptctl_getiocinfo_28545 mptctl_getiocinfo 2 28545 &run_delalloc_range_28545
++sysfs_create_bin_file_28551 sysfs_create_bin_file 0 28551 NULL
+b43legacy_debugfs_write_28556 b43legacy_debugfs_write 3 28556 NULL
-+phys_pud_init_28574 phys_pud_init 0-3-2 28574 NULL
++i2o_msg_post_wait_mem_28558 i2o_msg_post_wait_mem 0 28558 NULL
++inet_dccp_listen_28565 inet_dccp_listen 2 28565 NULL
+cfg80211_send_rx_auth_28580 cfg80211_send_rx_auth 3 28580 NULL
+oxygen_read32_28582 oxygen_read32 0 28582 NULL
+ocfs2_read_dir_block_28587 ocfs2_read_dir_block 2 28587 NULL
-+extract_entropy_28604 extract_entropy 3-5 28604 NULL
++extract_entropy_28604 extract_entropy 5-3 28604 NULL
+kfifo_unused_28612 kfifo_unused 0 28612 NULL
+mp_override_legacy_irq_28618 mp_override_legacy_irq 4 28618 NULL
+snd_nm256_capture_copy_28622 snd_nm256_capture_copy 5-3 28622 NULL
+_set_range_28627 _set_range 3 28627 NULL
-+v4l2_compat_ioctl32_28630 v4l2_compat_ioctl32 3 28630 NULL
+setup_usemap_28636 setup_usemap 3-4 28636 NULL
++qib_handle_6120_hwerrors_28642 qib_handle_6120_hwerrors 3 28642 NULL
++btrfs_previous_item_28667 btrfs_previous_item 0 28667 NULL
+blk_queue_resize_tags_28670 blk_queue_resize_tags 2 28670 NULL
+posix_acl_from_xattr_28675 posix_acl_from_xattr 2 28675 NULL
++__dev_alloc_skb_28681 __dev_alloc_skb 1 28681 NULL
+nl80211_send_new_peer_candidate_28692 nl80211_send_new_peer_candidate 5 28692 NULL
-+drm_plane_init_28731 drm_plane_init 6 28731 NULL
++balance_level_28707 balance_level 0 28707 NULL
+spi_execute_28736 spi_execute 5 28736 NULL
-+snd_pcm_aio_write_28738 snd_pcm_aio_write 3 28738 NULL nohasharray
-+phantom_compat_ioctl_28738 phantom_compat_ioctl 3 28738 &snd_pcm_aio_write_28738
++snd_pcm_aio_write_28738 snd_pcm_aio_write 3 28738 NULL
+cxio_init_resource_fifo_28764 cxio_init_resource_fifo 3 28764 NULL
++rpc_pipe_generic_upcall_28766 rpc_pipe_generic_upcall 4 28766 NULL
++atomic_inc_return_unchecked_28778 atomic_inc_return_unchecked 0 28778 NULL
+ath6kl_get_num_reg_28780 ath6kl_get_num_reg 0 28780 NULL
++dvb_net_sec_callback_28786 dvb_net_sec_callback 2 28786 NULL
+sel_write_member_28800 sel_write_member 3 28800 NULL
++ocfs2_cow_contig_clusters_28803 ocfs2_cow_contig_clusters 0 28803 NULL
+cgroup_file_read_28804 cgroup_file_read 3 28804 NULL
+memory_bm_create_28814 memory_bm_create 0 28814 NULL
+iwl_dbgfs_rxon_filter_flags_read_28832 iwl_dbgfs_rxon_filter_flags_read 3 28832 NULL
-+vp_request_msix_vectors_28849 vp_request_msix_vectors 2 28849 NULL
++vp_request_msix_vectors_28849 vp_request_msix_vectors 2-0 28849 NULL
++paranoid_check_peb_vid_hdr_28866 paranoid_check_peb_vid_hdr 0 28866 NULL
+ipv6_renew_options_28867 ipv6_renew_options 5 28867 NULL
++max_io_len_target_boundary_28879 max_io_len_target_boundary 0-1 28879 NULL
+iwl3945_sta_dbgfs_stats_table_read_28882 iwl3945_sta_dbgfs_stats_table_read 3 28882 NULL
+packet_sendmsg_spkt_28885 packet_sendmsg_spkt 4 28885 NULL
+ps_upsd_timeouts_read_28924 ps_upsd_timeouts_read 3 28924 NULL
++iwl_dbgfs_sleep_level_override_write_28925 iwl_dbgfs_sleep_level_override_write 3 28925 NULL
+ocfs2_frozen_trigger_28929 ocfs2_frozen_trigger 4 28929 NULL
+push_rx_28939 push_rx 3 28939 NULL
++btrfs_trim_block_group_28963 btrfs_trim_block_group 3 28963 NULL
+alloc_sched_domains_28972 alloc_sched_domains 1 28972 NULL
+ext4_mb_add_groupinfo_28988 ext4_mb_add_groupinfo 2 28988 NULL
+hci_sock_setsockopt_28993 hci_sock_setsockopt 5 28993 NULL
+bin_uuid_28999 bin_uuid 3 28999 NULL
-+xz_dec_init_29029 xz_dec_init 2 29029 NULL
+sys_fcntl64_29031 sys_fcntl64 3 29031 NULL
-+rxrpc_sendmsg_29049 rxrpc_sendmsg 4 29049 NULL
++rxrpc_sendmsg_29049 rxrpc_sendmsg 4 29049 NULL nohasharray
++ProcessGetHostMibs_29049 ProcessGetHostMibs 0 29049 &rxrpc_sendmsg_29049
++tso_fragment_29050 tso_fragment 3 29050 NULL
+split_bvec_29058 split_bvec 5 29058 NULL
+iso_packets_buffer_init_29061 iso_packets_buffer_init 3-4 29061 NULL
+lpfc_idiag_extacc_drivr_get_29067 lpfc_idiag_extacc_drivr_get 0-3 29067 NULL
-+mark_extents_written_29082 mark_extents_written 2 29082 NULL
++ieee80211_probereq_get_29069 ieee80211_probereq_get 4-6 29069 NULL
++mark_extents_written_29082 mark_extents_written 2-3 29082 NULL
++iwl_dbgfs_log_event_write_29088 iwl_dbgfs_log_event_write 3 29088 NULL
+isdn_ppp_write_29109 isdn_ppp_write 4 29109 NULL
-+rbd_req_sync_op_29115 rbd_req_sync_op 9-10 29115 NULL
++rbd_req_sync_op_29115 rbd_req_sync_op 10-9 29115 NULL
+snprintf_29125 snprintf 0 29125 NULL
+iov_shorten_29130 iov_shorten 0 29130 NULL
+proc_scsi_write_29142 proc_scsi_write 3 29142 NULL
+reshape_ring_29147 reshape_ring 2 29147 NULL
-+drm_property_create_enum_29201 drm_property_create_enum 5 29201 NULL
+wusb_prf_256_29203 wusb_prf_256 7 29203 NULL
+do_shrinker_shrink_29208 do_shrinker_shrink 0 29208 NULL
-+iwl_dbgfs_temperature_read_29224 iwl_dbgfs_temperature_read 3 29224 NULL
-+devm_ioremap_29235 devm_ioremap 2-3 29235 NULL
-+recover_peb_29238 recover_peb 6-7 29238 NULL
++rds_iw_inc_copy_to_user_29214 rds_iw_inc_copy_to_user 3 29214 NULL
++iwl_dbgfs_temperature_read_29224 iwl_dbgfs_temperature_read 3 29224 NULL nohasharray
++security_socket_recvmsg_29224 security_socket_recvmsg 0 29224 &iwl_dbgfs_temperature_read_29224
++recover_peb_29238 recover_peb 0 29238 NULL
+security_context_to_sid_core_29248 security_context_to_sid_core 2 29248 NULL
+prism2_set_genericelement_29277 prism2_set_genericelement 3 29277 NULL
+bitmap_ord_to_pos_29279 bitmap_ord_to_pos 3 29279 NULL
++ext4_fiemap_29296 ext4_fiemap 4 29296 NULL
+sn9c102_read_29305 sn9c102_read 3 29305 NULL
-+lo_compat_ioctl_29336 lo_compat_ioctl 4 29336 NULL
+__alloc_ei_netdev_29338 __alloc_ei_netdev 1 29338 NULL
++ide_read_altstatus_29343 ide_read_altstatus 0 29343 NULL
+l2cap_sock_setsockopt_old_29346 l2cap_sock_setsockopt_old 4 29346 NULL
+alloc_and_copy_ftrace_hash_29368 alloc_and_copy_ftrace_hash 1 29368 NULL
+pca953x_irq_setup_29407 pca953x_irq_setup 3 29407 NULL
+mempool_create_29437 mempool_create 1 29437 NULL
++iscsi_sw_tcp_session_create_29443 iscsi_sw_tcp_session_create 2 29443 NULL
+crypto_ahash_alignmask_29445 crypto_ahash_alignmask 0 29445 NULL
-+apei_exec_ctx_get_output_29457 apei_exec_ctx_get_output 0 29457 NULL
++p9_client_prepare_req_29448 p9_client_prepare_req 3 29448 NULL
+validate_scan_freqs_29462 validate_scan_freqs 0 29462 NULL
++ubi_scan_add_used_29468 ubi_scan_add_used 0 29468 NULL
+do_register_entry_29478 do_register_entry 4 29478 NULL
+simple_strtoul_29480 simple_strtoul 0 29480 NULL
++sched_clock_local_29498 sched_clock_local 0 29498 NULL
+btmrvl_pscmd_write_29504 btmrvl_pscmd_write 3 29504 NULL
+btrfs_file_extent_disk_bytenr_29505 btrfs_file_extent_disk_bytenr 0 29505 NULL
++write_file_regidx_29517 write_file_regidx 3 29517 NULL
+atk_debugfs_ggrp_read_29522 atk_debugfs_ggrp_read 3 29522 NULL
++pci_enable_msix_29524 pci_enable_msix 0 29524 NULL
+idetape_queue_rw_tail_29562 idetape_queue_rw_tail 3 29562 NULL
+leaf_dealloc_29566 leaf_dealloc 3 29566 NULL
++kvm_read_guest_virt_system_29569 kvm_read_guest_virt_system 4-2 29569 NULL
+lbs_lowsnr_read_29571 lbs_lowsnr_read 3 29571 NULL
-+pvr2_hdw_report_unlocked_29589 pvr2_hdw_report_unlocked 4 29589 NULL
++iwl_dbgfs_missed_beacon_write_29586 iwl_dbgfs_missed_beacon_write 3 29586 NULL
++pvr2_hdw_report_unlocked_29589 pvr2_hdw_report_unlocked 4-0 29589 NULL
+slots_per_page_29601 slots_per_page 0 29601 NULL
+nla_get_u16_29624 nla_get_u16 0 29624 NULL
-+lowmem_page_address_29649 lowmem_page_address 0 29649 NULL
+sctp_make_abort_user_29654 sctp_make_abort_user 3 29654 NULL
++br_send_bpdu_29669 br_send_bpdu 3 29669 NULL
+new_lockspace_29674 new_lockspace 2 29674 NULL
+sisusb_write_mem_bulk_29678 sisusb_write_mem_bulk 4 29678 NULL
++tracepoint_probe_register_29688 tracepoint_probe_register 0 29688 NULL
++jbd2_journal_restart_29692 jbd2_journal_restart 0 29692 NULL
+sd_alloc_ctl_entry_29708 sd_alloc_ctl_entry 1 29708 NULL
+probes_write_29711 probes_write 3 29711 NULL
+emi62_writememory_29731 emi62_writememory 4 29731 NULL
+read_cis_cache_29735 read_cis_cache 4 29735 NULL
-+cxio_hal_init_resource_29771 cxio_hal_init_resource 2-6-7 29771 NULL nohasharray
++cxio_hal_init_resource_29771 cxio_hal_init_resource 7-6-2 29771 NULL nohasharray
+ip_vs_conn_fill_param_sync_29771 ip_vs_conn_fill_param_sync 6 29771 &cxio_hal_init_resource_29771
+cifs_ucs2_bytes_29790 cifs_ucs2_bytes 0 29790 NULL
+dbAlloc_29794 dbAlloc 0 29794 NULL
+ext4_trim_all_free_29806 ext4_trim_all_free 4-3-2 29806 NULL
-+tcp_sendpage_29829 tcp_sendpage 3-4 29829 NULL
++efx_wanted_channels_29813 efx_wanted_channels 0 29813 NULL
++tcp_sendpage_29829 tcp_sendpage 4-3 29829 NULL
+scan_bitmap_block_29840 scan_bitmap_block 4 29840 NULL
+__probe_kernel_write_29842 __probe_kernel_write 3 29842 NULL
++count_partial_29850 count_partial 0 29850 NULL
+ipv6_setsockopt_29871 ipv6_setsockopt 5 29871 NULL
+scsi_end_request_29876 scsi_end_request 3 29876 NULL
+crypto_aead_alignmask_29885 crypto_aead_alignmask 0 29885 NULL
+nfc_targets_found_29886 nfc_targets_found 3 29886 NULL
+pin_code_reply_29893 pin_code_reply 4 29893 NULL
-+check586_29914 check586 2 29914 NULL
++write_file_queue_29922 write_file_queue 3 29922 NULL
+ext4_xattr_set_acl_29930 ext4_xattr_set_acl 4 29930 NULL
-+security_transition_sid_29940 security_transition_sid 3 29940 NULL
+__btrfs_getxattr_29947 __btrfs_getxattr 0 29947 NULL
-+irias_add_octseq_attrib_29983 irias_add_octseq_attrib 4 29983 NULL nohasharray
-+diva_os_get_context_size_29983 diva_os_get_context_size 0 29983 &irias_add_octseq_attrib_29983
-+arch_setup_dmar_msi_29992 arch_setup_dmar_msi 1 29992 NULL
-+utf32_to_utf8_30028 utf32_to_utf8 0 30028 NULL
++xfrm_count_auth_supported_29957 xfrm_count_auth_supported 0 29957 NULL
++irias_add_octseq_attrib_29983 irias_add_octseq_attrib 4 29983 NULL
++arch_setup_dmar_msi_29992 arch_setup_dmar_msi 1-0 29992 NULL
+alloc_netdev_mqs_30030 alloc_netdev_mqs 1 30030 NULL
+scsi_vpd_inquiry_30040 scsi_vpd_inquiry 4 30040 NULL
++wrmalt_30043 wrmalt 0 30043 NULL
++__pci_request_selected_regions_30058 __pci_request_selected_regions 0 30058 NULL
+cxgbi_ddp_reserve_30091 cxgbi_ddp_reserve 4 30091 NULL
+snd_midi_channel_init_set_30092 snd_midi_channel_init_set 1 30092 NULL
+tg3_run_loopback_30093 tg3_run_loopback 2 30093 NULL
@@ -106416,121 +107518,145 @@ index 0000000..6fcc08d
+spi_async_locked_30117 spi_async_locked 0 30117 NULL
+calgary_unmap_page_30130 calgary_unmap_page 2-3 30130 NULL
+_osd_req_sizeof_alist_header_30134 _osd_req_sizeof_alist_header 0 30134 NULL
++recv_stream_30138 recv_stream 4 30138 NULL
+u_memcpya_30139 u_memcpya 2-3 30139 NULL
++i915_gem_object_get_pages_gtt_30154 i915_gem_object_get_pages_gtt 0 30154 NULL
++i915_gem_object_wait_rendering_30173 i915_gem_object_wait_rendering 0 30173 NULL
+cx25821_video_ioctl_30188 cx25821_video_ioctl 2 30188 NULL
+mempool_create_page_pool_30189 mempool_create_page_pool 1 30189 NULL
-+stripe_status_30195 stripe_status 4 30195 NULL
++snd_pcm_playback_forward_30201 snd_pcm_playback_forward 0-2 30201 NULL
+usblp_ioctl_30203 usblp_ioctl 2 30203 NULL
++preallocate_pcm_pages_30209 preallocate_pcm_pages 2 30209 NULL
+read_4k_modal_eeprom_30212 read_4k_modal_eeprom 3 30212 NULL
+snd_ac97_pcm_assign_30218 snd_ac97_pcm_assign 2 30218 NULL
+dccp_manip_pkt_30229 dccp_manip_pkt 2 30229 NULL
++rawv6_recvmsg_30265 rawv6_recvmsg 4 30265 NULL
+isr_pci_pm_read_30271 isr_pci_pm_read 3 30271 NULL
+compat_readv_30273 compat_readv 3 30273 NULL
+lapic_register_intr_30279 lapic_register_intr 1 30279 NULL
+skcipher_sendmsg_30290 skcipher_sendmsg 4 30290 NULL
++ir_create_table_30303 ir_create_table 4 30303 NULL
+ext4_acl_from_disk_30320 ext4_acl_from_disk 2 30320 NULL
-+generic_ptrace_pokedata_30338 generic_ptrace_pokedata 2 30338 NULL
+resource_from_user_30341 resource_from_user 3 30341 NULL
-+__vmalloc_node_flags_30352 __vmalloc_node_flags 1 30352 NULL
++kstrtou32_from_user_30361 kstrtou32_from_user 2 30361 NULL
++inet_getid_30365 inet_getid 2 30365 NULL
+sys_get_mempolicy_30379 sys_get_mempolicy 3 30379 NULL
-+c4iw_init_resource_30393 c4iw_init_resource 2-3 30393 NULL
++blkdev_issue_zeroout_30392 blkdev_issue_zeroout 0 30392 NULL
++c4iw_init_resource_30393 c4iw_init_resource 3-2 30393 NULL
+_drbd_bm_find_next_zero_30415 _drbd_bm_find_next_zero 2 30415 NULL
++ext4_ext_create_new_leaf_30428 ext4_ext_create_new_leaf 0 30428 NULL
+enable_write_30456 enable_write 3 30456 NULL
+urandom_read_30462 urandom_read 3 30462 NULL
+zoran_ioctl_30465 zoran_ioctl 2 30465 NULL
-+write_head_30481 write_head 4 30481 NULL
++i2c_ctrl_read_30467 i2c_ctrl_read 0 30467 NULL
++i915_mutex_lock_interruptible_30474 i915_mutex_lock_interruptible 0 30474 NULL
+adu_write_30487 adu_write 3 30487 NULL
++dtim_interval_write_30489 dtim_interval_write 3 30489 NULL
++nouveau_vm_new_30495 nouveau_vm_new 3-2 30495 NULL
++set_config_30526 set_config 0 30526 NULL
+disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL
+blk_init_tags_30592 blk_init_tags 1 30592 NULL
+sgl_map_user_pages_30610 sgl_map_user_pages 2 30610 NULL
+macvtap_sendmsg_30629 macvtap_sendmsg 4 30629 NULL
+compat_raw_setsockopt_30634 compat_raw_setsockopt 5 30634 NULL
+nfsd_nrpools_30651 nfsd_nrpools 0 30651 NULL
-+agp_remap_30665 agp_remap 2 30665 NULL
+jffs2_flash_read_30667 jffs2_flash_read 0 30667 NULL
+dccp_setsockopt_ccid_30701 dccp_setsockopt_ccid 4 30701 NULL
+wled_proc_write_30709 wled_proc_write 3 30709 NULL
++lbs_wrbbp_write_30712 lbs_wrbbp_write 3 30712 NULL
++ocfs2_find_cpos_for_left_leaf_30713 ocfs2_find_cpos_for_left_leaf 0 30713 NULL
++l2cap_build_conf_rsp_30719 l2cap_build_conf_rsp 0 30719 NULL
+lbs_debugfs_read_30721 lbs_debugfs_read 3 30721 NULL
+snd_nm256_playback_silence_30727 snd_nm256_playback_silence 4-3 30727 NULL
+ath6kl_wmi_send_action_cmd_30735 ath6kl_wmi_send_action_cmd 6 30735 NULL
+fuse_conn_limit_write_30777 fuse_conn_limit_write 3 30777 NULL nohasharray
+tcf_csum_ipv4_udp_30777 tcf_csum_ipv4_udp 4 30777 &fuse_conn_limit_write_30777
-+ubi_write_30809 ubi_write 4-5 30809 NULL
+smk_read_doi_30813 smk_read_doi 3 30813 NULL
+get_kobj_path_length_30831 get_kobj_path_length 0 30831 NULL
+sctp_setsockopt_auth_chunk_30843 sctp_setsockopt_auth_chunk 3 30843 NULL
-+hda_hwdep_ioctl_compat_30847 hda_hwdep_ioctl_compat 4 30847 NULL
+ieee80211_if_fmt_dropped_frames_no_route_30884 ieee80211_if_fmt_dropped_frames_no_route 3 30884 NULL
++pn_recvmsg_30887 pn_recvmsg 4 30887 NULL
+f1x_match_to_this_node_30888 f1x_match_to_this_node 3 30888 NULL
-+iommu_map_mmio_space_30919 iommu_map_mmio_space 1 30919 NULL
++get_params_30899 get_params 0 30899 NULL
++fc_host_post_vendor_event_30903 fc_host_post_vendor_event 3 30903 NULL
+sctp_setsockopt_rtoinfo_30941 sctp_setsockopt_rtoinfo 3 30941 NULL
++find_free_dev_extent_30963 find_free_dev_extent 0 30963 NULL
+tty_insert_flip_string_flags_30969 tty_insert_flip_string_flags 4 30969 NULL
+huge_page_mask_30981 huge_page_mask 0 30981 NULL
++nlmsg_put_answer_30988 nlmsg_put_answer 4 30988 NULL
++i2400mu_rx_size_grow_30989 i2400mu_rx_size_grow 0 30989 NULL
+lbs_host_sleep_read_31013 lbs_host_sleep_read 3 31013 NULL
-+phys_pmd_init_31024 phys_pmd_init 0-3-2 31024 NULL
+compat_sys_mq_timedsend_31060 compat_sys_mq_timedsend 3 31060 NULL
+lbs_failcount_read_31063 lbs_failcount_read 3 31063 NULL
+find_next_bit_le_31064 find_next_bit_le 0-2-3 31064 NULL
-+sys_mincore_31079 sys_mincore 1 31079 NULL
-+ttm_bo_ioremap_31082 ttm_bo_ioremap 2-3 31082 NULL
++sys_mincore_31079 sys_mincore 2-1 31079 NULL
+sctp_setsockopt_context_31091 sctp_setsockopt_context 3 31091 NULL
+compat_sys_get_mempolicy_31109 compat_sys_get_mempolicy 3 31109 NULL
+depth_read_31112 depth_read 3 31112 NULL
-+kvm_mmu_pte_write_31120 kvm_mmu_pte_write 2 31120 NULL
++kvm_mmu_pte_write_31120 kvm_mmu_pte_write 2-4 31120 NULL
++ssb_read16_31139 ssb_read16 0 31139 NULL
+kimage_normal_alloc_31140 kimage_normal_alloc 3 31140 NULL
-+size_inside_page_31141 size_inside_page 0 31141 NULL
++size_inside_page_31141 size_inside_page 0-1-2 31141 NULL
+w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL
+ch_do_scsi_31171 ch_do_scsi 4 31171 NULL
+input_mt_init_slots_31183 input_mt_init_slots 2 31183 NULL
-+acpi_ex_system_memory_space_handler_31192 acpi_ex_system_memory_space_handler 2 31192 NULL
-+crypto_rng_seedsize_31196 crypto_rng_seedsize 0 31196 NULL
+r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL
+cpumask_weight_31215 cpumask_weight 0 31215 NULL
+__read_reg_31216 __read_reg 0 31216 NULL
+atm_get_addr_31221 atm_get_addr 3 31221 NULL
++tcp_recvmsg_31238 tcp_recvmsg 4 31238 NULL
+cyy_readb_31240 cyy_readb 0 31240 NULL
+_create_sg_bios_31244 _create_sg_bios 4 31244 NULL
+ieee80211_if_read_last_beacon_31257 ieee80211_if_read_last_beacon 3 31257 NULL
-+ceph_copy_page_vector_to_user_31270 ceph_copy_page_vector_to_user 3-4 31270 NULL
++ceph_copy_page_vector_to_user_31270 ceph_copy_page_vector_to_user 0-4-3 31270 NULL
+sctp_tsnmap_find_gap_ack_31272 sctp_tsnmap_find_gap_ack 3-2 31272 NULL
+uvc_simplify_fraction_31303 uvc_simplify_fraction 3 31303 NULL
++push_leaf_left_31306 push_leaf_left 0 31306 NULL
+sisusbcon_scroll_31315 sisusbcon_scroll 5-2-3 31315 NULL
-+futex_uaddr_31316 futex_uaddr 2 31316 NULL
+command_file_write_31318 command_file_write 3 31318 NULL
++hwerr_crcbits_31334 hwerr_crcbits 4 31334 NULL
+__cpu_to_node_31345 __cpu_to_node 0 31345 NULL
+rbd_do_op_31366 rbd_do_op 8-9 31366 NULL
-+xprt_rdma_allocate_31372 xprt_rdma_allocate 2 31372 NULL
++native_setup_msi_irqs_31367 native_setup_msi_irqs 2 31367 NULL
++buffDnld_31372 buffDnld 0 31372 NULL nohasharray
++xprt_rdma_allocate_31372 xprt_rdma_allocate 2 31372 &buffDnld_31372
+trace_parser_get_init_31379 trace_parser_get_init 2 31379 NULL
+inb_31388 inb 0 31388 NULL
+key_ifindex_read_31411 key_ifindex_read 3 31411 NULL
-+mcs7830_set_reg_31413 mcs7830_set_reg 3 31413 NULL
++i915_gem_object_put_fence_31413 i915_gem_object_put_fence 0 31413 NULL nohasharray
++mcs7830_set_reg_31413 mcs7830_set_reg 3 31413 &i915_gem_object_put_fence_31413
+TSS_checkhmac1_31429 TSS_checkhmac1 5 31429 NULL
+snd_aw2_saa7146_get_hw_ptr_capture_31431 snd_aw2_saa7146_get_hw_ptr_capture 0 31431 NULL
-+pool_status_31439 pool_status 4 31439 NULL
+acpi_sci_ioapic_setup_31445 acpi_sci_ioapic_setup 4 31445 NULL
+opera1_xilinx_rw_31453 opera1_xilinx_rw 5 31453 NULL
++register_ftrace_graph_31456 register_ftrace_graph 0 31456 NULL
+do_fcntl_31468 do_fcntl 3 31468 NULL
+xfs_btree_get_numrecs_31477 xfs_btree_get_numrecs 0 31477 NULL
++__ext4_journal_get_write_access_31482 __ext4_journal_get_write_access 0 31482 NULL
+alg_setkey_31485 alg_setkey 3 31485 NULL
+rds_message_map_pages_31487 rds_message_map_pages 2 31487 NULL
+qsfp_2_read_31491 qsfp_2_read 3 31491 NULL
+__alloc_bootmem_31498 __alloc_bootmem 1 31498 NULL
+hidraw_write_31536 hidraw_write 3 31536 NULL
-+mtd_div_by_eb_31543 mtd_div_by_eb 0-1 31543 NULL
+normalize_31566 normalize 0-1-2 31566 NULL
++inet6_ifaddr_msgsize_31568 inet6_ifaddr_msgsize 0 31568 NULL
+osst_write_31581 osst_write 3 31581 NULL
+iwl_dbgfs_ucode_tx_stats_read_31611 iwl_dbgfs_ucode_tx_stats_read 3 31611 NULL
+arvo_sysfs_read_31617 arvo_sysfs_read 6 31617 NULL
+iwl_legacy_dbgfs_traffic_log_read_31625 iwl_legacy_dbgfs_traffic_log_read 3 31625 NULL
++xfs_log_move_tail_31628 xfs_log_move_tail 2 31628 NULL
+videobuf_read_one_31637 videobuf_read_one 3 31637 NULL
+pod_alloc_sysex_buffer_31651 pod_alloc_sysex_buffer 3 31651 NULL
+xfer_secondary_pool_31661 xfer_secondary_pool 2 31661 NULL
+__lgread_31668 __lgread 4 31668 NULL
-+symbol_string_31670 symbol_string 0 31670 NULL
++xfs_ail_min_lsn_31684 xfs_ail_min_lsn 0 31684 NULL
++fst_recover_rx_error_31687 fst_recover_rx_error 3 31687 NULL
+handle_interrupt_31689 handle_interrupt 0 31689 NULL nohasharray
+reiserfs_in_journal_31689 reiserfs_in_journal 3 31689 &handle_interrupt_31689
+iwl_legacy_dbgfs_chain_noise_read_31692 iwl_legacy_dbgfs_chain_noise_read 3 31692 NULL
+audit_log_n_string_31705 audit_log_n_string 3 31705 NULL
++sctp_make_asconf_ack_31726 sctp_make_asconf_ack 3 31726 NULL
++ata_tport_add_31733 ata_tport_add 0 31733 NULL
+utf16s_to_utf8s_31735 utf16s_to_utf8s 0 31735 NULL
+NCR_700_change_queue_depth_31742 NCR_700_change_queue_depth 2 31742 NULL nohasharray
+input_abs_get_max_31742 input_abs_get_max 0 31742 &NCR_700_change_queue_depth_31742
@@ -106542,122 +107668,149 @@ index 0000000..6fcc08d
+isr_rx_procs_read_31804 isr_rx_procs_read 3 31804 NULL
+strnlen_user_31815 strnlen_user 0-2 31815 NULL
+sta_last_signal_read_31818 sta_last_signal_read 3 31818 NULL
-+drm_mode_crtc_set_gamma_size_31881 drm_mode_crtc_set_gamma_size 2 31881 NULL
-+ddb_output_write_31902 ddb_output_write 3 31902 NULL
++iwl_dbgfs_disable_ht40_write_31876 iwl_dbgfs_disable_ht40_write 3 31876 NULL
++ddb_output_write_31902 ddb_output_write 3-0 31902 NULL
+xattr_permission_31907 xattr_permission 0 31907 NULL
+kmem_alloc_31920 kmem_alloc 1 31920 NULL
+guestwidth_to_adjustwidth_31937 guestwidth_to_adjustwidth 0-1 31937 NULL
-+iov_iter_copy_from_user_31942 iov_iter_copy_from_user 4 31942 NULL
++iov_iter_copy_from_user_31942 iov_iter_copy_from_user 4-0 31942 NULL nohasharray
++read_mem_31942 read_mem 3 31942 &iov_iter_copy_from_user_31942
+vb2_write_31948 vb2_write 3 31948 NULL
+pvr2_ctrl_get_valname_31951 pvr2_ctrl_get_valname 4 31951 NULL
+copy_from_user_toio_31966 copy_from_user_toio 3 31966 NULL
-+mtd_add_partition_31971 mtd_add_partition 3 31971 NULL
++vx_read_status_31982 vx_read_status 0 31982 NULL
+find_next_zero_bit_31990 find_next_zero_bit 0-2-3 31990 NULL
++sysfs_create_file_31996 sysfs_create_file 0 31996 NULL
+calc_hmac_32010 calc_hmac 3 32010 NULL
-+aead_len_32021 aead_len 0 32021 NULL
-+ocfs2_remove_extent_32032 ocfs2_remove_extent 4-3 32032 NULL
++aer_init_32021 aer_init 0 32021 NULL nohasharray
++aead_len_32021 aead_len 0 32021 &aer_init_32021
++ocfs2_remove_extent_32032 ocfs2_remove_extent 0-4-3 32032 NULL
+posix_acl_set_32037 posix_acl_set 4 32037 NULL
-+vmw_cursor_update_dmabuf_32045 vmw_cursor_update_dmabuf 3-4 32045 NULL
-+sys_sched_setaffinity_32046 sys_sched_setaffinity 2 32046 NULL
++ocfs2_update_edge_lengths_32046 ocfs2_update_edge_lengths 0 32046 NULL nohasharray
++sys_sched_setaffinity_32046 sys_sched_setaffinity 2 32046 &ocfs2_update_edge_lengths_32046
+proc_scsi_devinfo_write_32064 proc_scsi_devinfo_write 3 32064 NULL
++nlmsg_put_32069 nlmsg_put 5 32069 NULL
+cfg80211_send_unprot_deauth_32080 cfg80211_send_unprot_deauth 3 32080 NULL
+ath6kl_fwlog_read_32101 ath6kl_fwlog_read 3 32101 NULL
+set_discoverable_32102 set_discoverable 4 32102 NULL
+disk_status_32120 disk_status 4 32120 NULL
++kobject_add_internal_32133 kobject_add_internal 0 32133 NULL
++alloc_tx_32143 alloc_tx 2 32143 NULL
++norm_maxh_32151 norm_maxh 0 32151 NULL
+venus_link_32165 venus_link 5 32165 NULL
+drbd_new_dev_size_32171 drbd_new_dev_size 0 32171 NULL
-+do_writepages_32173 do_writepages 0 32173 NULL nohasharray
-+ntfs_rl_realloc_nofail_32173 ntfs_rl_realloc_nofail 3 32173 &do_writepages_32173
++do_writepages_32173 do_writepages 0 32173 NULL
+load_header_32183 load_header 0 32183 NULL
+ubi_wl_scrub_peb_32196 ubi_wl_scrub_peb 0 32196 NULL
+wusb_ccm_mac_32199 wusb_ccm_mac 7 32199 NULL
+riva_get_cmap_len_32218 riva_get_cmap_len 0 32218 NULL
++caif_seqpkt_recvmsg_32241 caif_seqpkt_recvmsg 4 32241 NULL
+lbs_lowrssi_read_32242 lbs_lowrssi_read 3 32242 NULL
+ocfs2_xattr_find_entry_32260 ocfs2_xattr_find_entry 0 32260 NULL
-+fb_compat_ioctl_32265 fb_compat_ioctl 3 32265 NULL
-+vmalloc_user_32308 vmalloc_user 1 32308 NULL
++l3_alloc_skb_32289 l3_alloc_skb 1 32289 NULL
++cas_calc_tabort_32316 cas_calc_tabort 0 32316 NULL
+nl80211_send_mlme_event_32337 nl80211_send_mlme_event 4 32337 NULL
+t4_alloc_mem_32342 t4_alloc_mem 1 32342 NULL
-+dispatch_ioctl_32357 dispatch_ioctl 2 32357 NULL
++dispatch_ioctl_32357 dispatch_ioctl 2 32357 NULL nohasharray
++rx_streaming_always_write_32357 rx_streaming_always_write 3 32357 &dispatch_ioctl_32357
+f1x_translate_sysaddr_to_cs_32359 f1x_translate_sysaddr_to_cs 2 32359 NULL
+sel_read_initcon_32362 sel_read_initcon 3 32362 NULL
-+_drbd_bm_find_next_32372 _drbd_bm_find_next 2 32372 NULL
++send_mpa_reply_32372 send_mpa_reply 3 32372 NULL nohasharray
++_drbd_bm_find_next_32372 _drbd_bm_find_next 2 32372 &send_mpa_reply_32372
+variax_set_raw2_32374 variax_set_raw2 4 32374 NULL
+usbtmc_read_32377 usbtmc_read 3 32377 NULL
++intel_iommu_map_32384 intel_iommu_map 4-3 32384 NULL
++local_clock_32385 local_clock 0 32385 NULL
+xfs_iext_add_indirect_multi_32400 xfs_iext_add_indirect_multi 3 32400 NULL
+hid_input_report_32458 hid_input_report 4 32458 NULL
++snd_pcm_sync_ptr_32461 snd_pcm_sync_ptr 0 32461 NULL
++fill_readbuf_32464 fill_readbuf 3 32464 NULL
+ieee80211_fill_mesh_addresses_32465 ieee80211_fill_mesh_addresses 0 32465 NULL
+ide_driver_proc_write_32493 ide_driver_proc_write 3 32493 NULL
+ctrl_std_val_to_sym_32516 ctrl_std_val_to_sym 5 32516 NULL
-+qsfp_read_32522 qsfp_read 0-4-2 32522 NULL
++ocfs2_local_alloc_reserve_for_window_32518 ocfs2_local_alloc_reserve_for_window 0 32518 NULL
++qsfp_read_32522 qsfp_read 0-2-4 32522 NULL
+ilo_read_32531 ilo_read 3 32531 NULL
+ieee80211_if_read_estab_plinks_32533 ieee80211_if_read_estab_plinks 3 32533 NULL
+format_devstat_counter_32550 format_devstat_counter 3 32550 NULL
+__first_node_32558 __first_node 0 32558 NULL
+aes_encrypt_fail_read_32562 aes_encrypt_fail_read 3 32562 NULL
-+pnp_mem_len_32584 pnp_mem_len 0 32584 NULL
+mem_swapout_entry_32586 mem_swapout_entry 3 32586 NULL
+read_file_beacon_32595 read_file_beacon 3 32595 NULL
+ieee80211_if_read_dropped_frames_congestion_32603 ieee80211_if_read_dropped_frames_congestion 3 32603 NULL
+sys_set_mempolicy_32608 sys_set_mempolicy 3 32608 NULL
-+cfg80211_roamed_32632 cfg80211_roamed 5-7 32632 NULL
++__iter_shared_inline_ref_32610 __iter_shared_inline_ref 0 32610 NULL
++irda_recvmsg_dgram_32631 irda_recvmsg_dgram 4 32631 NULL
++cfg80211_roamed_32632 cfg80211_roamed 7-5 32632 NULL
+ieee80211_hdrlen_32637 ieee80211_hdrlen 0 32637 NULL
+ite_decode_bytes_32642 ite_decode_bytes 3 32642 NULL
+kvmalloc_32646 kvmalloc 1 32646 NULL
+ib_sg_dma_len_32649 ib_sg_dma_len 0 32649 NULL
-+__kmalloc_section_memmap_32651 __kmalloc_section_memmap 1 32651 NULL
-+generic_readlink_32654 generic_readlink 3 32654 NULL
++generic_readlink_32654 generic_readlink 3 32654 NULL nohasharray
++ftrace_startup_32654 ftrace_startup 0 32654 &generic_readlink_32654
+move_addr_to_kernel_32673 move_addr_to_kernel 2 32673 NULL
-+snd_hwdep_ioctl_compat_32736 snd_hwdep_ioctl_compat 3 32736 NULL
++apei_res_add_32674 apei_res_add 0 32674 NULL
++rt2x00debug_read_queue_dump_32712 rt2x00debug_read_queue_dump 3 32712 NULL
++slhc_remember_32741 slhc_remember 3-0 32741 NULL
+megasas_change_queue_depth_32747 megasas_change_queue_depth 2 32747 NULL
+stats_read_ul_32751 stats_read_ul 3 32751 NULL
-+tty_compat_ioctl_32761 tty_compat_ioctl 3 32761 NULL
++write_file_disable_ani_32761 write_file_disable_ani 3 32761 NULL
+sctp_tsnmap_grow_32784 sctp_tsnmap_grow 2 32784 NULL
++ocfs2_read_inode_block_full_32790 ocfs2_read_inode_block_full 0 32790 NULL
+firmwareUpload_32794 firmwareUpload 3 32794 NULL
+get_register_page_interruptible_32809 get_register_page_interruptible 5 32809 NULL
+orig_node_add_if_32833 orig_node_add_if 2 32833 NULL
-+vga_rseq_32848 vga_rseq 0 32848 NULL
++nlmsg_validate_32861 nlmsg_validate 2 32861 NULL
+new_tape_buffer_32866 new_tape_buffer 2 32866 NULL
+io_apic_setup_irq_pin_32868 io_apic_setup_irq_pin 1 32868 NULL
++blkio_fill_stat_32874 blkio_fill_stat 2 32874 NULL
++vp702x_usb_inout_cmd_32884 vp702x_usb_inout_cmd 4-6 32884 NULL
+zlib_inflate_workspacesize_32927 zlib_inflate_workspacesize 0 32927 NULL
+irq_reserve_irqs_32946 irq_reserve_irqs 1-2 32946 NULL
+ext4_valid_block_bitmap_32958 ext4_valid_block_bitmap 3 32958 NULL
-+arch_ptrace_32981 arch_ptrace 3 32981 NULL
+compat_filldir_32999 compat_filldir 3 32999 NULL
-+ext3_alloc_blocks_33007 ext3_alloc_blocks 3 33007 NULL
++ext3_alloc_blocks_33007 ext3_alloc_blocks 3-0 33007 NULL
++br_multicast_set_hash_max_33012 br_multicast_set_hash_max 2 33012 NULL
++snd_pcm_prepare_33036 snd_pcm_prepare 0 33036 NULL
++xfrm_mapping_msgsize_33044 xfrm_mapping_msgsize 0 33044 NULL
+ebt_compat_match_offset_33053 ebt_compat_match_offset 0-2 33053 NULL
+stats_dot11RTSSuccessCount_read_33065 stats_dot11RTSSuccessCount_read 3 33065 NULL
+sel_read_checkreqprot_33068 sel_read_checkreqprot 3 33068 NULL
+acl_permission_check_33083 acl_permission_check 0 33083 NULL
-+write_node_33121 write_node 4 33121 NULL
++ieee80211_fragment_33112 ieee80211_fragment 4 33112 NULL
+fb_sys_write_33130 fb_sys_write 3 33130 NULL
+nfs4_init_slot_table_33152 nfs4_init_slot_table 2 33152 NULL
+tun_get_user_33178 tun_get_user 3 33178 NULL
-+dataflash_read_fact_otp_33204 dataflash_read_fact_otp 2-3 33204 NULL
++dataflash_read_fact_otp_33204 dataflash_read_fact_otp 3-2 33204 NULL
+pp_read_33210 pp_read 3 33210 NULL
+xfs_file_aio_write_33234 xfs_file_aio_write 4 33234 NULL
++__vb2_wait_for_done_vb_33246 __vb2_wait_for_done_vb 0 33246 NULL
+snd_pcm_plug_client_size_33267 snd_pcm_plug_client_size 0-2 33267 NULL
+sched_find_first_bit_33270 sched_find_first_bit 0 33270 NULL
+cachefiles_cook_key_33274 cachefiles_cook_key 2 33274 NULL
-+mei_compat_ioctl_33275 mei_compat_ioctl 3 33275 NULL
-+security_genfs_sid_33277 security_genfs_sid 3 33277 NULL
++i915_gem_object_flush_fence_33304 i915_gem_object_flush_fence 0 33304 NULL
+mcs7830_get_reg_33308 mcs7830_get_reg 3 33308 NULL
+ceph_msgpool_init_33312 ceph_msgpool_init 3 33312 NULL
++vx_send_irq_dsp_33329 vx_send_irq_dsp 0 33329 NULL
++gsm_mux_rx_netchar_33336 gsm_mux_rx_netchar 3 33336 NULL
+joydev_ioctl_33343 joydev_ioctl 2 33343 NULL
+create_xattr_datum_33356 create_xattr_datum 5 33356 NULL
++pvscsi_allocate_sg_33357 pvscsi_allocate_sg 0 33357 NULL
+read_file_regidx_33370 read_file_regidx 3 33370 NULL
+ceph_osdc_writepages_33375 ceph_osdc_writepages 5 33375 NULL
++sctp_ulpevent_new_33377 sctp_ulpevent_new 1 33377 NULL
+ocfs2_quota_read_33382 ocfs2_quota_read 5 33382 NULL
+ieee80211_if_read_dropped_frames_no_route_33383 ieee80211_if_read_dropped_frames_no_route 3 33383 NULL
+scsi_varlen_cdb_length_33385 scsi_varlen_cdb_length 0 33385 NULL
-+ocfs2_allocate_unwritten_extents_33394 ocfs2_allocate_unwritten_extents 2-3 33394 NULL
++ocfs2_allocate_unwritten_extents_33394 ocfs2_allocate_unwritten_extents 3-2 33394 NULL
+snd_pcm_capture_ioctl1_33408 snd_pcm_capture_ioctl1 0 33408 NULL
+ufs_getfrag_block_33409 ufs_getfrag_block 2 33409 NULL
-+ubh_scanc_33436 ubh_scanc 0-4-3 33436 NULL
++filemap_fdatawrite_33415 filemap_fdatawrite 0 33415 NULL
++sys_dup3_33421 sys_dup3 2 33421 NULL
++ubh_scanc_33436 ubh_scanc 0-3-4 33436 NULL
+create_entry_33479 create_entry 2 33479 NULL
+ip_setsockopt_33487 ip_setsockopt 5 33487 NULL nohasharray
+elf_map_33487 elf_map 0-2 33487 &ip_setsockopt_33487
-+netxen_nic_hw_write_wx_128M_33488 netxen_nic_hw_write_wx_128M 2 33488 NULL
+ol_dqblk_chunk_off_33489 ol_dqblk_chunk_off 2 33489 NULL
+res_counter_read_33499 res_counter_read 4 33499 NULL
+fb_read_33506 fb_read 3 33506 NULL
@@ -106674,64 +107827,83 @@ index 0000000..6fcc08d
+inw_p_33668 inw_p 0 33668 NULL
+arp_hdr_len_33671 arp_hdr_len 0 33671 NULL
+rbd_alloc_coll_33678 rbd_alloc_coll 1 33678 NULL
-+compat_insnlist_33706 compat_insnlist 2 33706 NULL
+sys_keyctl_33708 sys_keyctl 4 33708 NULL nohasharray
+netlink_sendmsg_33708 netlink_sendmsg 4 33708 &sys_keyctl_33708
+get_free_de_33714 get_free_de 2 33714 NULL
+pvr2_stream_buffer_count_33719 pvr2_stream_buffer_count 2 33719 NULL
+ocfs2_extent_map_get_blocks_33720 ocfs2_extent_map_get_blocks 2 33720 NULL
++ocfs2_lock_allocators_move_extents_33723 ocfs2_lock_allocators_move_extents 0 33723 NULL
+__mutex_lock_interruptible_slowpath_33735 __mutex_lock_interruptible_slowpath 0 33735 NULL
++Read_hfc_33755 Read_hfc 0 33755 NULL
+hashtab_create_33769 hashtab_create 3 33769 NULL
+midibuf_message_length_33770 midibuf_message_length 0 33770 NULL
++i8042_create_aux_port_33777 i8042_create_aux_port 0 33777 NULL
+if_sdio_read_rx_len_33800 if_sdio_read_rx_len 0 33800 NULL
-+find_next_offset_33804 find_next_offset 3 33804 NULL nohasharray
++find_next_offset_33804 find_next_offset 3-0 33804 NULL nohasharray
+apei_estatus_len_33804 apei_estatus_len 0 33804 &find_next_offset_33804
-+sky2_rx_pad_33819 sky2_rx_pad 0 33819 NULL
-+usb_dump_endpoint_descriptor_33849 usb_dump_endpoint_descriptor 0 33849 NULL
++sky2_rx_pad_33819 sky2_rx_pad 0 33819 NULL nohasharray
++filter_write_33819 filter_write 3 33819 &sky2_rx_pad_33819
++ext4_journal_extend_33835 ext4_journal_extend 0 33835 NULL
++snd_pcm_action_nonatomic_33844 snd_pcm_action_nonatomic 0 33844 NULL
+get_user_pages_33908 get_user_pages 0 33908 NULL
+queue_logical_block_size_33918 queue_logical_block_size 0 33918 NULL
+max8649_read_device_33930 max8649_read_device 3 33930 NULL
+sel_read_avc_cache_threshold_33942 sel_read_avc_cache_threshold 3 33942 NULL
+lpfc_idiag_ctlacc_read_33943 lpfc_idiag_ctlacc_read 3 33943 NULL
+read_file_tgt_rx_stats_33944 read_file_tgt_rx_stats 3 33944 NULL
++ocfs2_create_new_meta_bhs_33955 ocfs2_create_new_meta_bhs 0 33955 NULL
++btrfs_delalloc_reserve_metadata_33963 btrfs_delalloc_reserve_metadata 0 33963 NULL
+vga_switcheroo_debugfs_write_33984 vga_switcheroo_debugfs_write 3 33984 NULL
-+__ntfs_malloc_34022 __ntfs_malloc 1 34022 NULL
++snd_interval_refine_33987 snd_interval_refine 0 33987 NULL
++uio_dev_add_attributes_34003 uio_dev_add_attributes 0 34003 NULL
++select_size_34004 select_size 0 34004 NULL
++lbs_lowrssi_write_34025 lbs_lowrssi_write 3 34025 NULL
+ppp_write_34034 ppp_write 3 34034 NULL
-+tty_insert_flip_string_34042 tty_insert_flip_string 3 34042 NULL
++tty_insert_flip_string_34042 tty_insert_flip_string 3-0 34042 NULL
+__domain_flush_pages_34045 __domain_flush_pages 2-3 34045 NULL
-+compat_hdio_ioctl_34088 compat_hdio_ioctl 4 34088 NULL
+islpci_mgt_transmit_34133 islpci_mgt_transmit 5 34133 NULL
-+ttm_dma_page_pool_free_34135 ttm_dma_page_pool_free 2 34135 NULL
++mtu2blksize_34139 mtu2blksize 0 34139 NULL
++ocfs2_xattr_list_entry_34165 ocfs2_xattr_list_entry 0 34165 NULL
++skb_to_sgvec_34171 skb_to_sgvec 0 34171 NULL
+iwl_legacy_dbgfs_tx_queue_read_34192 iwl_legacy_dbgfs_tx_queue_read 3 34192 NULL
+mtd_write_34207 mtd_write 3 34207 NULL
++setup_nodes_for_search_34248 setup_nodes_for_search 0 34248 NULL
+bl_pipe_downcall_34264 bl_pipe_downcall 3 34264 NULL
-+rw_copy_check_uvector_34271 rw_copy_check_uvector 3 34271 NULL
++ocfs2_dlm_lock_34265 ocfs2_dlm_lock 0 34265 NULL
++rw_copy_check_uvector_34271 rw_copy_check_uvector 3-0 34271 NULL
++device_private_init_34279 device_private_init 0 34279 NULL
+zone_spanned_pages_in_node_34299 zone_spanned_pages_in_node 0 34299 NULL
+iov_iter_single_seg_count_34326 iov_iter_single_seg_count 0 34326 NULL nohasharray
+pcpu_need_to_extend_34326 pcpu_need_to_extend 0 34326 &iov_iter_single_seg_count_34326
+crypto_ablkcipher_ivsize_34363 crypto_ablkcipher_ivsize 0 34363 NULL
-+rngapi_reset_34366 rngapi_reset 3 34366 NULL
-+reiserfs_resize_34377 reiserfs_resize 2 34377 NULL
++rngapi_reset_34366 rngapi_reset 3 34366 NULL nohasharray
++p54_alloc_skb_34366 p54_alloc_skb 3 34366 &rngapi_reset_34366
+ea_read_34378 ea_read 0 34378 NULL
+av7110_vbi_write_34384 av7110_vbi_write 3 34384 NULL
+usbvision_v4l2_read_34386 usbvision_v4l2_read 3 34386 NULL
+read_rbu_image_type_34387 read_rbu_image_type 6 34387 NULL
+ivtv_read_pos_34400 ivtv_read_pos 3 34400 NULL
++sctp_make_heartbeat_ack_34411 sctp_make_heartbeat_ack 4 34411 NULL
+nl80211_send_disassoc_34424 nl80211_send_disassoc 4 34424 NULL
-+usbtest_alloc_urb_34446 usbtest_alloc_urb 3-5 34446 NULL
++usbtest_alloc_urb_34446 usbtest_alloc_urb 5-3 34446 NULL
++sctp_make_abort_34459 sctp_make_abort 3 34459 NULL
+mwifiex_regrdwr_read_34472 mwifiex_regrdwr_read 3 34472 NULL
+line6_dumpreq_init_34473 line6_dumpreq_init 3 34473 NULL
+skcipher_sndbuf_34476 skcipher_sndbuf 0 34476 NULL
+i2o_parm_field_get_34477 i2o_parm_field_get 5 34477 NULL
++ocfs2_block_group_clear_bits_34484 ocfs2_block_group_clear_bits 0 34484 NULL
+security_inode_permission_34488 security_inode_permission 0 34488 NULL
++snd_pcm_hw_param_value_34525 snd_pcm_hw_param_value 0 34525 NULL
+alloc_buf_34532 alloc_buf 1 34532 NULL
+tracing_stats_read_34537 tracing_stats_read 3 34537 NULL
-+hugetlbfs_read_actor_34547 hugetlbfs_read_actor 2-5-4 34547 NULL
++hugetlbfs_read_actor_34547 hugetlbfs_read_actor 4-5-2-0 34547 NULL
++intel_alloc_coherent_34551 intel_alloc_coherent 2 34551 NULL
+dbBackSplit_34561 dbBackSplit 0 34561 NULL
+alloc_ieee80211_rsl_34564 alloc_ieee80211_rsl 1 34564 NULL
+velocity_rx_copy_34583 velocity_rx_copy 2 34583 NULL
+init_send_hfcd_34586 init_send_hfcd 1 34586 NULL
+inet6_ifla6_size_34591 inet6_ifla6_size 0 34591 NULL
++iwl_legacy_dbgfs_disable_ht40_write_34605 iwl_legacy_dbgfs_disable_ht40_write 3 34605 NULL
+__jffs2_ref_totlen_34609 __jffs2_ref_totlen 0 34609 NULL
+__cfg80211_disconnected_34622 __cfg80211_disconnected 3 34622 NULL
+cnic_alloc_dma_34641 cnic_alloc_dma 3 34641 NULL
@@ -106739,41 +107911,55 @@ index 0000000..6fcc08d
+alloc_irq_and_cfg_at_34706 alloc_irq_and_cfg_at 1 34706 NULL
+ieee80211_if_read_num_sta_ps_34722 ieee80211_if_read_num_sta_ps 3 34722 NULL
+platform_list_read_file_34734 platform_list_read_file 3 34734 NULL
-+reg_w_ixbuf_34736 reg_w_ixbuf 4 34736 NULL
++reg_w_ixbuf_34736 reg_w_ixbuf 4 34736 NULL nohasharray
++fib_rule_nlmsg_size_34736 fib_rule_nlmsg_size 0 34736 &reg_w_ixbuf_34736
++sctp_make_datafrag_empty_34737 sctp_make_datafrag_empty 3 34737 NULL
++solos_param_store_34755 solos_param_store 4 34755 NULL
++device_add_34766 device_add 0 34766 NULL
+qib_cdev_init_34778 qib_cdev_init 1 34778 NULL
-+__copy_in_user_34790 __copy_in_user 3 34790 NULL
+tipc_log_resize_34803 tipc_log_resize 1 34803 NULL
+drbd_get_max_capacity_34804 drbd_get_max_capacity 0 34804 NULL
-+sep_prepare_input_dma_table_34832 sep_prepare_input_dma_table 2-3 34832 NULL
++sep_prepare_input_dma_table_34832 sep_prepare_input_dma_table 3-2 34832 NULL
++ext4_groupinfo_create_slab_34837 ext4_groupinfo_create_slab 1 34837 NULL
+b43_debugfs_write_34838 b43_debugfs_write 3 34838 NULL
-+bl_mark_for_commit_34852 bl_mark_for_commit 2-3 34852 NULL
++bl_mark_for_commit_34852 bl_mark_for_commit 3-2 34852 NULL
+acpi_system_write_wakeup_device_34853 acpi_system_write_wakeup_device 3 34853 NULL
+usb_serial_generic_prepare_write_buffer_34857 usb_serial_generic_prepare_write_buffer 3 34857 NULL
+ieee80211_if_write_34894 ieee80211_if_write 3 34894 NULL
-+compat_put_uint_34905 compat_put_uint 1 34905 NULL
++write_msg_34916 write_msg 3 34916 NULL
++iwl_dbgfs_force_reset_write_34930 iwl_dbgfs_force_reset_write 3 34930 NULL
++snd_info_entry_read_34938 snd_info_entry_read 3 34938 NULL
+skb_gro_header_slow_34958 skb_gro_header_slow 2 34958 NULL nohasharray
+i2c_transfer_34958 i2c_transfer 0 34958 &skb_gro_header_slow_34958
+Realloc_34961 Realloc 2 34961 NULL
++iwl_legacy_dbgfs_missed_beacon_write_34966 iwl_legacy_dbgfs_missed_beacon_write 3 34966 NULL
+l2cap_skbuff_fromiovec_35003 l2cap_skbuff_fromiovec 4-3 35003 NULL
+sisusb_copy_memory_35016 sisusb_copy_memory 4 35016 NULL
++snd_pcm_hw_params_35020 snd_pcm_hw_params 0 35020 NULL
++generic_file_llseek_size_35024 generic_file_llseek_size 2 35024 NULL
++paranoid_check_peb_ec_hdr_35027 paranoid_check_peb_ec_hdr 0 35027 NULL
+coda_psdev_read_35029 coda_psdev_read 3 35029 NULL
++xfs_rtallocate_extent_35052 xfs_rtallocate_extent 2-4-8 35052 NULL
+btmrvl_gpiogap_write_35053 btmrvl_gpiogap_write 3 35053 NULL
++ext4_split_unwritten_extents_35063 ext4_split_unwritten_extents 0 35063 NULL
+store_ifalias_35088 store_ifalias 4 35088 NULL
+__kfifo_uint_must_check_helper_35097 __kfifo_uint_must_check_helper 0-1 35097 NULL
+capi_write_35104 capi_write 3 35104 NULL
+ide_settings_proc_write_35110 ide_settings_proc_write 3 35110 NULL
-+pointer_35138 pointer 0 35138 NULL
++ceph_osdc_start_request_35122 ceph_osdc_start_request 0 35122 NULL
+gntdev_alloc_map_35145 gntdev_alloc_map 2 35145 NULL
+iscsi_conn_setup_35159 iscsi_conn_setup 2 35159 NULL
+ieee80211_if_read_bssid_35161 ieee80211_if_read_bssid 3 35161 NULL
+bat_ogm_aggr_packet_35202 bat_ogm_aggr_packet 3 35202 NULL
+unix_stream_recvmsg_35210 unix_stream_recvmsg 4 35210 NULL
+_osd_req_alist_elem_size_35216 _osd_req_alist_elem_size 0-2 35216 NULL
-+striped_read_35218 striped_read 2-8-0-3 35218 NULL nohasharray
++striped_read_35218 striped_read 0-3-2-8 35218 NULL nohasharray
+security_key_getsecurity_35218 security_key_getsecurity 0 35218 &striped_read_35218
+video_register_device_no_warn_35226 video_register_device_no_warn 3 35226 NULL
++may_commit_transaction_35234 may_commit_transaction 0 35234 NULL
+set_fd_set_35249 set_fd_set 1 35249 NULL
+ioapic_setup_resources_35255 ioapic_setup_resources 1 35255 NULL
++jbd2_journal_get_write_access_35263 jbd2_journal_get_write_access 0 35263 NULL
+dma_show_regs_35266 dma_show_regs 3 35266 NULL
+irda_recvmsg_stream_35280 irda_recvmsg_stream 4 35280 NULL
+i2o_block_end_request_35282 i2o_block_end_request 3 35282 NULL
@@ -106782,117 +107968,146 @@ index 0000000..6fcc08d
+tracing_read_pipe_35312 tracing_read_pipe 3 35312 NULL
+sys_setsockopt_35320 sys_setsockopt 5 35320 NULL
+new_bind_ctl_35324 new_bind_ctl 2 35324 NULL
-+fallback_on_nodma_alloc_35332 fallback_on_nodma_alloc 2 35332 NULL
+pskb_network_may_pull_35336 pskb_network_may_pull 2 35336 NULL
++mlx4_alloc_hwq_res_35339 mlx4_alloc_hwq_res 3 35339 NULL
+hpi_alloc_control_cache_35351 hpi_alloc_control_cache 1 35351 NULL
+compat_filldir64_35354 compat_filldir64 3 35354 NULL
+tt_update_orig_35361 tt_update_orig 4 35361 NULL
-+test_empty_cb_35410 test_empty_cb 3 35410 NULL
++read_kmem_35372 read_kmem 3 35372 NULL
++ocfs2_journal_access_di_35393 ocfs2_journal_access_di 0 35393 NULL
+rawv6_send_hdrinc_35425 rawv6_send_hdrinc 3 35425 NULL
+buffer_to_user_35439 buffer_to_user 3 35439 NULL
+i915_wedged_read_35474 i915_wedged_read 3 35474 NULL
-+do_atm_ioctl_35519 do_atm_ioctl 3 35519 NULL
+async_setkey_35521 async_setkey 3 35521 NULL
+__filemap_fdatawrite_range_35528 __filemap_fdatawrite_range 0 35528 NULL
+iwl_dbgfs_bt_traffic_read_35534 iwl_dbgfs_bt_traffic_read 3 35534 NULL
+rxpipe_tx_xfr_host_int_trig_rx_data_read_35538 rxpipe_tx_xfr_host_int_trig_rx_data_read 3 35538 NULL
+ibnl_put_attr_35541 ibnl_put_attr 3 35541 NULL
+ieee80211_if_write_smps_35550 ieee80211_if_write_smps 3 35550 NULL
++vb2_dqbuf_35559 vb2_dqbuf 0 35559 NULL
++sysfs_create_subdir_35567 sysfs_create_subdir 0 35567 NULL
++xfs_mount_log_sb_35576 xfs_mount_log_sb 2 35576 NULL
+ext2_acl_from_disk_35580 ext2_acl_from_disk 2 35580 NULL
-+security_compute_av_35608 security_compute_av 3 35608 NULL
-+rbd_req_sync_read_35615 rbd_req_sync_read 5-6 35615 NULL
++ReadZReg_35604 ReadZReg 0 35604 NULL
++rbd_req_sync_read_35615 rbd_req_sync_read 6-5 35615 NULL
+kernel_readv_35617 kernel_readv 3 35617 NULL
++pci_request_regions_35635 pci_request_regions 0 35635 NULL
+scrub_stripe_35637 scrub_stripe 4-3 35637 NULL
+spi_register_board_info_35651 spi_register_board_info 2 35651 NULL
+store_debug_level_35652 store_debug_level 3 35652 NULL
++rdmaltWithLock_35669 rdmaltWithLock 0 35669 NULL
+compat_sys_kexec_load_35674 compat_sys_kexec_load 2 35674 NULL
-+dm_table_create_35687 dm_table_create 3 35687 NULL
+rds_page_copy_user_35691 rds_page_copy_user 4 35691 NULL
-+pci_enable_sriov_35745 pci_enable_sriov 2 35745 NULL
++btrfs_commit_transaction_35725 btrfs_commit_transaction 0 35725 NULL
++fixup_low_keys_35734 fixup_low_keys 0 35734 NULL
++ext4_truncate_restart_trans_35750 ext4_truncate_restart_trans 0 35750 NULL
+iwl_dbgfs_disable_ht40_read_35761 iwl_dbgfs_disable_ht40_read 3 35761 NULL
++send_wqe_overhead_35780 send_wqe_overhead 0 35780 NULL
+udf_alloc_i_data_35786 udf_alloc_i_data 2 35786 NULL
+store_fan1_input_35793 store_fan1_input 4 35793 NULL
+read_file_stations_35795 read_file_stations 3 35795 NULL
+pvr2_hdw_cpufw_get_35824 pvr2_hdw_cpufw_get 0-4-2 35824 NULL
++vx_query_hbuffer_size_35859 vx_query_hbuffer_size 0 35859 NULL
+mthca_buf_alloc_35861 mthca_buf_alloc 2 35861 NULL
-+fls64_35862 fls64 0 35862 NULL
++fls64_35862 fls64 0-1 35862 NULL
++wait_mgsl_event_35872 wait_mgsl_event 0 35872 NULL
+kvm_dirty_bitmap_bytes_35886 kvm_dirty_bitmap_bytes 0 35886 NULL
+ieee80211_if_fmt_dot11MeshRetryTimeout_35890 ieee80211_if_fmt_dot11MeshRetryTimeout 3 35890 NULL
+uwb_rc_cmd_done_35892 uwb_rc_cmd_done 4 35892 NULL
++tcp_mark_head_lost_35895 tcp_mark_head_lost 2 35895 NULL
++igmpv3_newpack_35912 igmpv3_newpack 2 35912 NULL
+kernel_setsockopt_35913 kernel_setsockopt 5 35913 NULL
-+vol_cdev_compat_ioctl_35923 vol_cdev_compat_ioctl 3 35923 NULL
-+au_kzrealloc_35935 au_kzrealloc 3 35935 NULL
++dccp_listen_start_35918 dccp_listen_start 2 35918 NULL
++balance_node_right_35920 balance_node_right 0 35920 NULL
+put_cmsg_compat_35937 put_cmsg_compat 4 35937 NULL
+ceph_buffer_new_35974 ceph_buffer_new 1 35974 NULL
+acl_alloc_35979 acl_alloc 1 35979 NULL
++device_add_class_symlinks_35985 device_add_class_symlinks 0 35985 NULL
+generic_file_aio_read_35987 generic_file_aio_read 0 35987 NULL
+koneplus_sysfs_write_35993 koneplus_sysfs_write 6 35993 NULL
++write_file_antenna_35998 write_file_antenna 3 35998 NULL
++console_store_36007 console_store 4 36007 NULL
++i965_write_fence_reg_36017 i965_write_fence_reg 0 36017 NULL
+sys_init_module_36047 sys_init_module 2 36047 NULL
+gpio_power_read_36059 gpio_power_read 3 36059 NULL
++snd_pcm_playback_hw_avail_36061 snd_pcm_playback_hw_avail 0 36061 NULL
+write_emulate_36065 write_emulate 2-4 36065 NULL
++stack_max_size_write_36068 stack_max_size_write 3 36068 NULL
+ieee80211_if_fmt_peer_36071 ieee80211_if_fmt_peer 3 36071 NULL
-+ext3_new_blocks_36073 ext3_new_blocks 3 36073 NULL
++ext3_new_blocks_36073 ext3_new_blocks 3-0 36073 NULL
+ieee80211_if_write_tsf_36077 ieee80211_if_write_tsf 3 36077 NULL
+snd_pcm_plug_read_transfer_36080 snd_pcm_plug_read_transfer 0-3 36080 NULL
++genlmsg_new_36094 genlmsg_new 1 36094 NULL
+vga_arb_write_36112 vga_arb_write 3 36112 NULL
-+compat_ptrace_request_36131 compat_ptrace_request 3-4 36131 NULL
-+vmalloc_exec_36132 vmalloc_exec 1 36132 NULL
++rx_enable_36125 rx_enable 0 36125 NULL
+iwl_trans_txq_alloc_36147 iwl_trans_txq_alloc 3 36147 NULL
-+alloc_vm_area_36149 alloc_vm_area 1 36149 NULL
+b1_alloc_card_36155 b1_alloc_card 1 36155 NULL
+btrfs_file_extent_inline_len_36158 btrfs_file_extent_inline_len 0 36158 NULL
+snd_korg1212_copy_from_36169 snd_korg1212_copy_from 6 36169 NULL
+FTL_Get_Block_Table_Flash_Size_Bytes_36187 FTL_Get_Block_Table_Flash_Size_Bytes 0 36187 NULL
++__ip_append_data_36191 __ip_append_data 7-8 36191 NULL
+ubifs_read_nnode_36221 ubifs_read_nnode 0 36221 NULL
+atomic_stats_read_36228 atomic_stats_read 3 36228 NULL
+viafb_iga1_odev_proc_write_36241 viafb_iga1_odev_proc_write 3 36241 NULL
+compat_sys_mbind_36256 compat_sys_mbind 5 36256 NULL
+usb_buffer_alloc_36276 usb_buffer_alloc 2 36276 NULL
++modem_input_wait_36278 modem_input_wait 0 36278 NULL
+mangle_sdp_packet_36279 mangle_sdp_packet 9 36279 NULL
+codec_reg_read_file_36280 codec_reg_read_file 3 36280 NULL
+lpfc_debugfs_dif_err_read_36303 lpfc_debugfs_dif_err_read 3 36303 NULL
+ad7879_spi_xfer_36311 ad7879_spi_xfer 3 36311 NULL
+fat_compat_ioctl_filldir_36328 fat_compat_ioctl_filldir 3 36328 NULL
+jbd2_journal_init_revoke_table_36336 jbd2_journal_init_revoke_table 1 36336 NULL
-+v9fs_file_readn_36353 v9fs_file_readn 4 36353 NULL nohasharray
-+xz_dec_lzma2_create_36353 xz_dec_lzma2_create 2 36353 &v9fs_file_readn_36353
++qla4xxx_session_create_36350 qla4xxx_session_create 2 36350 NULL
++ath6kl_regwrite_write_36351 ath6kl_regwrite_write 3 36351 NULL
++v9fs_file_readn_36353 v9fs_file_readn 4 36353 NULL
+to_sector_36361 to_sector 0-1 36361 NULL
+mtd_do_writeoob_36373 mtd_do_writeoob 4 36373 NULL
+vring_new_virtqueue_36374 vring_new_virtqueue 1 36374 NULL
+tunables_read_36385 tunables_read 3 36385 NULL
-+afs_alloc_flat_call_36399 afs_alloc_flat_call 2-3 36399 NULL
++afs_alloc_flat_call_36399 afs_alloc_flat_call 3-2 36399 NULL
++sierra_write_36402 sierra_write 4 36402 NULL
++sys_vm86_36421 sys_vm86 2 36421 NULL
++rtnl_link_get_size_36436 rtnl_link_get_size 0 36436 NULL
+sctp_tsnmap_init_36446 sctp_tsnmap_init 2 36446 NULL
+alloc_etherdev_mqs_36450 alloc_etherdev_mqs 1 36450 NULL
+b43_nphy_load_samples_36481 b43_nphy_load_samples 3 36481 NULL
++ip6_append_data_36490 ip6_append_data 4-5 36490 NULL
++cmd_loop_36491 cmd_loop 0 36491 NULL
+iwl_legacy_dbgfs_power_save_status_read_36492 iwl_legacy_dbgfs_power_save_status_read 3 36492 NULL
+__hwahc_op_set_ptk_36510 __hwahc_op_set_ptk 5 36510 NULL
+mcam_v4l_read_36513 mcam_v4l_read 3 36513 NULL
+ieee80211_if_read_fwded_frames_36520 ieee80211_if_read_fwded_frames 3 36520 NULL
+crypto_aead_authsize_36537 crypto_aead_authsize 0 36537 NULL
+cpu_type_read_36540 cpu_type_read 3 36540 NULL
-+__kfifo_to_user_36555 __kfifo_to_user 3 36555 NULL nohasharray
++__kfifo_to_user_36555 __kfifo_to_user 3-0 36555 NULL nohasharray
+macvtap_do_read_36555 macvtap_do_read 4 36555 &__kfifo_to_user_36555
-+ssb_bus_scan_36578 ssb_bus_scan 2 36578 NULL
+__erst_read_36579 __erst_read 0 36579 NULL
+put_cmsg_36589 put_cmsg 4 36589 NULL
+pcnet32_realloc_rx_ring_36598 pcnet32_realloc_rx_ring 3 36598 NULL
+fat_ioctl_filldir_36621 fat_ioctl_filldir 3 36621 NULL
+vxge_config_vpaths_36636 vxge_config_vpaths 0 36636 NULL
-+format_decode_36638 format_decode 0 36638 NULL
+cxio_hal_rqtpool_alloc_36648 cxio_hal_rqtpool_alloc 2 36648 NULL nohasharray
+lpfc_idiag_extacc_alloc_get_36648 lpfc_idiag_extacc_alloc_get 0-3 36648 &cxio_hal_rqtpool_alloc_36648
++perf_calculate_period_36662 perf_calculate_period 2-3 36662 NULL
+osd_req_list_collection_objects_36664 osd_req_list_collection_objects 5 36664 NULL
+iscsi_host_alloc_36671 iscsi_host_alloc 2 36671 NULL
-+ptr_to_compat_36680 ptr_to_compat 0 36680 NULL
+ext4_mb_discard_group_preallocations_36685 ext4_mb_discard_group_preallocations 2 36685 NULL
++get_txidle_36698 get_txidle 0 36698 NULL
++gsmtty_write_36702 gsmtty_write 3 36702 NULL
++sched_clock_36717 sched_clock 0 36717 NULL
++ocfs2_rotate_tree_right_36723 ocfs2_rotate_tree_right 0 36723 NULL
+saa7134_i2c_eeprom_36729 saa7134_i2c_eeprom 3 36729 NULL
+extract_icmp6_fields_36732 extract_icmp6_fields 2 36732 NULL
-+snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4 36740 NULL
-+cxgbi_device_register_36746 cxgbi_device_register 1-2 36746 NULL
++snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4-0 36740 NULL
++cxgbi_device_register_36746 cxgbi_device_register 2-1 36746 NULL
++i915_gem_evict_inactive_36767 i915_gem_evict_inactive 0 36767 NULL
+ip4ip6_err_36772 ip4ip6_err 5 36772 NULL
++llc_mac_header_len_36776 llc_mac_header_len 0 36776 NULL
+proc_fault_inject_read_36802 proc_fault_inject_read 3 36802 NULL
+do_dmabuf_dirty_sou_36807 do_dmabuf_dirty_sou 7 36807 NULL
+hiddev_ioctl_36816 hiddev_ioctl 2 36816 NULL
++ocfs2_journal_access_rb_36823 ocfs2_journal_access_rb 0 36823 NULL
+int_hardware_entry_36833 int_hardware_entry 3 36833 NULL
+fc_change_queue_depth_36841 fc_change_queue_depth 2 36841 NULL
+keyctl_describe_key_36853 keyctl_describe_key 3 36853 NULL
@@ -106901,182 +108116,236 @@ index 0000000..6fcc08d
+ib_ucm_alloc_data_36885 ib_ucm_alloc_data 3 36885 NULL
+selinux_inode_notifysecctx_36896 selinux_inode_notifysecctx 3 36896 NULL
+OS_kmalloc_36909 OS_kmalloc 1 36909 NULL
++genlmsg_total_size_36938 genlmsg_total_size 0-1 36938 NULL
+crypto_blkcipher_ivsize_36944 crypto_blkcipher_ivsize 0 36944 NULL
-+write_leb_36957 write_leb 5 36957 NULL
-+_copy_from_user_36959 _copy_from_user 3 36959 NULL
++div_u64_36951 div_u64 0 36951 NULL
++write_leb_36957 write_leb 0 36957 NULL
++call_usermodehelper_exec_36960 call_usermodehelper_exec 0 36960 NULL
+ntfs_external_attr_find_36963 ntfs_external_attr_find 0 36963 NULL
+sparse_early_mem_maps_alloc_node_36971 sparse_early_mem_maps_alloc_node 4 36971 NULL
+setxattr_37006 setxattr 4 37006 NULL
++ondemand_readahead_37015 ondemand_readahead 6-5 37015 NULL
++command_file_read_37038 command_file_read 3 37038 NULL
++em28xx_gpio_set_37040 em28xx_gpio_set 0 37040 NULL
+ieee80211_if_read_drop_unencrypted_37053 ieee80211_if_read_drop_unencrypted 3 37053 NULL
++find_next_chunk_37067 find_next_chunk 0 37067 NULL
+parse_command_37079 parse_command 2 37079 NULL
+snd_hda_get_conn_list_37132 snd_hda_get_conn_list 0 37132 NULL
++xfrm_expire_msgsize_37133 xfrm_expire_msgsize 0 37133 NULL
+msg_word_37164 msg_word 0 37164 NULL
++BeceemNVMRead_37166 BeceemNVMRead 0 37166 NULL
+can_set_xattr_37182 can_set_xattr 4 37182 NULL
+store_wimax_37196 store_wimax 4 37196 NULL
++vcc_recvmsg_37198 vcc_recvmsg 4 37198 NULL
++sysfs_add_file_37200 sysfs_add_file 0 37200 NULL
+crypto_shash_descsize_37212 crypto_shash_descsize 0 37212 NULL
+uapsd_queues_read_37217 uapsd_queues_read 3 37217 NULL
+regmap_access_read_file_37223 regmap_access_read_file 3 37223 NULL
+__do_replace_37227 __do_replace 5 37227 NULL
++produce_free_peb_37232 produce_free_peb 0 37232 NULL
++ctnetlink_secctx_size_37236 ctnetlink_secctx_size 0 37236 NULL
++ReadLEDInformationFromEEPROM_37247 ReadLEDInformationFromEEPROM 0 37247 NULL
++BeceemFlashBulkWrite_37255 BeceemFlashBulkWrite 0 37255 NULL
+prot_queue_del_37258 prot_queue_del 0 37258 NULL
+exofs_max_io_pages_37263 exofs_max_io_pages 0-2 37263 NULL
-+c101_run_37279 c101_run 2 37279 NULL
+srp_target_alloc_37288 srp_target_alloc 3 37288 NULL
++request_threaded_irq_37303 request_threaded_irq 0 37303 NULL
+jffs2_write_dirent_37311 jffs2_write_dirent 5 37311 NULL
+send_msg_37323 send_msg 4 37323 NULL
++brcmf_sdbrcm_membytes_37324 brcmf_sdbrcm_membytes 3-5 37324 NULL
+scsi_mode_select_37330 scsi_mode_select 6 37330 NULL
+rxrpc_server_sendmsg_37331 rxrpc_server_sendmsg 4 37331 NULL
-+flex_array_put_37350 flex_array_put 2 37350 NULL
++nf_bridge_pad_37351 nf_bridge_pad 0 37351 NULL
+security_inode_getsecurity_37354 security_inode_getsecurity 0 37354 NULL
-+iommu_num_pages_37391 iommu_num_pages 0-1-3-2 37391 NULL
++iommu_num_pages_37391 iommu_num_pages 0-2-3-1 37391 NULL
+sys_getxattr_37418 sys_getxattr 4 37418 NULL
+hci_sock_sendmsg_37420 hci_sock_sendmsg 4 37420 NULL
+acpi_os_allocate_zeroed_37422 acpi_os_allocate_zeroed 1 37422 NULL nohasharray
+find_next_bit_37422 find_next_bit 0-2-3 37422 &acpi_os_allocate_zeroed_37422
-+tty_insert_flip_string_fixed_flag_37428 tty_insert_flip_string_fixed_flag 4 37428 NULL
-+iwl_print_last_event_logs_37433 iwl_print_last_event_logs 0-7-9 37433 NULL
++ocfs2_insert_path_37425 ocfs2_insert_path 0 37425 NULL
++tty_insert_flip_string_fixed_flag_37428 tty_insert_flip_string_fixed_flag 4-0 37428 NULL
++iwl_print_last_event_logs_37433 iwl_print_last_event_logs 7-9-0 37433 NULL
+tcp_established_options_37450 tcp_established_options 0 37450 NULL
+cmd_input_size_37457 cmd_input_size 0-1 37457 NULL
+ufs_data_ptr_to_cpu_37475 ufs_data_ptr_to_cpu 0 37475 NULL
+get_est_timing_37484 get_est_timing 0 37484 NULL
+kmem_realloc_37489 kmem_realloc 2 37489 NULL
-+security_validate_transition_37494 security_validate_transition 4 37494 NULL
-+kvm_vcpu_compat_ioctl_37500 kvm_vcpu_compat_ioctl 3 37500 NULL
-+vmalloc_32_user_37519 vmalloc_32_user 1 37519 NULL
++xz_dec_test_write_37527 xz_dec_test_write 3 37527 NULL
+hdr_size_37536 hdr_size 0 37536 NULL
+xhci_alloc_streams_37586 xhci_alloc_streams 5 37586 NULL
++ocfs2_add_branch_37588 ocfs2_add_branch 0 37588 NULL
++alloc_descs_37593 alloc_descs 0-1 37593 NULL
++qla2x00_debounce_register_37597 qla2x00_debounce_register 0 37597 NULL
++btrfs_write_and_wait_marked_extents_37604 btrfs_write_and_wait_marked_extents 0 37604 NULL
+kvm_read_guest_page_mmu_37611 kvm_read_guest_page_mmu 6 37611 NULL
++ocfs2_split_refcount_rec_37622 ocfs2_split_refcount_rec 0 37622 NULL
+alloc_fd_37637 alloc_fd 1 37637 NULL
++tcp_dma_try_early_copy_37651 tcp_dma_try_early_copy 3 37651 NULL
+bio_copy_user_iov_37660 bio_copy_user_iov 4 37660 NULL
+rfcomm_sock_sendmsg_37661 rfcomm_sock_sendmsg 4 37661 NULL nohasharray
+vmw_framebuffer_dmabuf_dirty_37661 vmw_framebuffer_dmabuf_dirty 6 37661 &rfcomm_sock_sendmsg_37661
+iwl_legacy_dbgfs_rxon_filter_flags_read_37666 iwl_legacy_dbgfs_rxon_filter_flags_read 3 37666 NULL
+regmap_map_read_file_37685 regmap_map_read_file 3 37685 NULL
+__le32_to_cpup_37702 __le32_to_cpup 0 37702 NULL
++netxen_validate_ringparam_37740 netxen_validate_ringparam 1-2-3 37740 NULL
+read_enabled_file_bool_37744 read_enabled_file_bool 3 37744 NULL
-+ocfs2_duplicate_clusters_by_jbd_37749 ocfs2_duplicate_clusters_by_jbd 6-4-5 37749 NULL
++ocfs2_duplicate_clusters_by_jbd_37749 ocfs2_duplicate_clusters_by_jbd 5-4-6 37749 NULL
+ocfs2_control_cfu_37750 ocfs2_control_cfu 2 37750 NULL
+ipath_cdev_init_37752 ipath_cdev_init 1 37752 NULL
+dccp_setsockopt_cscov_37766 dccp_setsockopt_cscov 2 37766 NULL
+smk_read_logging_37804 smk_read_logging 3 37804 NULL
+deny_write_access_37813 deny_write_access 0 37813 NULL
-+fallback_alloc_37821 fallback_alloc 0 37821 NULL
-+slab_get_obj_37825 slab_get_obj 0 37825 NULL
-+bitmap_find_next_zero_area_37827 bitmap_find_next_zero_area 2-3-5-4 37827 NULL
++bitmap_find_next_zero_area_37827 bitmap_find_next_zero_area 2-3-0-5-4 37827 NULL
++jbd2_journal_get_undo_access_37837 jbd2_journal_get_undo_access 0 37837 NULL
+o2hb_debug_read_37851 o2hb_debug_read 3 37851 NULL
+xfs_dir2_block_to_sf_37868 xfs_dir2_block_to_sf 3 37868 NULL
+iwmct_fw_parser_init_37876 iwmct_fw_parser_init 4 37876 NULL
+sys_setxattr_37880 sys_setxattr 4 37880 NULL
++dvb_net_sec_37884 dvb_net_sec 3 37884 NULL
+tipc_link_send_sections_fast_37920 tipc_link_send_sections_fast 4 37920 NULL
++xfs_highbit32_37921 xfs_highbit32 0 37921 NULL
+pkt_alloc_packet_data_37928 pkt_alloc_packet_data 1 37928 NULL
+read_rbu_packet_size_37939 read_rbu_packet_size 6 37939 NULL
-+ext3_free_blocks_sb_37967 ext3_free_blocks_sb 3-4 37967 NULL
++write_file_bool_37957 write_file_bool 3 37957 NULL
++ext3_free_blocks_sb_37967 ext3_free_blocks_sb 4-3 37967 NULL
+rds_rdma_extra_size_37990 rds_rdma_extra_size 0 37990 NULL
+vfs_readv_38011 vfs_readv 3 38011 NULL
+aggr_recv_addba_req_evt_38037 aggr_recv_addba_req_evt 4 38037 NULL
+store_wlan_38040 store_wlan 4 38040 NULL
+klsi_105_prepare_write_buffer_38044 klsi_105_prepare_write_buffer 3 38044 NULL
++sysfs_do_create_link_38051 sysfs_do_create_link 0 38051 NULL
+nsm_create_handle_38060 nsm_create_handle 4 38060 NULL
+alloc_ltalkdev_38071 alloc_ltalkdev 1 38071 NULL
+uwb_mac_addr_print_38085 uwb_mac_addr_print 2 38085 NULL
++em28xx_set_mode_38088 em28xx_set_mode 0 38088 NULL
+request_key_auth_new_38092 request_key_auth_new 3 38092 NULL
+proc_self_readlink_38094 proc_self_readlink 3 38094 NULL
+ep0_read_38095 ep0_read 3 38095 NULL
+snd_pcm_oss_write_38108 snd_pcm_oss_write 3 38108 NULL
+vmw_kms_present_38130 vmw_kms_present 9 38130 NULL
-+__ntfs_copy_from_user_iovec_inatomic_38153 __ntfs_copy_from_user_iovec_inatomic 3-4 38153 NULL
++__ntfs_copy_from_user_iovec_inatomic_38153 __ntfs_copy_from_user_iovec_inatomic 0-4-3 38153 NULL
+kvm_clear_guest_38164 kvm_clear_guest 3-2 38164 NULL
+cdev_add_38176 cdev_add 2-3 38176 NULL
+rt2x00debug_write_rf_38195 rt2x00debug_write_rf 3 38195 NULL
+get_ucode_user_38202 get_ucode_user 3 38202 NULL
-+ext3_new_block_38208 ext3_new_block 3 38208 NULL
-+osd_req_list_partition_collections_38223 osd_req_list_partition_collections 5 38223 NULL
-+vhost_net_compat_ioctl_38237 vhost_net_compat_ioctl 3 38237 NULL
++ext3_new_block_38208 ext3_new_block 3-0 38208 NULL
++osd_req_list_partition_collections_38223 osd_req_list_partition_collections 5 38223 NULL nohasharray
++xfs_rtallocate_range_38223 xfs_rtallocate_range 4-3 38223 &osd_req_list_partition_collections_38223
++inet_csk_listen_start_38233 inet_csk_listen_start 2 38233 NULL
++ceph_decode_16_38239 ceph_decode_16 0 38239 NULL
+_ipw_read_reg32_38245 _ipw_read_reg32 0 38245 NULL
++snd_pcm_playback_rewind_38249 snd_pcm_playback_rewind 0-2 38249 NULL
+ieee80211_if_read_auto_open_plinks_38268 ieee80211_if_read_auto_open_plinks 3 38268 NULL nohasharray
-+mthca_alloc_icm_table_38268 mthca_alloc_icm_table 4-3 38268 &ieee80211_if_read_auto_open_plinks_38268
-+xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 NULL nohasharray
-+xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 &xfs_bmdr_to_bmbt_38275
++mthca_alloc_icm_table_38268 mthca_alloc_icm_table 3-4 38268 &ieee80211_if_read_auto_open_plinks_38268
++xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 NULL nohasharray
++xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 &xfs_bmbt_to_bmdr_38275
++zd_mac_rx_38296 zd_mac_rx 3 38296 NULL
+isr_rx_headers_read_38325 isr_rx_headers_read 3 38325 NULL
+ida_simple_get_38326 ida_simple_get 2 38326 NULL
++ocfs2_rotate_rightmost_leaf_left_38330 ocfs2_rotate_rightmost_leaf_left 0 38330 NULL
+__snd_gf1_look8_38333 __snd_gf1_look8 0 38333 NULL
++ocfs2_replace_extent_rec_38357 ocfs2_replace_extent_rec 0 38357 NULL
++btrfs_file_extent_disk_num_bytes_38363 btrfs_file_extent_disk_num_bytes 0 38363 NULL
++sctp_sf_abort_violation_38380 sctp_sf_abort_violation 6 38380 NULL
++norm_maxh_38387 norm_maxh 0 38387 NULL
+dn_sendmsg_38390 dn_sendmsg 4 38390 NULL
++ttm_put_pages_38411 ttm_put_pages 2 38411 NULL
+get_valid_node_allowed_38412 get_valid_node_allowed 1-0 38412 NULL
-+ocfs2_which_cluster_group_38413 ocfs2_which_cluster_group 2 38413 NULL
++ocfs2_which_cluster_group_38413 ocfs2_which_cluster_group 0-2 38413 NULL
+iwm_wdev_alloc_38415 iwm_wdev_alloc 1 38415 NULL
+ht_destroy_irq_38418 ht_destroy_irq 1 38418 NULL
+ieee80211_if_read_dtim_count_38419 ieee80211_if_read_dtim_count 3 38419 NULL
+pcnet32_realloc_tx_ring_38428 pcnet32_realloc_tx_ring 3 38428 NULL
+pmcraid_copy_sglist_38431 pmcraid_copy_sglist 3 38431 NULL
++var_name_strnsize_38447 var_name_strnsize 0-2 38447 NULL
+kvm_write_guest_38454 kvm_write_guest 4-2 38454 NULL
-+blk_end_bidi_request_38482 blk_end_bidi_request 3-4 38482 NULL
++blk_end_bidi_request_38482 blk_end_bidi_request 4-3 38482 NULL
+cpu_to_mem_38501 cpu_to_mem 0 38501 NULL
+dev_names_read_38509 dev_names_read 3 38509 NULL
+iscsi_create_iface_38510 iscsi_create_iface 5 38510 NULL
++sdhci_resume_host_38512 sdhci_resume_host 0 38512 NULL
+event_rx_mismatch_read_38518 event_rx_mismatch_read 3 38518 NULL
+ubifs_idx_node_sz_38546 ubifs_idx_node_sz 0-2 38546 NULL
+cpu_to_node_38561 cpu_to_node 0 38561 NULL
++si_domain_work_fn_38562 si_domain_work_fn 1-2 38562 NULL
+irda_sendmsg_dgram_38563 irda_sendmsg_dgram 4 38563 NULL
+_ipw_read32_38565 _ipw_read32 0 38565 NULL
+snd_nm256_playback_copy_38567 snd_nm256_playback_copy 5-3 38567 NULL
++sctp_tsnmap_num_dups_38578 sctp_tsnmap_num_dups 0 38578 NULL
+copy_ctl_value_to_user_38587 copy_ctl_value_to_user 4 38587 NULL
-+compat_sys_ptrace_38595 compat_sys_ptrace 3-4 38595 NULL
++cosa_net_setup_rx_38594 cosa_net_setup_rx 2 38594 NULL
+reportdesc_callback_38603 reportdesc_callback 3 38603 NULL
++pep_indicate_38611 pep_indicate 5 38611 NULL
+__css_put_38613 __css_put 2 38613 NULL
+icn_writecmd_38629 icn_writecmd 2 38629 NULL
++write_enabled_file_bool_38630 write_enabled_file_bool 3 38630 NULL
+receive_extralen_38634 receive_extralen 0 38634 NULL
+audit_init_entry_38644 audit_init_entry 1 38644 NULL
+mmc_send_cxd_data_38655 mmc_send_cxd_data 5 38655 NULL
-+nfs_dns_resolve_name_38670 nfs_dns_resolve_name 2 38670 NULL
++snd_es1371_wait_src_ready_38673 snd_es1371_wait_src_ready 0 38673 NULL
+cfg80211_send_disassoc_38678 cfg80211_send_disassoc 3 38678 NULL
+iscsit_dump_data_payload_38683 iscsit_dump_data_payload 2 38683 NULL
-+find_next_usable_block_38716 find_next_usable_block 1-3 38716 NULL
++validate_vid_hdr_38699 validate_vid_hdr 0 38699 NULL
++find_next_usable_block_38716 find_next_usable_block 3-1-0 38716 NULL
+v4l2_ctrl_new_38725 v4l2_ctrl_new 7 38725 NULL
++w83977af_sir_interrupt_38738 w83977af_sir_interrupt 0 38738 NULL
+iwl_dbgfs_thermal_throttling_read_38779 iwl_dbgfs_thermal_throttling_read 3 38779 NULL
+snd_gus_dram_write_38784 snd_gus_dram_write 4 38784 NULL
+gre_manip_pkt_38785 gre_manip_pkt 2 38785 NULL
++do_pci_enable_device_38802 do_pci_enable_device 0 38802 NULL
+err_decode_38804 err_decode 2 38804 NULL
+ipv6_renew_option_38813 ipv6_renew_option 3 38813 NULL
+sys_select_38827 sys_select 1 38827 NULL
+b43_txhdr_size_38832 b43_txhdr_size 0 38832 NULL
+direct_entry_38836 direct_entry 3 38836 NULL
+compat_udp_setsockopt_38840 compat_udp_setsockopt 5 38840 NULL
++read_nic_io_word_38853 read_nic_io_word 0 38853 NULL
+interfaces_38859 interfaces 2 38859 NULL
+pci_msix_table_size_38867 pci_msix_table_size 0 38867 NULL
+sizeof_gpio_leds_priv_38882 sizeof_gpio_leds_priv 0-1 38882 NULL
++reserve_metadata_bytes_38886 reserve_metadata_bytes 0 38886 NULL
+dbgfs_state_38894 dbgfs_state 3 38894 NULL
-+ext3_trim_all_free_38929 ext3_trim_all_free 3-4-2 38929 NULL
++traverse_38897 traverse 0 38897 NULL
++__fswab16_38898 __fswab16 0 38898 NULL
++ext3_trim_all_free_38929 ext3_trim_all_free 2-4-3 38929 NULL
+usb_maxpacket_38977 usb_maxpacket 0 38977 NULL
-+OSDSetBlock_38986 OSDSetBlock 4-2 38986 NULL
++OSDSetBlock_38986 OSDSetBlock 2-4 38986 NULL
++lpfc_idiag_extacc_write_38998 lpfc_idiag_extacc_write 3 38998 NULL
+udf_new_block_38999 udf_new_block 4 38999 NULL
++t4vf_pktgl_to_skb_39005 t4vf_pktgl_to_skb 2 39005 NULL
+get_nodes_39012 get_nodes 3 39012 NULL
+disp_proc_write_39024 disp_proc_write 3 39024 NULL
+acpi_install_gpe_block_39031 acpi_install_gpe_block 4 39031 NULL
+_zd_iowrite32v_async_locked_39034 _zd_iowrite32v_async_locked 3 39034 NULL
++do_write_kmem_39051 do_write_kmem 1-3-0 39051 NULL
+line6_midibuf_read_39067 line6_midibuf_read 0-3 39067 NULL
+ext4_init_block_bitmap_39071 ext4_init_block_bitmap 3 39071 NULL
++ReadHFC_39104 ReadHFC 0 39104 NULL
+tomoyo_truncate_39105 tomoyo_truncate 0 39105 NULL
-+__kfifo_to_user_r_39123 __kfifo_to_user_r 3 39123 NULL
++leb_write_lock_39111 leb_write_lock 0 39111 NULL
++__kfifo_to_user_r_39123 __kfifo_to_user_r 5-3 39123 NULL
++ttm_mem_global_alloc_zone_39125 ttm_mem_global_alloc_zone 0 39125 NULL
++i915_gem_evict_something_39130 i915_gem_evict_something 0 39130 NULL
+ea_foreach_39133 ea_foreach 0 39133 NULL
+generic_permission_39150 generic_permission 0 39150 NULL
-+alloc_ring_39151 alloc_ring 2-4 39151 NULL
++alloc_ring_39151 alloc_ring 4-2 39151 NULL
+proc_coredump_filter_read_39153 proc_coredump_filter_read 3 39153 NULL
-+create_bounce_buffer_39155 create_bounce_buffer 3 39155 NULL
+ext3_xattr_check_names_39174 ext3_xattr_check_names 0 39174 NULL
-+init_list_set_39188 init_list_set 2-3 39188 NULL
-+ubi_more_update_data_39189 ubi_more_update_data 4 39189 NULL
++init_list_set_39188 init_list_set 3-2 39188 NULL
++ubi_more_update_data_39189 ubi_more_update_data 4-0 39189 NULL
+qcam_read_bytes_39205 qcam_read_bytes 0 39205 NULL
+ivtv_v4l2_write_39226 ivtv_v4l2_write 3 39226 NULL
+drm_order_39244 drm_order 0 39244 NULL
++snd_pcm_capture_forward_39248 snd_pcm_capture_forward 0-2 39248 NULL
+r128_compat_ioctl_39250 r128_compat_ioctl 2 39250 NULL
+__skb_cow_39254 __skb_cow 2 39254 NULL
++bitmap_set_bits_39272 bitmap_set_bits 3 39272 NULL
++expand_fdtable_39273 expand_fdtable 2 39273 NULL
+pohmelfs_setxattr_39281 pohmelfs_setxattr 4 39281 NULL
+mei_registration_cdev_39284 mei_registration_cdev 2 39284 NULL
-+__vmalloc_node_39308 __vmalloc_node 1 39308 NULL
+__cfg80211_connect_result_39326 __cfg80211_connect_result 4-6 39326 NULL
-+flex_array_prealloc_39330 flex_array_prealloc 2-3 39330 NULL
+wimax_msg_alloc_39343 wimax_msg_alloc 4 39343 NULL
+__cfg80211_send_deauth_39344 __cfg80211_send_deauth 3 39344 NULL
-+__copy_from_user_nocache_39351 __copy_from_user_nocache 3 39351 NULL
+ide_complete_rq_39354 ide_complete_rq 3 39354 NULL
+vortex_wtdma_getlinearpos_39371 vortex_wtdma_getlinearpos 0 39371 NULL
+user_power_read_39414 user_power_read 3 39414 NULL
@@ -107089,44 +108358,55 @@ index 0000000..6fcc08d
+wm8350_i2c_read_device_39542 wm8350_i2c_read_device 3 39542 NULL nohasharray
+int_proc_write_39542 int_proc_write 3 39542 &wm8350_i2c_read_device_39542
+pp_write_39554 pp_write 3 39554 NULL
-+ol_dqblk_block_39558 ol_dqblk_block 0-3-2 39558 NULL
++ol_dqblk_block_39558 ol_dqblk_block 2-0-3 39558 NULL
+datablob_format_39571 datablob_format 2 39571 NULL nohasharray
+ieee80211_if_read_fwded_mcast_39571 ieee80211_if_read_fwded_mcast 3 39571 &datablob_format_39571
+handle_response_icmp_39574 handle_response_icmp 7 39574 NULL
-+n_tty_compat_ioctl_helper_39605 n_tty_compat_ioctl_helper 4 39605 NULL
+ext_depth_39607 ext_depth 0 39607 NULL
+sdio_readb_39618 sdio_readb 0 39618 NULL
-+dm_exception_table_init_39645 dm_exception_table_init 2 39645 NULL
++fm_send_cmd_39639 fm_send_cmd 5 39639 NULL
+snd_rme32_capture_copy_39653 snd_rme32_capture_copy 5 39653 NULL
+prism2_info_hostscanresults_39657 prism2_info_hostscanresults 3 39657 NULL
++pfkey_sockaddr_size_39661 pfkey_sockaddr_size 0 39661 NULL
+kvm_read_guest_cached_39666 kvm_read_guest_cached 4 39666 NULL
+v4l_stk_read_39672 v4l_stk_read 3 39672 NULL
-+do_surface_dirty_sou_39678 do_surface_dirty_sou 7 39678 NULL
++sd_completed_bytes_39705 sd_completed_bytes 0 39705 NULL
+ftrace_pid_write_39710 ftrace_pid_write 3 39710 NULL
+tcf_csum_ipv4_tcp_39713 tcf_csum_ipv4_tcp 4 39713 NULL
++mlx4_ib_resize_cq_39744 mlx4_ib_resize_cq 2 39744 NULL
++tcp_write_xmit_39755 tcp_write_xmit 2 39755 NULL
++usb_hcd_map_urb_for_dma_39774 usb_hcd_map_urb_for_dma 0 39774 NULL
+ocfs2_pages_per_cluster_39790 ocfs2_pages_per_cluster 0 39790 NULL
+security_inode_listsecurity_39812 security_inode_listsecurity 0 39812 NULL
+snd_pcm_oss_writev3_39818 snd_pcm_oss_writev3 3 39818 NULL
+sys_migrate_pages_39825 sys_migrate_pages 2 39825 NULL
+get_priv_size_39828 get_priv_size 0-1 39828 NULL
++beiscsi_process_async_pdu_39834 beiscsi_process_async_pdu 7 39834 NULL
+pkt_add_39897 pkt_add 3 39897 NULL
+read_file_modal_eeprom_39909 read_file_modal_eeprom 3 39909 NULL
+gen_pool_add_virt_39913 gen_pool_add_virt 4 39913 NULL
+dw210x_op_rw_39915 dw210x_op_rw 6 39915 NULL
++dma_to_mm_pfn_39916 dma_to_mm_pfn 0-1 39916 NULL
+aes_encrypt_interrupt_read_39919 aes_encrypt_interrupt_read 3 39919 NULL
+exofs_read_kern_39921 exofs_read_kern 6 39921 NULL nohasharray
+oom_score_adj_read_39921 oom_score_adj_read 3 39921 &exofs_read_kern_39921
+__spi_async_39932 __spi_async 0 39932 NULL
+iwl_legacy_dbgfs_missed_beacon_read_39939 iwl_legacy_dbgfs_missed_beacon_read 3 39939 NULL
-+tty_prepare_flip_string_39955 tty_prepare_flip_string 3 39955 NULL
++fwnet_pd_new_39947 fwnet_pd_new 4 39947 NULL
++tty_prepare_flip_string_39955 tty_prepare_flip_string 3-0 39955 NULL
+dma_push_rx_39973 dma_push_rx 2 39973 NULL
+broadsheetfb_write_39976 broadsheetfb_write 3 39976 NULL
+mthca_array_init_39987 mthca_array_init 2 39987 NULL
++fw_device_op_read_39990 fw_device_op_read 3 39990 NULL
++i2c_readn_40001 i2c_readn 0 40001 NULL
+xen_hvm_config_40018 xen_hvm_config 2 40018 NULL
+ivtvfb_write_40023 ivtvfb_write 3 40023 NULL
+ea_foreach_i_40028 ea_foreach_i 0 40028 NULL
+datablob_hmac_append_40038 datablob_hmac_append 3 40038 NULL
++ocfs2_claim_clusters_40050 ocfs2_claim_clusters 0 40050 NULL
+atomic_xchg_40070 atomic_xchg 0 40070 NULL
++snd_pcm_sw_params_user_40095 snd_pcm_sw_params_user 0 40095 NULL
++netlink_broadcast_filtered_40105 netlink_broadcast_filtered 0 40105 NULL
+sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3 40129 NULL
+iwch_alloc_fastreg_pbl_40153 iwch_alloc_fastreg_pbl 2 40153 NULL
+pt_write_40159 pt_write 3 40159 NULL
@@ -107134,48 +108414,70 @@ index 0000000..6fcc08d
+ipr_alloc_ucode_buffer_40199 ipr_alloc_ucode_buffer 1 40199 NULL nohasharray
+devnode_find_40199 devnode_find 3-2 40199 &ipr_alloc_ucode_buffer_40199
+allocate_probes_40204 allocate_probes 1 40204 NULL
-+compat_put_long_40214 compat_put_long 1 40214 NULL
+au0828_v4l2_read_40220 au0828_v4l2_read 3 40220 NULL
++compress_file_range_40225 compress_file_range 3-4 40225 NULL
+osst_read_40237 osst_read 3 40237 NULL
++brcmf_sdioh_request_buffer_40239 brcmf_sdioh_request_buffer 7 40239 NULL
+ocfs2_zero_extend_get_range_40248 ocfs2_zero_extend_get_range 4 40248 NULL
-+rs_sta_dbgfs_scale_table_read_40262 rs_sta_dbgfs_scale_table_read 3 40262 NULL
++rs_sta_dbgfs_scale_table_read_40262 rs_sta_dbgfs_scale_table_read 3 40262 NULL nohasharray
++fuse_update_attributes_40262 fuse_update_attributes 0 40262 &rs_sta_dbgfs_scale_table_read_40262
++ext2_fiemap_40271 ext2_fiemap 4 40271 NULL
++reqsk_queue_alloc_40272 reqsk_queue_alloc 2 40272 NULL
+rx_xfr_hint_trig_read_40283 rx_xfr_hint_trig_read 3 40283 NULL
-+ubi_io_write_data_40305 ubi_io_write_data 4-5 40305 NULL
++ubi_io_write_data_40305 ubi_io_write_data 0 40305 NULL
++nfs_file_llseek_40306 nfs_file_llseek 2 40306 NULL
+ib_get_mad_data_offset_40336 ib_get_mad_data_offset 0 40336 NULL
++bat_ogm_queue_add_40337 bat_ogm_queue_add 3 40337 NULL
+mmio_read_40348 mmio_read 4 40348 NULL
-+usb_dump_interface_40353 usb_dump_interface 0 40353 NULL
-+ocfs2_release_clusters_40355 ocfs2_release_clusters 4 40355 NULL
++ocfs2_release_clusters_40355 ocfs2_release_clusters 0-4 40355 NULL
+event_rx_mem_empty_read_40363 event_rx_mem_empty_read 3 40363 NULL
-+ocfs2_check_range_for_refcount_40365 ocfs2_check_range_for_refcount 2-3 40365 NULL
++ocfs2_check_range_for_refcount_40365 ocfs2_check_range_for_refcount 3-2 40365 NULL
++get_chars_40373 get_chars 3 40373 NULL
++usb_gadget_config_buf_40374 usb_gadget_config_buf 0 40374 NULL
++fwnet_incoming_packet_40380 fwnet_incoming_packet 3 40380 NULL
++brcmf_sdbrcm_get_image_40397 brcmf_sdbrcm_get_image 0-2 40397 NULL
++fb_prepare_extra_logos_40429 fb_prepare_extra_logos 0-2 40429 NULL
++atmel_rmem16_40450 atmel_rmem16 0 40450 NULL
+tomoyo_update_policy_40458 tomoyo_update_policy 2 40458 NULL
+zd_usb_scnprint_id_40459 zd_usb_scnprint_id 0-3 40459 NULL
++afs_fs_store_data_40484 afs_fs_store_data 3-4-5-6 40484 NULL
+devcgroup_inode_permission_40492 devcgroup_inode_permission 0 40492 NULL
+tty_write_room_40495 tty_write_room 0 40495 NULL
+sg_phys_40507 sg_phys 0 40507 NULL
-+TSS_checkhmac2_40520 TSS_checkhmac2 5-7 40520 NULL
++__ethtool_get_sset_count_40511 __ethtool_get_sset_count 0 40511 NULL
++TSS_checkhmac2_40520 TSS_checkhmac2 7-5 40520 NULL
++i915_gem_execbuffer_relocate_object_slow_40546 i915_gem_execbuffer_relocate_object_slow 0 40546 NULL
+ima_write_policy_40548 ima_write_policy 3 40548 NULL
-+esp_alloc_tmp_40558 esp_alloc_tmp 3-2 40558 NULL
++esp_alloc_tmp_40558 esp_alloc_tmp 2-3 40558 NULL
+ufs_inode_getfrag_40560 ufs_inode_getfrag 2-4 40560 NULL
+arch_setup_hpet_msi_40584 arch_setup_hpet_msi 1 40584 NULL
++b1_get_byte_40597 b1_get_byte 0 40597 NULL
+skge_rx_get_40598 skge_rx_get 3 40598 NULL
+get_priv_descr_and_size_40612 get_priv_descr_and_size 0 40612 NULL
+sctp_manip_pkt_40620 sctp_manip_pkt 2 40620 NULL
-+cpuset_sprintf_cpulist_40627 cpuset_sprintf_cpulist 0 40627 NULL
++pid_nr_ns_40654 pid_nr_ns 0 40654 NULL
+fops_read_40672 fops_read 3 40672 NULL
++ext4_mark_inode_dirty_40673 ext4_mark_inode_dirty 0 40673 NULL
++videobuf_dma_init_user_locked_40678 videobuf_dma_init_user_locked 4-3 40678 NULL
++pci_enable_resources_40680 pci_enable_resources 0 40680 NULL
++regulator_enable_40689 regulator_enable 0 40689 NULL
+__seq_open_private_40715 __seq_open_private 3 40715 NULL
+xfs_iext_remove_direct_40744 xfs_iext_remove_direct 3 40744 NULL nohasharray
-+find_next_zero_bit_le_40744 find_next_zero_bit_le 0-2-3 40744 &xfs_iext_remove_direct_40744
++find_next_zero_bit_le_40744 find_next_zero_bit_le 2-3-0 40744 &xfs_iext_remove_direct_40744
+security_inode_listxattr_40752 security_inode_listxattr 0 40752 NULL
-+fat_generic_compat_ioctl_40755 fat_generic_compat_ioctl 3 40755 NULL
+card_send_command_40757 card_send_command 3 40757 NULL
+ad1889_readl_40765 ad1889_readl 0 40765 NULL
+pg_write_40766 pg_write 3 40766 NULL
+ecryptfs_readlink_40775 ecryptfs_readlink 3 40775 NULL nohasharray
-+show_list_40775 show_list 3 40775 &ecryptfs_readlink_40775
++show_list_40775 show_list 3-0 40775 &ecryptfs_readlink_40775
++kfifo_out_copy_r_40784 kfifo_out_copy_r 3 40784 NULL
+bitmap_weight_40791 bitmap_weight 0-2 40791 NULL
++idr_get_new_40797 idr_get_new 0 40797 NULL
+netdev_alloc_skb_ip_align_40811 netdev_alloc_skb_ip_align 2 40811 NULL nohasharray
+paranoid_check_not_bad_40811 paranoid_check_not_bad 0 40811 &netdev_alloc_skb_ip_align_40811
+nl80211_send_roamed_40825 nl80211_send_roamed 5-7 40825 NULL
++nilfs_mdt_init_40849 nilfs_mdt_init 3 40849 NULL
++__shared_list_add_40850 __shared_list_add 0 40850 NULL
+ocfs2_zero_partial_clusters_40856 ocfs2_zero_partial_clusters 2-3 40856 NULL
+v9fs_file_read_40858 v9fs_file_read 3 40858 NULL
+iwch_alloc_pbl_40885 iwch_alloc_pbl 2 40885 NULL
@@ -107185,87 +108487,114 @@ index 0000000..6fcc08d
+iwl_legacy_dbgfs_disable_ht40_read_40910 iwl_legacy_dbgfs_disable_ht40_read 3 40910 NULL
+gfs2_ea_find_40913 gfs2_ea_find 0 40913 NULL
+vol_cdev_write_40915 vol_cdev_write 3 40915 NULL
++__kfifo_init_40918 __kfifo_init 4-3 40918 NULL
++iterate_extent_inodes_40923 iterate_extent_inodes 0 40923 NULL
++btrfs_setsize_40931 btrfs_setsize 2 40931 NULL
+snd_vx_create_40948 snd_vx_create 4 40948 NULL
++tcp_skb_mss_40964 tcp_skb_mss 0 40964 NULL
+rds_sendmsg_40976 rds_sendmsg 4 40976 NULL
+econet_recvmsg_40978 econet_recvmsg 4 40978 NULL
++insert_old_idx_40987 insert_old_idx 0 40987 NULL
+mac80211_format_buffer_41010 mac80211_format_buffer 2 41010 NULL
+_req_append_segment_41031 _req_append_segment 2 41031 NULL
+mISDN_sock_sendmsg_41035 mISDN_sock_sendmsg 4 41035 NULL
+ocfs2_xattr_index_block_find_41040 ocfs2_xattr_index_block_find 0 41040 NULL
-+vfs_listxattr_41062 vfs_listxattr 0 41062 NULL
++BcmFlash2xBulkWrite_41054 BcmFlash2xBulkWrite 0 41054 NULL
++vfs_listxattr_41062 vfs_listxattr 0 41062 NULL nohasharray
++beacon_filtering_write_41062 beacon_filtering_write 3 41062 &vfs_listxattr_41062
+cfg80211_inform_bss_frame_41078 cfg80211_inform_bss_frame 4 41078 NULL
+roccat_read_41093 roccat_read 3 41093 NULL
+provide_user_output_41105 provide_user_output 3 41105 NULL
+f_audio_buffer_alloc_41110 f_audio_buffer_alloc 1 41110 NULL
-+oom_adjust_write_41116 oom_adjust_write 3 41116 NULL
++ocfs2_extend_trans_41116 ocfs2_extend_trans 0 41116 NULL nohasharray
++oom_adjust_write_41116 oom_adjust_write 3 41116 &ocfs2_extend_trans_41116
+dvb_ca_write_41171 dvb_ca_write 3 41171 NULL
+ol_quota_chunk_block_41177 ol_quota_chunk_block 0-2 41177 NULL
++request_irq_41192 request_irq 0 41192 NULL
+compat_sys_process_vm_writev_41194 compat_sys_process_vm_writev 3-5 41194 NULL
+dfs_file_write_41196 dfs_file_write 3 41196 NULL
-+xfs_readdir_41200 xfs_readdir 3 41200 NULL
++UpdateRegs_41200 UpdateRegs 0 41200 NULL nohasharray
++xfs_readdir_41200 xfs_readdir 3 41200 &UpdateRegs_41200
+ocfs2_read_quota_block_41207 ocfs2_read_quota_block 2 41207 NULL
+ceph_calc_raw_layout_41212 ceph_calc_raw_layout 4 41212 NULL
++tun_alloc_skb_41216 tun_alloc_skb 2-4-3 41216 NULL
+nfs_page_array_len_41219 nfs_page_array_len 0-2-1 41219 NULL
-+hiddev_compat_ioctl_41255 hiddev_compat_ioctl 2-3 41255 NULL
++hiddev_compat_ioctl_41255 hiddev_compat_ioctl 2 41255 NULL
++create_dir_41256 create_dir 0 41256 NULL
+erst_read_41260 erst_read 0 41260 NULL
+alloc_context_41283 alloc_context 1 41283 NULL
++ewma_init_41305 ewma_init 2-3 41305 NULL
++objio_alloc_io_state_41316 objio_alloc_io_state 7 41316 NULL
+create_bounce_buffer_41330 create_bounce_buffer 3 41330 NULL
+user_update_41332 user_update 3 41332 NULL
+twl_change_queue_depth_41342 twl_change_queue_depth 2 41342 NULL
++irq_expand_nr_irqs_41351 irq_expand_nr_irqs 0 41351 NULL
+cnic_init_id_tbl_41354 cnic_init_id_tbl 2 41354 NULL
+jbd2_alloc_41359 jbd2_alloc 1 41359 NULL
+kmp_init_41373 kmp_init 2 41373 NULL
++tifm_add_adapter_41390 tifm_add_adapter 0 41390 NULL
+isr_commands_read_41398 isr_commands_read 3 41398 NULL
+sys_flistxattr_41407 sys_flistxattr 3 41407 NULL
+xfs_iext_add_41422 xfs_iext_add 3 41422 NULL
+isdn_ppp_fill_rq_41428 isdn_ppp_fill_rq 2 41428 NULL
+lbs_rdrf_read_41431 lbs_rdrf_read 3 41431 NULL
+ext4_trim_extent_41436 ext4_trim_extent 4 41436 NULL
-+ntfs_file_buffered_write_41442 ntfs_file_buffered_write 4-6 41442 NULL
++ntfs_file_buffered_write_41442 ntfs_file_buffered_write 6-4 41442 NULL
+pcpu_build_alloc_info_41443 pcpu_build_alloc_info 1-2-3 41443 NULL
+layout_leb_in_gaps_41470 layout_leb_in_gaps 0 41470 NULL
++snd_pcm_status_41472 snd_pcm_status 0 41472 NULL
+wep_interrupt_read_41492 wep_interrupt_read 3 41492 NULL
+hpfs_translate_name_41497 hpfs_translate_name 3 41497 NULL
+xfrm_hash_new_size_41505 xfrm_hash_new_size 0-1 41505 NULL
+ldisc_receive_41516 ldisc_receive 4 41516 NULL
-+slab_alloc_41538 slab_alloc 0 41538 NULL
+rng_dev_read_41581 rng_dev_read 3 41581 NULL
++map_offset_to_paddr_41592 map_offset_to_paddr 0-1 41592 NULL
+read_file_rx_chainmask_41605 read_file_rx_chainmask 3 41605 NULL
+vga_io_r_41609 vga_io_r 0 41609 NULL
-+usb_endpoint_maxp_41613 usb_endpoint_maxp 0 41613 NULL
++tcp_hdrlen_41610 tcp_hdrlen 0 41610 NULL
++lbs_bcnmiss_write_41613 lbs_bcnmiss_write 3 41613 NULL nohasharray
++usb_endpoint_maxp_41613 usb_endpoint_maxp 0 41613 &lbs_bcnmiss_write_41613
+lis3l02dq_read_accel_from_buffer_41615 lis3l02dq_read_accel_from_buffer 2 41615 NULL
+mempool_create_kmalloc_pool_41650 mempool_create_kmalloc_pool 1 41650 NULL
+get_std_timing_41654 get_std_timing 0 41654 NULL
-+squashfs_cache_init_41656 squashfs_cache_init 2 41656 NULL
-+au_nhash_alloc_41670 au_nhash_alloc 2 41670 NULL
++start_graph_tracing_41656 start_graph_tracing 0 41656 NULL nohasharray
++squashfs_cache_init_41656 squashfs_cache_init 2 41656 &start_graph_tracing_41656
+ieee80211_if_fmt_bssid_41677 ieee80211_if_fmt_bssid 3 41677 NULL
-+params_period_bytes_41683 params_period_bytes 0 41683 NULL
-+aac_src_ioremap_41688 aac_src_ioremap 2 41688 NULL
-+ubi_leb_write_41691 ubi_leb_write 4-5 41691 NULL
-+bdx_tx_db_init_41719 bdx_tx_db_init 2 41719 NULL
++uapsd_max_sp_len_write_41683 uapsd_max_sp_len_write 3 41683 NULL
++apei_exec_for_each_entry_41717 apei_exec_for_each_entry 0 41717 NULL
+sys_pwritev_41722 sys_pwritev 3 41722 NULL
-+get_bios_ebda_41730 get_bios_ebda 0 41730 NULL
+hc_gpa_41744 hc_gpa 0-2-3 41744 NULL
+fillonedir_41746 fillonedir 3 41746 NULL
-+sparse_add_one_section_41778 sparse_add_one_section 3 41778 NULL
++get_slab_41770 get_slab 1 41770 NULL
+ocfs2_dx_dir_rebalance_41793 ocfs2_dx_dir_rebalance 7 41793 NULL
++bat_socket_read_41813 bat_socket_read 3 41813 NULL
+sco_send_frame_41815 sco_send_frame 3 41815 NULL
+do_ip_setsockopt_41852 do_ip_setsockopt 5 41852 NULL
++tcp_packets_in_flight_41853 tcp_packets_in_flight 0 41853 NULL
+keyctl_instantiate_key_41855 keyctl_instantiate_key 3 41855 NULL
++spin_time_start_41857 spin_time_start 0 41857 NULL
++pci_map_single_41869 pci_map_single 0 41869 NULL
++usb_gadget_get_string_41871 usb_gadget_get_string 0 41871 NULL
++get_packet_41914 get_packet 3 41914 NULL
+get_fdb_entries_41916 get_fdb_entries 3 41916 NULL
+ceph_get_direct_page_vector_41917 ceph_get_direct_page_vector 2 41917 NULL
+find_ge_pid_41918 find_ge_pid 1 41918 NULL
+build_inv_iotlb_pages_41922 build_inv_iotlb_pages 4-5 41922 NULL
++ReadConfigFileStructure_41929 ReadConfigFileStructure 0 41929 NULL
+nfsd_getxattr_41934 nfsd_getxattr 0 41934 NULL
++iscsi_iser_recv_41948 iscsi_iser_recv 4 41948 NULL
+ocfs2_xattr_bucket_get_name_value_41949 ocfs2_xattr_bucket_get_name_value 0 41949 NULL
++efx_tx_queue_insert_41955 efx_tx_queue_insert 2 41955 NULL
+portnames_read_41958 portnames_read 3 41958 NULL
+dst_mtu_41969 dst_mtu 0 41969 NULL
+cx24116_writeregN_41975 cx24116_writeregN 4 41975 NULL
+ubi_io_is_bad_41983 ubi_io_is_bad 0 41983 NULL
++_get_slice_41991 _get_slice 0 41991 NULL
++em28xx_write_regs_41996 em28xx_write_regs 0 41996 NULL
+flakey_status_42000 flakey_status 4 42000 NULL
-+lguest_map_42008 lguest_map 1-2 42008 NULL
+pool_allocate_42012 pool_allocate 3 42012 NULL
+spidev_sync_read_42014 spidev_sync_read 0 42014 NULL
++rs_sta_dbgfs_scale_table_write_42017 rs_sta_dbgfs_scale_table_write 3 42017 NULL
+ensure_wear_leveling_42029 ensure_wear_leveling 0 42029 NULL
+acpi_ut_create_buffer_object_42030 acpi_ut_create_buffer_object 1 42030 NULL
+__hwahc_op_set_gtk_42038 __hwahc_op_set_gtk 4 42038 NULL
@@ -107278,22 +108607,31 @@ index 0000000..6fcc08d
+submit_inquiry_42108 submit_inquiry 3 42108 NULL
+sysfs_read_file_42113 sysfs_read_file 3 42113 NULL
+store_gps_42118 store_gps 4 42118 NULL
++ext4_do_update_inode_42127 ext4_do_update_inode 0 42127 NULL
++tipc_createport_raw_42129 tipc_createport_raw 4 42129 NULL
++Read_hfc16_stable_42131 Read_hfc16_stable 0 42131 NULL
+ttm_agp_populate_42144 ttm_agp_populate 2 42144 NULL
+v9fs_alloc_rdir_buf_42150 v9fs_alloc_rdir_buf 2 42150 NULL
+mmc_align_data_size_42161 mmc_align_data_size 0-2 42161 NULL
+read_file_base_eeprom_42168 read_file_base_eeprom 3 42168 NULL
+oprofilefs_str_to_user_42182 oprofilefs_str_to_user 3 42182 NULL
++write_file_beacon_42185 write_file_beacon 3 42185 NULL
+get_znodes_to_commit_42201 get_znodes_to_commit 0 42201 NULL
++xfs_rtfree_range_42244 xfs_rtfree_range 4-3 42244 NULL
+btmrvl_hsmode_write_42252 btmrvl_hsmode_write 3 42252 NULL
-+netxen_nic_map_indirect_address_128M_42257 netxen_nic_map_indirect_address_128M 2 42257 NULL
++find_last_bit_42260 find_last_bit 2 42260 NULL
++ctnetlink_proto_size_42270 ctnetlink_proto_size 0 42270 NULL
++__pcpu_size_to_slot_42271 __pcpu_size_to_slot 0 42271 NULL
+snd_pcm_hw_param_value_max_42280 snd_pcm_hw_param_value_max 0 42280 NULL
++rtnl_link_get_af_size_42296 rtnl_link_get_af_size 0 42296 NULL
+sel_read_perm_42302 sel_read_perm 3 42302 NULL nohasharray
+crypt_status_42302 crypt_status 4 42302 &sel_read_perm_42302
+sctp_setsockopt_del_key_42304 sctp_setsockopt_del_key 3 42304 NULL nohasharray
+ulong_read_file_42304 ulong_read_file 3 42304 &sctp_setsockopt_del_key_42304
-+hysdn_conf_read_42324 hysdn_conf_read 3 42324 NULL
++tracing_ctrl_write_42324 tracing_ctrl_write 3 42324 NULL nohasharray
++hysdn_conf_read_42324 hysdn_conf_read 3 42324 &tracing_ctrl_write_42324 nohasharray
++lpfc_config_msi_42324 lpfc_config_msi 0 42324 &hysdn_conf_read_42324
+tcp_sync_mss_42330 tcp_sync_mss 0-2 42330 NULL
-+snd_pcm_plug_alloc_42339 snd_pcm_plug_alloc 2 42339 NULL
+ide_raw_taskfile_42355 ide_raw_taskfile 4 42355 NULL
+msnd_fifo_read_42406 msnd_fifo_read 0-3 42406 NULL
+brn_proc_write_42407 brn_proc_write 3 42407 NULL
@@ -107303,12 +108641,19 @@ index 0000000..6fcc08d
+snd_pcm_action_group_42452 snd_pcm_action_group 0 42452 NULL
+tcm_loop_change_queue_depth_42454 tcm_loop_change_queue_depth 2 42454 NULL
+ext3_valid_block_bitmap_42459 ext3_valid_block_bitmap 3 42459 NULL
++neigh_nlmsg_size_42464 neigh_nlmsg_size 0 42464 NULL
++kernel_recvmsg_42482 kernel_recvmsg 0 42482 NULL
+follow_hugetlb_page_42486 follow_hugetlb_page 0-7 42486 NULL
++brcmf_sdbrcm_bus_txctl_42492 brcmf_sdbrcm_bus_txctl 3 42492 NULL
++jbd2_log_wait_commit_42519 jbd2_log_wait_commit 0 42519 NULL
+kvm_write_wall_clock_42520 kvm_write_wall_clock 2 42520 NULL
+smk_write_netlbladdr_42525 smk_write_netlbladdr 3 42525 NULL
+snd_emux_create_port_42533 snd_emux_create_port 3 42533 NULL
++__register_ftrace_function_42543 __register_ftrace_function 0 42543 NULL
+dbAllocNear_42546 dbAllocNear 0 42546 NULL
-+iwl_print_event_log_42566 iwl_print_event_log 0-5-7 42566 NULL
++udp_recvmsg_42558 udp_recvmsg 4 42558 NULL
++iwl_print_event_log_42566 iwl_print_event_log 7-5-0 42566 NULL
++ocfs2_reserve_suballoc_bits_42569 ocfs2_reserve_suballoc_bits 0 42569 NULL
+xfrm_new_hash_mask_42579 xfrm_new_hash_mask 0-1 42579 NULL
+oom_score_adj_write_42594 oom_score_adj_write 3 42594 NULL
+map_state_42602 map_state 1 42602 NULL nohasharray
@@ -107317,117 +108662,146 @@ index 0000000..6fcc08d
+ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout_42635 ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout 3 42635 NULL
+scsi_activate_tcq_42640 scsi_activate_tcq 2 42640 NULL
+br_mdb_rehash_42643 br_mdb_rehash 2 42643 NULL
++parport_pc_compat_write_block_pio_42644 parport_pc_compat_write_block_pio 3 42644 NULL
+_regmap_raw_write_42652 _regmap_raw_write 4 42652 NULL
++ocfs2_search_chain_42655 ocfs2_search_chain 0 42655 NULL
+l2tp_xmit_skb_42672 l2tp_xmit_skb 3 42672 NULL
+request_key_and_link_42693 request_key_and_link 4 42693 NULL
+vb2_read_42703 vb2_read 3 42703 NULL
-+__ocfs2_decrease_refcount_42717 __ocfs2_decrease_refcount 4 42717 NULL
++__ocfs2_decrease_refcount_42717 __ocfs2_decrease_refcount 0-5-4 42717 NULL
++read_status_42722 read_status 0 42722 NULL
+dvb_demux_ioctl_42733 dvb_demux_ioctl 2 42733 NULL
+set_aoe_iflist_42737 set_aoe_iflist 2 42737 NULL
+ax25_setsockopt_42740 ax25_setsockopt 5 42740 NULL
+xen_bind_pirq_gsi_to_irq_42750 xen_bind_pirq_gsi_to_irq 1 42750 NULL
++dpm_sysfs_add_42756 dpm_sysfs_add 0 42756 NULL
+qla2x00_get_ctx_bsg_sp_42768 qla2x00_get_ctx_bsg_sp 3 42768 NULL
++x25_recvmsg_42777 x25_recvmsg 4 42777 NULL
+snd_midi_event_decode_42780 snd_midi_event_decode 0 42780 NULL
+cryptd_hash_setkey_42781 cryptd_hash_setkey 3 42781 NULL
+koneplus_sysfs_read_42792 koneplus_sysfs_read 6 42792 NULL
+ntfs_attr_extend_allocation_42796 ntfs_attr_extend_allocation 0-2 42796 NULL
-+fw_device_op_compat_ioctl_42804 fw_device_op_compat_ioctl 2-3 42804 NULL
++fw_device_op_compat_ioctl_42804 fw_device_op_compat_ioctl 2 42804 NULL
+drm_ioctl_42813 drm_ioctl 2 42813 NULL
+iwl_dbgfs_ucode_bt_stats_read_42820 iwl_dbgfs_ucode_bt_stats_read 3 42820 NULL
+set_arg_42824 set_arg 3 42824 NULL
+ocfs2_desc_bitmap_to_cluster_off_42831 ocfs2_desc_bitmap_to_cluster_off 2 42831 NULL
++ntfs_mapping_pairs_build_42859 ntfs_mapping_pairs_build 0 42859 NULL
+ocfs2_clusters_for_bytes_42872 ocfs2_clusters_for_bytes 0-2 42872 NULL
-+pskb_expand_head_42881 pskb_expand_head 2-3 42881 NULL
-+vt_compat_ioctl_42887 vt_compat_ioctl 3 42887 NULL
++pskb_expand_head_42881 pskb_expand_head 3-2 42881 NULL
+tipc_port_recv_sections_42890 tipc_port_recv_sections 4 42890 NULL
+xpc_kmalloc_cacheline_aligned_42895 xpc_kmalloc_cacheline_aligned 1 42895 NULL
++SendTxCommandPacket_42901 SendTxCommandPacket 3 42901 NULL
+hd_end_request_42904 hd_end_request 2 42904 NULL
+sctp_getsockopt_maxburst_42941 sctp_getsockopt_maxburst 2 42941 NULL
+get_unmapped_area_42944 get_unmapped_area 0 42944 NULL
++vx_reset_chk_42946 vx_reset_chk 0 42946 NULL
+sys_sethostname_42962 sys_sethostname 2 42962 NULL
-+compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL
-+snd_timer_user_ioctl_compat_42985 snd_timer_user_ioctl_compat 3 42985 NULL
++ixj_enhanced_read_42980 ixj_enhanced_read 3 42980 NULL
++compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL nohasharray
++pfkey_xfrm_policy2sec_ctx_size_42981 pfkey_xfrm_policy2sec_ctx_size 0 42981 &compat_udpv6_setsockopt_42981
+nfs_idmap_get_desc_42990 nfs_idmap_get_desc 4-2 42990 NULL
+mlx4_qp_reserve_range_43000 mlx4_qp_reserve_range 2-3 43000 NULL
+isr_rx_mem_overflow_read_43025 isr_rx_mem_overflow_read 3 43025 NULL
++add_bytes_to_bitmap_43026 add_bytes_to_bitmap 3-0-4 43026 NULL
+store_lssw_43035 store_lssw 4 43035 NULL nohasharray
+wep_default_key_count_read_43035 wep_default_key_count_read 3 43035 &store_lssw_43035
-+sep_prepare_input_output_dma_table_in_dcb_43064 sep_prepare_input_output_dma_table_in_dcb 4-5-2-3 43064 NULL
-+cpuset_sprintf_memlist_43088 cpuset_sprintf_memlist 0 43088 NULL
++uapsd_queues_write_43040 uapsd_queues_write 3 43040 NULL
++sep_prepare_input_output_dma_table_in_dcb_43064 sep_prepare_input_output_dma_table_in_dcb 4-5-3-2 43064 NULL
+ieee80211_if_fmt_drop_unencrypted_43107 ieee80211_if_fmt_drop_unencrypted 3 43107 NULL
-+uuid_string_43154 uuid_string 0 43154 NULL
++e1000_request_msix_43134 e1000_request_msix 0 43134 NULL
+usb_string_sub_43164 usb_string_sub 0 43164 NULL
+ext4_xattr_ibody_get_43200 ext4_xattr_ibody_get 0 43200 NULL
++teiup_create_43201 teiup_create 3 43201 NULL
+uio_write_43202 uio_write 3 43202 NULL
+iso_callback_43208 iso_callback 3 43208 NULL
+atomic_long_add_return_43217 atomic_long_add_return 1 43217 NULL
-+comedi_compat_ioctl_43218 comedi_compat_ioctl 3 43218 NULL
+vmemmap_alloc_block_43245 vmemmap_alloc_block 1 43245 NULL
-+fixup_leb_43256 fixup_leb 3 43256 NULL
+store_wwan_43264 store_wwan 4 43264 NULL
+ide_end_rq_43269 ide_end_rq 4 43269 NULL
-+evtchn_write_43278 evtchn_write 3 43278 NULL
++parport_pc_ecp_write_block_pio_43278 parport_pc_ecp_write_block_pio 3 43278 NULL nohasharray
++evtchn_write_43278 evtchn_write 3 43278 &parport_pc_ecp_write_block_pio_43278
+filemap_write_and_wait_range_43279 filemap_write_and_wait_range 0 43279 NULL
+alloc_subdevices_43300 alloc_subdevices 2 43300 NULL
+store_ledd_43312 store_ledd 4 43312 NULL
+get_nr_irqs_gsi_43315 get_nr_irqs_gsi 0 43315 NULL
+__ext4_get_inode_loc_43332 __ext4_get_inode_loc 0 43332 NULL
++svc_pool_map_get_43386 svc_pool_map_get 0 43386 NULL
+xenfb_write_43412 xenfb_write 3 43412 NULL
-+__alloc_bootmem_low_43423 __alloc_bootmem_low 1 43423 NULL
++__alloc_bootmem_low_43423 __alloc_bootmem_low 1 43423 NULL nohasharray
++msi_capability_init_43423 msi_capability_init 0 43423 &__alloc_bootmem_low_43423
+usb_alloc_urb_43436 usb_alloc_urb 1 43436 NULL
++ocfs2_rotate_tree_left_43442 ocfs2_rotate_tree_left 0 43442 NULL
+usb_string_43443 usb_string 0 43443 NULL nohasharray
+usemap_size_43443 usemap_size 0-2-1 43443 &usb_string_43443
-+alloc_new_reservation_43480 alloc_new_reservation 4 43480 NULL
++__data_list_add_eb_43472 __data_list_add_eb 0 43472 NULL
++alloc_new_reservation_43480 alloc_new_reservation 4-0-2 43480 NULL
+nf_nat_ftp_fmt_cmd_43495 nf_nat_ftp_fmt_cmd 0 43495 NULL
+ieee80211_if_fmt_dot11MeshHWMPnetDiameterTraversalTime_43505 ieee80211_if_fmt_dot11MeshHWMPnetDiameterTraversalTime 3 43505 NULL
+do_readlink_43518 do_readlink 2 43518 NULL
+dvb_ca_en50221_io_write_43533 dvb_ca_en50221_io_write 3 43533 NULL
+cachefiles_daemon_write_43535 cachefiles_daemon_write 3 43535 NULL
+ufs_alloccg_block_43540 ufs_alloccg_block 3-0 43540 NULL
++request_resource_43548 request_resource 0 43548 NULL
+ath_rx_init_43564 ath_rx_init 2 43564 NULL nohasharray
+_send_control_msg_43564 _send_control_msg 6 43564 &ath_rx_init_43564
+_fc_frame_alloc_43568 _fc_frame_alloc 1 43568 NULL
+rpc_malloc_43573 rpc_malloc 2 43573 NULL
++handle_frequent_errors_43599 handle_frequent_errors 4 43599 NULL
+lpfc_idiag_drbacc_read_reg_43606 lpfc_idiag_drbacc_read_reg 0-3 43606 NULL
+proc_read_43614 proc_read 3 43614 NULL
+prison_create_43623 prison_create 1 43623 NULL
++random_write_43656 random_write 3 43656 NULL
+bio_integrity_tag_43658 bio_integrity_tag 3 43658 NULL
+ext4_acl_count_43659 ext4_acl_count 0-1 43659 NULL
-+dmam_declare_coherent_memory_43679 dmam_declare_coherent_memory 4-2 43679 NULL
-+calgary_map_page_43686 calgary_map_page 3-4 43686 NULL
++dmam_declare_coherent_memory_43679 dmam_declare_coherent_memory 4 43679 NULL
++calgary_map_page_43686 calgary_map_page 4 43686 NULL
++hidp_send_ctrl_message_43702 hidp_send_ctrl_message 4 43702 NULL
+user_confirm_reply_43708 user_confirm_reply 4 43708 NULL
++wait_for_completion_interruptible_43723 wait_for_completion_interruptible 0 43723 NULL
+drbd_md_first_sector_43729 drbd_md_first_sector 0 43729 NULL
++reset_card_proc_43731 reset_card_proc 0 43731 NULL
+snd_rme32_playback_copy_43732 snd_rme32_playback_copy 5 43732 NULL
-+ocfs2_replace_clusters_43733 ocfs2_replace_clusters 5 43733 NULL
++ocfs2_replace_clusters_43733 ocfs2_replace_clusters 0-5 43733 NULL
+fuse_conn_congestion_threshold_write_43736 fuse_conn_congestion_threshold_write 3 43736 NULL
-+einj_get_parameter_address_43743 einj_get_parameter_address 0 43743 NULL
+osdv1_attr_list_elem_size_43747 osdv1_attr_list_elem_size 0-1 43747 NULL
+gigaset_initcs_43753 gigaset_initcs 2 43753 NULL
+sctp_setsockopt_active_key_43755 sctp_setsockopt_active_key 3 43755 NULL
+ocfs2_xattr_get_value_outside_43787 ocfs2_xattr_get_value_outside 0 43787 NULL nohasharray
-+byte_pos_43787 byte_pos 0-2 43787 &ocfs2_xattr_get_value_outside_43787
-+btrfs_copy_from_user_43806 btrfs_copy_from_user 3-1 43806 NULL
++byte_pos_43787 byte_pos 0-2 43787 &ocfs2_xattr_get_value_outside_43787 nohasharray
++xfs_highbit64_43787 xfs_highbit64 1 43787 &byte_pos_43787
++btrfs_copy_from_user_43806 btrfs_copy_from_user 3-1-0 43806 NULL
+store_cpufv_disabled_43809 store_cpufv_disabled 4 43809 NULL
++hci_send_cmd_43810 hci_send_cmd 3 43810 NULL
+ext4_read_block_bitmap_43814 ext4_read_block_bitmap 2 43814 NULL
++ext4_split_extent_43818 ext4_split_extent 0 43818 NULL
++i915_gem_execbuffer_relocate_entry_43822 i915_gem_execbuffer_relocate_entry 0 43822 NULL
+ieee80211_if_fmt_element_ttl_43825 ieee80211_if_fmt_element_ttl 3 43825 NULL
+ieee80211_alloc_hw_43829 ieee80211_alloc_hw 1 43829 NULL
++atomic64_cmpxchg_unchecked_43840 atomic64_cmpxchg_unchecked 0 43840 NULL
++p54_download_eeprom_43842 p54_download_eeprom 4 43842 NULL
+read_flush_43851 read_flush 3 43851 NULL
+ocfs2_block_group_find_clear_bits_43874 ocfs2_block_group_find_clear_bits 4 43874 NULL
+idmap_update_entry_43885 idmap_update_entry 3 43885 NULL
-+xen_register_gsi_43946 xen_register_gsi 1-2 43946 NULL
++prism2_sta_send_mgmt_43916 prism2_sta_send_mgmt 5 43916 NULL
++xen_register_gsi_43946 xen_register_gsi 2-1 43946 NULL
+stats_dot11RTSFailureCount_read_43948 stats_dot11RTSFailureCount_read 3 43948 NULL
-+__get_required_blob_size_43980 __get_required_blob_size 0-2-3 43980 NULL
++i915_ring_idle_43969 i915_ring_idle 0 43969 NULL
++__get_required_blob_size_43980 __get_required_blob_size 0-3-2 43980 NULL
+nla_reserve_43984 nla_reserve 3 43984 NULL
+scsi_command_size_43992 scsi_command_size 0 43992 NULL nohasharray
-+bcm_recvmsg_43992 bcm_recvmsg 4 43992 &scsi_command_size_43992
++kvm_read_guest_virt_43992 kvm_read_guest_virt 4-2 43992 &scsi_command_size_43992 nohasharray
++bcm_recvmsg_43992 bcm_recvmsg 4 43992 &kvm_read_guest_virt_43992
+write_flush_procfs_44011 write_flush_procfs 3 44011 NULL
-+socket_sockcreate_sid_44074 socket_sockcreate_sid 2 44074 NULL
++btrfs_prev_leaf_44083 btrfs_prev_leaf 0 44083 NULL
+xlog_recover_add_to_cont_trans_44102 xlog_recover_add_to_cont_trans 4 44102 NULL
++skb_frag_dma_map_44112 skb_frag_dma_map 0 44112 NULL
+tracing_set_trace_read_44122 tracing_set_trace_read 3 44122 NULL
-+vmw_gmr_bind_44130 vmw_gmr_bind 3 44130 NULL
++em28xx_read_reg_req_44130 em28xx_read_reg_req 0 44130 NULL
+scsi_get_resid_44147 scsi_get_resid 0 44147 NULL
+ubifs_find_dirty_idx_leb_44169 ubifs_find_dirty_idx_leb 0 44169 NULL
+ocfs2_xattr_bucket_find_44174 ocfs2_xattr_bucket_find 0 44174 NULL
++readreg_ipac_44186 readreg_ipac 0 44186 NULL
+handle_eviocgbit_44193 handle_eviocgbit 3 44193 NULL
+IO_APIC_get_PCI_irq_vector_44198 IO_APIC_get_PCI_irq_vector 0 44198 NULL
+claim_ptd_buffers_44213 claim_ptd_buffers 3 44213 NULL
@@ -107435,31 +108809,45 @@ index 0000000..6fcc08d
+ioapic_register_intr_44238 ioapic_register_intr 1 44238 NULL
+scsi_track_queue_full_44239 scsi_track_queue_full 2 44239 NULL
+enlarge_skb_44248 enlarge_skb 2 44248 NULL
++apei_resources_sub_44252 apei_resources_sub 0 44252 NULL
++device_create_file_44285 device_create_file 0 44285 NULL
+ufs_clusteracct_44293 ufs_clusteracct 3 44293 NULL
+ocfs2_zero_range_for_truncate_44294 ocfs2_zero_range_for_truncate 3 44294 NULL
+iwl3945_statistics_flag_44310 iwl3945_statistics_flag 3-0 44310 NULL
-+bitmap_scnprintf_44318 bitmap_scnprintf 0-2 44318 NULL
++bitmap_scnprintf_44318 bitmap_scnprintf 2-0 44318 NULL
+dispatch_proc_write_44320 dispatch_proc_write 3 44320 NULL
++rs_init_44327 rs_init 1 44327 NULL
++count_ah_combs_44334 count_ah_combs 0 44334 NULL
+blk_queue_init_tags_44355 blk_queue_init_tags 2 44355 NULL
++ipx_recvmsg_44366 ipx_recvmsg 4 44366 NULL
+rts_threshold_read_44384 rts_threshold_read 3 44384 NULL
+aoedev_flush_44398 aoedev_flush 2 44398 NULL
++strlcpy_44400 strlcpy 3 44400 NULL
+drm_buffer_alloc_44405 drm_buffer_alloc 2 44405 NULL
+osst_do_scsi_44410 osst_do_scsi 4 44410 NULL
++write_file_debug_44476 write_file_debug 3 44476 NULL
+btrfs_chunk_item_size_44478 btrfs_chunk_item_size 0-1 44478 NULL
+sdio_align_size_44489 sdio_align_size 0-2 44489 NULL
++ath6kl_tm_rx_report_44494 ath6kl_tm_rx_report 3 44494 NULL
+ieee80211_if_read_dropped_frames_ttl_44500 ieee80211_if_read_dropped_frames_ttl 3 44500 NULL
++xfrm_sa_len_44502 xfrm_sa_len 0 44502 NULL
++ac_register_board_44504 ac_register_board 3 44504 NULL
+security_getprocattr_44505 security_getprocattr 0 44505 NULL nohasharray
+iwl_dbgfs_sram_read_44505 iwl_dbgfs_sram_read 3 44505 &security_getprocattr_44505
+spidev_write_44510 spidev_write 3 44510 NULL
+sys_msgsnd_44537 sys_msgsnd 3 44537 NULL nohasharray
+comm_write_44537 comm_write 3 44537 &sys_msgsnd_44537
-+snd_pcm_alloc_vmalloc_buffer_44595 snd_pcm_alloc_vmalloc_buffer 2 44595 NULL
-+slip_compat_ioctl_44599 slip_compat_ioctl 4 44599 NULL
++snd_pcm_drop_44542 snd_pcm_drop 0 44542 NULL
++dbg_chk_pnode_44555 dbg_chk_pnode 0 44555 NULL
++sysfs_add_one_44629 sysfs_add_one 0 44629 NULL
+cfpkt_add_body_44630 cfpkt_add_body 3 44630 NULL
-+ext2_new_block_44645 ext2_new_block 2 44645 NULL
++ext2_new_block_44645 ext2_new_block 2-0 44645 NULL
+alloc_ctrl_packet_44667 alloc_ctrl_packet 1 44667 NULL
++sysfs_create_link_44685 sysfs_create_link 0 44685 NULL
+ts_read_44687 ts_read 3 44687 NULL
-+security_member_sid_44712 security_member_sid 3 44712 NULL
++i915_wait_request_44703 i915_wait_request 0 44703 NULL
++__ocfs2_rotate_tree_left_44705 __ocfs2_rotate_tree_left 0 44705 NULL
++__generic_block_fiemap_44713 __generic_block_fiemap 4 44713 NULL
+mempool_create_node_44715 mempool_create_node 1 44715 NULL
+_zd_iowrite32v_locked_44725 _zd_iowrite32v_locked 3 44725 NULL
+clusterip_proc_write_44729 clusterip_proc_write 3 44729 NULL
@@ -107467,25 +108855,30 @@ index 0000000..6fcc08d
+key_tx_rx_count_read_44742 key_tx_rx_count_read 3 44742 NULL
+tnode_new_44757 tnode_new 3 44757 NULL nohasharray
+pty_write_44757 pty_write 3 44757 &tnode_new_44757
-+__videobuf_copy_stream_44769 __videobuf_copy_stream 4 44769 NULL
++__videobuf_copy_stream_44769 __videobuf_copy_stream 4-0 44769 NULL
+sctp_setsockopt_44788 sctp_setsockopt 5 44788 NULL
+rx_dropped_read_44799 rx_dropped_read 3 44799 NULL
++x25_pacsize_to_bytes_44812 x25_pacsize_to_bytes 0 44812 NULL
+sisusb_write_44834 sisusb_write 3 44834 NULL
+nl80211_send_unprot_disassoc_44846 nl80211_send_unprot_disassoc 4 44846 NULL
++cubic_root_44848 cubic_root 1 44848 NULL
++qib_verbs_send_dma_44850 qib_verbs_send_dma 6 44850 NULL
++init_rs_44873 init_rs 1 44873 NULL
+skb_availroom_44883 skb_availroom 0 44883 NULL
+nf_bridge_encap_header_len_44890 nf_bridge_encap_header_len 0 44890 NULL
++ocfs2_wait_for_mask_44893 ocfs2_wait_for_mask 0 44893 NULL
+do_tty_write_44896 do_tty_write 5 44896 NULL
++_snd_pcm_hw_param_last_44947 _snd_pcm_hw_param_last 0 44947 NULL
+tx_queue_status_read_44978 tx_queue_status_read 3 44978 NULL
+ftdi_process_packet_45005 ftdi_process_packet 5 45005 NULL
++i915_gem_do_execbuffer_45012 i915_gem_do_execbuffer 0 45012 NULL
+read_block_bitmap_45021 read_block_bitmap 2 45021 NULL nohasharray
-+ptrace_writedata_45021 ptrace_writedata 4-3 45021 &read_block_bitmap_45021
++ptrace_writedata_45021 ptrace_writedata 4 45021 &read_block_bitmap_45021
+vhci_get_user_45039 vhci_get_user 3 45039 NULL
+sel_write_user_45060 sel_write_user 3 45060 NULL
-+snd_mixart_BA0_read_45069 snd_mixart_BA0_read 5 45069 NULL nohasharray
-+do_video_ioctl_45069 do_video_ioctl 3 45069 &snd_mixart_BA0_read_45069
++snd_mixart_BA0_read_45069 snd_mixart_BA0_read 5 45069 NULL
++ata_tdev_add_45079 ata_tdev_add 0 45079 NULL
+orig_hash_del_if_45080 orig_hash_del_if 2 45080 NULL
-+au_sbend_45097 au_sbend 0 45097 NULL
-+alternate_node_alloc_45100 alternate_node_alloc 0 45100 NULL
+usbdev_read_45114 usbdev_read 3 45114 NULL
+send_to_tty_45141 send_to_tty 3 45141 NULL
+crypto_aead_blocksize_45148 crypto_aead_blocksize 0 45148 NULL
@@ -107495,22 +108888,28 @@ index 0000000..6fcc08d
+ocfs2_dq_frozen_trigger_45159 ocfs2_dq_frozen_trigger 4 45159 NULL
+tomoyo_write_self_45161 tomoyo_write_self 3 45161 NULL
+sta_agg_status_write_45164 sta_agg_status_write 3 45164 NULL
-+snd_sb_csp_load_user_45190 snd_sb_csp_load_user 3 45190 NULL
++sctp_pack_cookie_45190 sctp_pack_cookie 6 45190 NULL nohasharray
++snd_sb_csp_load_user_45190 snd_sb_csp_load_user 3 45190 &sctp_pack_cookie_45190
+num_clusters_in_group_45194 num_clusters_in_group 2 45194 NULL
+add_child_45201 add_child 4 45201 NULL
+iso_alloc_urb_45206 iso_alloc_urb 4-5 45206 NULL
+spi_alloc_master_45223 spi_alloc_master 2 45223 NULL
+ieee80211_if_read_peer_45233 ieee80211_if_read_peer 3 45233 NULL
-+vcc_compat_ioctl_45291 vcc_compat_ioctl 3 45291 NULL
++event_enable_write_45238 event_enable_write 3 45238 NULL
++gfs2_fiemap_45282 gfs2_fiemap 4 45282 NULL
+snd_pcm_oss_sync1_45298 snd_pcm_oss_sync1 2 45298 NULL
++e1000_tx_map_45309 e1000_tx_map 5 45309 NULL
+copy_vm86_regs_from_user_45340 copy_vm86_regs_from_user 3 45340 NULL
+lane2_associate_req_45398 lane2_associate_req 4 45398 NULL
++__data_list_add_45403 __data_list_add 0 45403 NULL
+keymap_store_45406 keymap_store 4 45406 NULL
++ath6kl_wmi_send_probe_response_cmd_45422 ath6kl_wmi_send_probe_response_cmd 5 45422 NULL
+tty_buffer_alloc_45437 tty_buffer_alloc 2 45437 NULL
+do_mmap_pgoff_45441 do_mmap_pgoff 0 45441 NULL
+__node_remap_45458 __node_remap 4 45458 NULL
+rds_ib_set_wr_signal_state_45463 rds_ib_set_wr_signal_state 0 45463 NULL
+tracing_read_dyn_info_45468 tracing_read_dyn_info 3 45468 NULL
++snd_pcm_hwsync_45479 snd_pcm_hwsync 0 45479 NULL
+rds_message_copy_from_user_45510 rds_message_copy_from_user 3 45510 NULL
+sys_lgetxattr_45531 sys_lgetxattr 4 45531 NULL
+cgroup_read_u64_45532 cgroup_read_u64 5 45532 NULL
@@ -107522,100 +108921,129 @@ index 0000000..6fcc08d
+stats_dot11ACKFailureCount_read_45558 stats_dot11ACKFailureCount_read 3 45558 NULL
+posix_acl_xattr_size_45561 posix_acl_xattr_size 0-1 45561 NULL
+venus_rmdir_45564 venus_rmdir 4 45564 NULL
-+ipath_create_cq_45586 ipath_create_cq 2 45586 NULL
+rdma_set_ib_paths_45592 rdma_set_ib_paths 3 45592 NULL
+hidraw_get_report_45609 hidraw_get_report 3 45609 NULL
+audit_log_n_hex_45617 audit_log_n_hex 3 45617 NULL
-+ebitmap_next_positive_45651 ebitmap_next_positive 3 45651 NULL
++i915_gem_evict_everything_45629 i915_gem_evict_everything 0 45629 NULL
++ebitmap_next_positive_45651 ebitmap_next_positive 3-0 45651 NULL
++ext4_reserve_inode_write_45654 ext4_reserve_inode_write 0 45654 NULL
+dma_map_cont_45668 dma_map_cont 5 45668 NULL
+compat_mpctl_ioctl_45671 compat_mpctl_ioctl 2 45671 NULL
+dgram_sendmsg_45679 dgram_sendmsg 4 45679 NULL
+smk_write_ambient_45691 smk_write_ambient 3 45691 NULL
-+dm_compat_ctl_ioctl_45692 dm_compat_ctl_ioctl 3 45692 NULL
+ip_nat_sip_expect_45693 ip_nat_sip_expect 7 45693 NULL
+unix_dgram_sendmsg_45699 unix_dgram_sendmsg 4 45699 NULL nohasharray
-+bscnl_emit_45699 bscnl_emit 2-5-0 45699 &unix_dgram_sendmsg_45699
++bscnl_emit_45699 bscnl_emit 2-5-0 45699 &unix_dgram_sendmsg_45699 nohasharray
++__spin_time_accum_45699 __spin_time_accum 1 45699 &bscnl_emit_45699
+sg_proc_write_adio_45704 sg_proc_write_adio 3 45704 NULL
+dvb_ca_en50221_init_45718 dvb_ca_en50221_init 4 45718 NULL
+snd_cs46xx_io_read_45734 snd_cs46xx_io_read 5 45734 NULL
+v4l2_ctrl_new_std_45748 v4l2_ctrl_new_std 5 45748 NULL
+lkdtm_debugfs_read_45752 lkdtm_debugfs_read 3 45752 NULL
-+nilfs_compat_ioctl_45769 nilfs_compat_ioctl 3 45769 NULL
++i915_gem_object_flush_gpu_write_domain_45755 i915_gem_object_flush_gpu_write_domain 0 45755 NULL
+alloc_ts_config_45775 alloc_ts_config 1 45775 NULL
++dma_alloc_coherent_mask_45787 dma_alloc_coherent_mask 0 45787 NULL
+nfs_idmap_request_key_45791 nfs_idmap_request_key 2 45791 NULL
+raw_setsockopt_45800 raw_setsockopt 5 45800 NULL
++rds_tcp_inc_copy_to_user_45804 rds_tcp_inc_copy_to_user 3 45804 NULL
+lbs_rdbbp_read_45805 lbs_rdbbp_read 3 45805 NULL
+pcpu_alloc_alloc_info_45813 pcpu_alloc_alloc_info 1-2 45813 NULL
+fm_v4l2_init_video_device_45821 fm_v4l2_init_video_device 2 45821 NULL
++r600_texture_size_45823 r600_texture_size 6-5-4 45823 NULL
+amthi_read_45831 amthi_read 4 45831 NULL
++audit_make_reply_45835 audit_make_reply 7 45835 NULL
++__ip_select_ident_45851 __ip_select_ident 3 45851 NULL
++smp_build_cmd_45853 smp_build_cmd 3 45853 NULL
+isdn_write_45863 isdn_write 3 45863 NULL
+rbd_get_num_segments_45864 rbd_get_num_segments 0-2-3 45864 NULL
+unpack_orig_pfns_45867 unpack_orig_pfns 0 45867 NULL
++tpm_config_in_45880 tpm_config_in 0 45880 NULL
+get_rdac_req_45882 get_rdac_req 3 45882 NULL
+ocfs2_xattr_block_find_45891 ocfs2_xattr_block_find 0 45891 NULL
-+qla4_8xxx_pci_mem_write_2M_45906 qla4_8xxx_pci_mem_write_2M 2 45906 NULL
++__svc_create_45903 __svc_create 3 45903 NULL
+dbgfs_frame_45917 dbgfs_frame 3 45917 NULL
+alloc_mr_45935 alloc_mr 1 45935 NULL
++cma_user_data_offset_45954 cma_user_data_offset 0 45954 NULL
++ndisc_opt_addr_space_45959 ndisc_opt_addr_space 0 45959 NULL
+rb_simple_read_45972 rb_simple_read 3 45972 NULL
+ezusb_writememory_45976 ezusb_writememory 4 45976 NULL
+ioat2_dca_count_dca_slots_45984 ioat2_dca_count_dca_slots 0 45984 NULL
+sierra_setup_urb_46029 sierra_setup_urb 5 46029 NULL
+get_free_entries_46030 get_free_entries 1 46030 NULL
-+__access_remote_vm_46031 __access_remote_vm 0-5-3 46031 NULL
++__access_remote_vm_46031 __access_remote_vm 0 46031 NULL
+snd_emu10k1x_ptr_read_46049 snd_emu10k1x_ptr_read 0 46049 NULL
+acpi_register_gsi_xen_hvm_46052 acpi_register_gsi_xen_hvm 2 46052 NULL
++run_card_proc_46057 run_card_proc 0 46057 NULL
+line6_midibuf_bytes_used_46059 line6_midibuf_bytes_used 0 46059 NULL
-+__ocfs2_move_extent_46060 __ocfs2_move_extent 5-6 46060 NULL nohasharray
++__ocfs2_move_extent_46060 __ocfs2_move_extent 0-3-4-6-5 46060 NULL nohasharray
+dma_tx_errors_read_46060 dma_tx_errors_read 3 46060 &__ocfs2_move_extent_46060
++slhc_toss_46066 slhc_toss 0 46066 NULL
++mgmt_event_46069 mgmt_event 4 46069 NULL
++xfrm_sadinfo_msgsize_46073 xfrm_sadinfo_msgsize 0 46073 NULL
+sel_commit_bools_write_46077 sel_commit_bools_write 3 46077 NULL
+ata_host_alloc_46094 ata_host_alloc 2 46094 NULL
-+pkt_ctl_compat_ioctl_46110 pkt_ctl_compat_ioctl 3 46110 NULL
+mlx4_ib_alloc_fast_reg_page_list_46119 mlx4_ib_alloc_fast_reg_page_list 2 46119 NULL
++ddp_clear_map_46152 ddp_clear_map 4 46152 NULL
+__netlink_change_ngroups_46156 __netlink_change_ngroups 2 46156 NULL
-+qlcnic_alloc_msix_entries_46160 qlcnic_alloc_msix_entries 2 46160 NULL
-+kmalloc_section_memmap_46168 kmalloc_section_memmap 3 46168 NULL
++qlcnic_alloc_msix_entries_46160 qlcnic_alloc_msix_entries 2 46160 NULL nohasharray
++alloc_iova_46160 alloc_iova 2 46160 &qlcnic_alloc_msix_entries_46160
+vxge_os_dma_malloc_46184 vxge_os_dma_malloc 2 46184 NULL
-+fillvdir_46193 fillvdir 3 46193 NULL
+i2400m_op_msg_from_user_46213 i2400m_op_msg_from_user 4 46213 NULL
+tm6000_i2c_recv_regs_46215 tm6000_i2c_recv_regs 5 46215 NULL
+dsp_write_46218 dsp_write 2 46218 NULL
++tx_abort_46232 tx_abort 0 46232 NULL
++xen_setup_msi_irqs_46245 xen_setup_msi_irqs 2 46245 NULL
++__le64_to_cpup_46257 __le64_to_cpup 0 46257 NULL
++ReadReg_46277 ReadReg 0 46277 NULL
++pep_alloc_skb_46303 pep_alloc_skb 3 46303 NULL
++pvclock_clocksource_read_46308 pvclock_clocksource_read 0 46308 NULL
+sg_proc_write_dressz_46316 sg_proc_write_dressz 3 46316 NULL
+__hwahc_dev_set_key_46328 __hwahc_dev_set_key 5 46328 NULL
+iwl_dbgfs_chain_noise_read_46355 iwl_dbgfs_chain_noise_read 3 46355 NULL
+smk_write_direct_46363 smk_write_direct 3 46363 NULL
+__iommu_calculate_agaw_46366 __iommu_calculate_agaw 2 46366 NULL
++fib_nlmsg_size_46383 fib_nlmsg_size 0 46383 NULL
+fuse_file_aio_write_46399 fuse_file_aio_write 4 46399 NULL
+crypto_ablkcipher_reqsize_46411 crypto_ablkcipher_reqsize 0 46411 NULL
++ttm_page_pool_get_pages_46431 ttm_page_pool_get_pages 0-5 46431 NULL
+cp210x_set_config_46447 cp210x_set_config 4 46447 NULL
++parport_pc_fifo_write_block_46455 parport_pc_fifo_write_block 3 46455 NULL
+filldir64_46469 filldir64 3 46469 NULL
++ocfs2_reserve_clusters_with_limit_46479 ocfs2_reserve_clusters_with_limit 0 46479 NULL
++p9pdu_vreadf_46500 p9pdu_vreadf 0 46500 NULL
+mthca_alloc_cq_buf_46512 mthca_alloc_cq_buf 3 46512 NULL
-+bdx_rxdb_create_46525 bdx_rxdb_create 1 46525 NULL
++uio_get_minor_46522 uio_get_minor 0 46522 NULL
+nl80211_send_rx_assoc_46538 nl80211_send_rx_assoc 4 46538 NULL
+mv_get_hc_count_46554 mv_get_hc_count 0 46554 NULL
+link_send_sections_long_46556 link_send_sections_long 4 46556 NULL
++ubi_wl_put_peb_46565 ubi_wl_put_peb 0 46565 NULL
+dn_current_mss_46574 dn_current_mss 0 46574 NULL
+serverworks_create_gatt_pages_46582 serverworks_create_gatt_pages 1 46582 NULL
+vscnprintf_46617 vscnprintf 0-2 46617 NULL
++__kfifo_out_r_46623 __kfifo_out_r 3 46623 NULL
+request_key_async_with_auxdata_46624 request_key_async_with_auxdata 4 46624 NULL
+aircable_process_packet_46639 aircable_process_packet 5 46639 NULL
++pci_enable_device_46642 pci_enable_device 0 46642 NULL
+cx18_v4l2_ioctl_46647 cx18_v4l2_ioctl 2 46647 NULL
-+av7110_ipack_init_46655 av7110_ipack_init 2 46655 NULL
++e1000_tx_map_46672 e1000_tx_map 4 46672 NULL
+iwl4965_ucode_rx_stats_read_46676 iwl4965_ucode_rx_stats_read 3 46676 NULL
++l2cap_parse_conf_rsp_46683 l2cap_parse_conf_rsp 0 46683 NULL
+alloc_data_packet_46698 alloc_data_packet 1 46698 NULL
+__ilog2_u32_46706 __ilog2_u32 0 46706 NULL
+erst_dbg_write_46715 erst_dbg_write 3 46715 NULL
++ide_read_status_46719 ide_read_status 0 46719 NULL
++ctnetlink_nlmsg_size_46736 ctnetlink_nlmsg_size 0 46736 NULL
++snd_ymfpci_readl_46738 snd_ymfpci_readl 0 46738 NULL
+hest_ghes_dev_register_46766 hest_ghes_dev_register 1 46766 NULL
+int_hw_irq_en_46776 int_hw_irq_en 3 46776 NULL
+_xfs_buf_get_pages_46811 _xfs_buf_get_pages 2 46811 NULL
+xfs_iroot_realloc_46826 xfs_iroot_realloc 2 46826 NULL
-+security_validtrans_handle_fail_46843 security_validtrans_handle_fail 4 46843 NULL
+ieee80211_rx_radiotap_len_46846 ieee80211_rx_radiotap_len 0 46846 NULL
+spi_async_46857 spi_async 0 46857 NULL
+vsnprintf_46863 vsnprintf 0 46863 NULL
-+rvmalloc_46873 rvmalloc 1 46873 NULL
+hpi_read_word_nolock_46881 hpi_read_word_nolock 0 46881 NULL
+sk_mem_pages_46896 sk_mem_pages 0-1 46896 NULL
-+ol_dqblk_off_46904 ol_dqblk_off 3-2 46904 NULL
++ol_dqblk_off_46904 ol_dqblk_off 2-3 46904 NULL
+tracing_ctrl_read_46922 tracing_ctrl_read 3 46922 NULL
+fb_write_46924 fb_write 3 46924 NULL
+btmrvl_curpsmode_read_46939 btmrvl_curpsmode_read 3 46939 NULL
@@ -107623,29 +109051,29 @@ index 0000000..6fcc08d
+__sctp_setsockopt_connectx_46949 __sctp_setsockopt_connectx 3 46949 NULL
+crypto_tfm_alg_alignmask_46971 crypto_tfm_alg_alignmask 0 46971 NULL
+ath6kl_add_bss_if_needed_46978 ath6kl_add_bss_if_needed 5 46978 NULL
++strlcat_46985 strlcat 3 46985 NULL
+gfs2_xattr_system_set_46996 gfs2_xattr_system_set 4 46996 NULL nohasharray
+sel_write_bool_46996 sel_write_bool 3 46996 &gfs2_xattr_system_set_46996
+ttm_bo_io_47000 ttm_bo_io 5 47000 NULL
+blk_rq_map_kern_47004 blk_rq_map_kern 4 47004 NULL
-+__map_single_47020 __map_single 3-4-7 47020 NULL
-+cx231xx_init_bulk_47024 cx231xx_init_bulk 3-2 47024 NULL
-+ufs_new_fragments_47070 ufs_new_fragments 3-5-4 47070 NULL
-+unmap_class_47076 unmap_class 0-1 47076 NULL
++__map_single_47020 __map_single 3-4-7-0 47020 NULL
++cx231xx_init_bulk_47024 cx231xx_init_bulk 3-2-4 47024 NULL
++ufs_new_fragments_47070 ufs_new_fragments 4-3-5 47070 NULL nohasharray
++ext4_xattr_list_entries_47070 ext4_xattr_list_entries 0 47070 &ufs_new_fragments_47070
++xfrm_report_msgsize_47077 xfrm_report_msgsize 0 47077 NULL
+scsi_deactivate_tcq_47086 scsi_deactivate_tcq 2 47086 NULL
++set_params_47113 set_params 0 47113 NULL
+mousedev_read_47123 mousedev_read 3 47123 NULL
+ses_recv_diag_47143 ses_recv_diag 4 47143 NULL nohasharray
+acpi_ut_initialize_buffer_47143 acpi_ut_initialize_buffer 2 47143 &ses_recv_diag_47143
+cxio_init_resource_fifo_random_47151 cxio_init_resource_fifo_random 3 47151 NULL
-+mxms_headerlen_47161 mxms_headerlen 0 47161 NULL
+rs_sta_dbgfs_rate_scale_data_read_47165 rs_sta_dbgfs_rate_scale_data_read 3 47165 NULL
+svc_pool_map_alloc_arrays_47181 svc_pool_map_alloc_arrays 2 47181 NULL
+can_set_system_xattr_47182 can_set_system_xattr 4 47182 NULL
-+ioremap_cache_47189 ioremap_cache 1-2 47189 NULL
-+security_change_sid_47202 security_change_sid 3 47202 NULL
-+module_alloc_update_bounds_47205 module_alloc_update_bounds 1 47205 NULL
+l2headersize_47238 l2headersize 0 47238 NULL
+options_write_47243 options_write 3 47243 NULL
+portcntrs_1_read_47253 portcntrs_1_read 3 47253 NULL
++p9pdu_readf_47269 p9pdu_readf 0 47269 NULL
+ablkcipher_next_slow_47274 ablkcipher_next_slow 4-3 47274 NULL
+tty_audit_log_47280 tty_audit_log 8 47280 NULL
+vsnprintf_47291 vsnprintf 0 47291 NULL
@@ -107657,33 +109085,37 @@ index 0000000..6fcc08d
+__bio_map_kern_47379 __bio_map_kern 3 47379 NULL
+trace_options_core_read_47390 trace_options_core_read 3 47390 NULL
+pfkey_sendmsg_47394 pfkey_sendmsg 4 47394 NULL
++lbs_wrmac_write_47400 lbs_wrmac_write 3 47400 NULL
+ocfs2_resv_end_47408 ocfs2_resv_end 0 47408 NULL
+crypto_ablkcipher_alignmask_47410 crypto_ablkcipher_alignmask 0 47410 NULL
-+vzalloc_47421 vzalloc 1 47421 NULL
++lbs_wrrf_write_47418 lbs_wrrf_write 3 47418 NULL
+posix_acl_from_disk_47445 posix_acl_from_disk 2 47445 NULL
-+environ_read_47451 environ_read 3 47451 NULL
-+newpart_47485 newpart 6 47485 NULL
++newpart_47485 newpart 6-4 47485 NULL
+core_sys_select_47494 core_sys_select 1 47494 NULL
+alloc_arraycache_47505 alloc_arraycache 2 47505 NULL
+unlink_simple_47506 unlink_simple 3 47506 NULL
+ufs_inode_getblock_47512 ufs_inode_getblock 4 47512 NULL
++snd_pcm_resume_47530 snd_pcm_resume 0 47530 NULL
+vscnprintf_47533 vscnprintf 0-2 47533 NULL nohasharray
+process_vm_rw_47533 process_vm_rw 3-5 47533 &vscnprintf_47533
++einj_check_trigger_header_47534 einj_check_trigger_header 0 47534 NULL
+ieee80211_if_fmt_min_discovery_timeout_47539 ieee80211_if_fmt_min_discovery_timeout 3 47539 NULL
-+cycx_setup_47562 cycx_setup 4 47562 NULL
++set_printer_interface_47551 set_printer_interface 0 47551 NULL
+read_ldt_47570 read_ldt 2 47570 NULL
-+pci_iomap_47575 pci_iomap 3 47575 NULL
-+rpipe_get_idx_47579 rpipe_get_idx 2 47579 NULL
++rpipe_get_idx_47579 rpipe_get_idx 2-0 47579 NULL
++vendorextnReadSection_47583 vendorextnReadSection 0 47583 NULL
+ext4_kvzalloc_47605 ext4_kvzalloc 1 47605 NULL
-+sctp_ssnmap_new_47608 sctp_ssnmap_new 1-2 47608 NULL
++sctp_ssnmap_new_47608 sctp_ssnmap_new 2-1 47608 NULL
+uea_request_47613 uea_request 4 47613 NULL
+cache_read_pipefs_47615 cache_read_pipefs 3 47615 NULL
+kvm_pv_mmu_write_47630 kvm_pv_mmu_write 2 47630 NULL
+ivtv_serialized_ioctl_47632 ivtv_serialized_ioctl 3 47632 NULL
+irq_set_chip_47638 irq_set_chip 1 47638 NULL
+__build_packet_message_47643 __build_packet_message 3-9 47643 NULL
-+compute_sid_handle_invalid_context_47647 compute_sid_handle_invalid_context 3 47647 NULL
-+bits_to_user_47733 bits_to_user 2-3 47733 NULL
++snd_pcm_info_47699 snd_pcm_info 0 47699 NULL
++packet_recvmsg_47700 packet_recvmsg 4 47700 NULL nohasharray
++ipath_format_hwmsg_47700 ipath_format_hwmsg 2 47700 &packet_recvmsg_47700
++bits_to_user_47733 bits_to_user 3-2 47733 NULL
+carl9170_debugfs_read_47738 carl9170_debugfs_read 3 47738 NULL
+ir_prepare_write_buffer_47747 ir_prepare_write_buffer 3 47747 NULL
+mvumi_alloc_mem_resource_47750 mvumi_alloc_mem_resource 3 47750 NULL
@@ -107694,29 +109126,33 @@ index 0000000..6fcc08d
+sst_prepare_output_buffers_47781 sst_prepare_output_buffers 4 47781 NULL
+tt_len_47789 tt_len 0-1 47789 NULL
+stmmac_set_bfsize_47834 stmmac_set_bfsize 0 47834 NULL
++ath6kl_wmi_set_appie_cmd_47855 ath6kl_wmi_set_appie_cmd 4 47855 NULL
+ubifs_unpack_nnode_47866 ubifs_unpack_nnode 0 47866 NULL
+vhci_read_47878 vhci_read 3 47878 NULL
+keyctl_instantiate_key_common_47889 keyctl_instantiate_key_common 4 47889 NULL
+osd_req_read_sg_47905 osd_req_read_sg 5 47905 NULL
+comedi_write_47926 comedi_write 3 47926 NULL
+nf_nat_ftp_47948 nf_nat_ftp 5 47948 NULL
++cfg80211_testmode_alloc_reply_skb_47966 cfg80211_testmode_alloc_reply_skb 2 47966 NULL
+iwl_dbgfs_ucode_tracing_read_47983 iwl_dbgfs_ucode_tracing_read 3 47983 NULL nohasharray
+mempool_resize_47983 mempool_resize 2 47983 &iwl_dbgfs_ucode_tracing_read_47983
+pnpacpi_parse_allocated_irqresource_47986 pnpacpi_parse_allocated_irqresource 2 47986 NULL
-+dbg_port_buf_47990 dbg_port_buf 2 47990 NULL nohasharray
-+mgmt_pending_add_47990 mgmt_pending_add 5 47990 &dbg_port_buf_47990
++mgmt_pending_add_47990 mgmt_pending_add 5 47990 NULL nohasharray
++dbg_port_buf_47990 dbg_port_buf 2 47990 &mgmt_pending_add_47990
+ib_umad_write_47993 ib_umad_write 3 47993 NULL
++ocfs2_find_refcount_split_pos_48001 ocfs2_find_refcount_split_pos 0 48001 NULL
+ffs_epfile_write_48014 ffs_epfile_write 3 48014 NULL
+bio_integrity_set_tag_48035 bio_integrity_set_tag 3 48035 NULL
+pppoe_sendmsg_48039 pppoe_sendmsg 4 48039 NULL
+wpan_phy_alloc_48056 wpan_phy_alloc 1 48056 NULL
++ocfs2_change_refcount_rec_48059 ocfs2_change_refcount_rec 0 48059 NULL
+posix_acl_alloc_48063 posix_acl_alloc 1 48063 NULL
+c4iw_init_resource_fifo_48090 c4iw_init_resource_fifo 3 48090 NULL
+mmc_alloc_host_48097 mmc_alloc_host 1 48097 NULL
+skb_copy_datagram_const_iovec_48102 skb_copy_datagram_const_iovec 4-2-5 48102 NULL
+vmw_framebuffer_surface_dirty_48132 vmw_framebuffer_surface_dirty 6 48132 NULL
-+rtsx_read_cfg_seq_48139 rtsx_read_cfg_seq 5-3 48139 NULL
+dn_fib_count_nhs_48145 dn_fib_count_nhs 0 48145 NULL
++__tcp_push_pending_frames_48148 __tcp_push_pending_frames 2 48148 NULL
+bitmap_onto_48152 bitmap_onto 4 48152 NULL
+isr_dma1_done_read_48159 isr_dma1_done_read 3 48159 NULL
+ocfs2_find_next_zero_bit_unaligned_48170 ocfs2_find_next_zero_bit_unaligned 2-3 48170 NULL
@@ -107727,83 +109163,107 @@ index 0000000..6fcc08d
+read_file_recv_48232 read_file_recv 3 48232 NULL
+blk_rq_pos_48233 blk_rq_pos 0 48233 NULL
+nfsctl_transaction_read_48250 nfsctl_transaction_read 3 48250 NULL
++usb_hcd_submit_urb_48256 usb_hcd_submit_urb 0 48256 NULL
+cache_write_pipefs_48270 cache_write_pipefs 3 48270 NULL
++trace_options_write_48275 trace_options_write 3 48275 NULL
+pkt_bio_alloc_48284 pkt_bio_alloc 1 48284 NULL
+lpfc_idiag_extacc_read_48301 lpfc_idiag_extacc_read 3 48301 NULL
+timblogiw_read_48305 timblogiw_read 3 48305 NULL
+hash_setkey_48310 hash_setkey 3 48310 NULL
++bcm_download_config_file_48313 bcm_download_config_file 0 48313 NULL
+skb_add_data_48363 skb_add_data 3 48363 NULL
++iscsi_complete_pdu_48372 iscsi_complete_pdu 4 48372 NULL
+lbs_debugfs_write_48413 lbs_debugfs_write 3 48413 NULL
-+aufs_compat_ioctl_dir_48420 aufs_compat_ioctl_dir 3 48420 NULL
++snd_power_wait_48422 snd_power_wait 0 48422 NULL
+pwr_tx_without_ps_read_48423 pwr_tx_without_ps_read 3 48423 NULL
+nfs4_alloc_pages_48426 nfs4_alloc_pages 1 48426 NULL
+wm8994_write_48439 wm8994_write 3 48439 NULL
+tun_recvmsg_48463 tun_recvmsg 4 48463 NULL
++ipath_format_hwerrors_48487 ipath_format_hwerrors 5 48487 NULL
+r8712_usbctrl_vendorreq_48489 r8712_usbctrl_vendorreq 6 48489 NULL
+send_control_msg_48498 send_control_msg 6 48498 NULL
+mlx4_en_create_tx_ring_48501 mlx4_en_create_tx_ring 4 48501 NULL
-+iwl_legacy_dbgfs_status_read_48508 iwl_legacy_dbgfs_status_read 3 48508 NULL nohasharray
-+diva_os_copy_to_user_48508 diva_os_copy_to_user 4 48508 &iwl_legacy_dbgfs_status_read_48508
++diva_os_copy_to_user_48508 diva_os_copy_to_user 4 48508 NULL nohasharray
++iwl_legacy_dbgfs_status_read_48508 iwl_legacy_dbgfs_status_read 3 48508 &diva_os_copy_to_user_48508
+phantom_get_free_48514 phantom_get_free 0 48514 NULL
-+ubi_dbg_check_write_48525 ubi_dbg_check_write 5 48525 NULL
++ubi_dbg_check_write_48525 ubi_dbg_check_write 0 48525 NULL
+wiimote_hid_send_48528 wiimote_hid_send 3 48528 NULL
++drbd_bm_capacity_48530 drbd_bm_capacity 0 48530 NULL
+ext3_splice_branch_48531 ext3_splice_branch 6 48531 NULL
+ext_sd_execute_read_data_48589 ext_sd_execute_read_data 9 48589 NULL
+ufs_dtogd_48616 ufs_dtogd 0-2 48616 NULL
+do_ip_vs_set_ctl_48641 do_ip_vs_set_ctl 4 48641 NULL
+lc_create_48662 lc_create 3 48662 NULL
+aes_encrypt_packets_read_48666 aes_encrypt_packets_read 3 48666 NULL
-+sm501_create_subdev_48668 sm501_create_subdev 3-4 48668 NULL nohasharray
++ore_get_rw_state_48667 ore_get_rw_state 5 48667 NULL
++sm501_create_subdev_48668 sm501_create_subdev 4-3 48668 NULL nohasharray
+sys_setgroups_48668 sys_setgroups 1 48668 &sm501_create_subdev_48668
++ubi_eba_unmap_leb_48671 ubi_eba_unmap_leb 0 48671 NULL
++l2cap_build_cmd_48676 l2cap_build_cmd 4 48676 NULL
+hysdn_log_write_48694 hysdn_log_write 3 48694 NULL
+altera_drscan_48698 altera_drscan 2 48698 NULL
+kvm_set_irq_routing_48704 kvm_set_irq_routing 3 48704 NULL
++recv_msg_48709 recv_msg 4 48709 NULL
++lpfc_idiag_drbacc_write_48712 lpfc_idiag_drbacc_write 3 48712 NULL
++RFTrackingFiltersCorrection_48722 RFTrackingFiltersCorrection 0 48722 NULL
+disconnect_48738 disconnect 4 48738 NULL
+ath6kl_regwrite_read_48747 ath6kl_regwrite_read 3 48747 NULL
++event_buffer_read_48772 event_buffer_read 3 48772 NULL
+icmp_manip_pkt_48801 icmp_manip_pkt 2 48801 NULL
+twa_change_queue_depth_48808 twa_change_queue_depth 2 48808 NULL
++register_ftrace_profiler_48816 register_ftrace_profiler 0 48816 NULL nohasharray
++tcp_push_one_48816 tcp_push_one 2 48816 &register_ftrace_profiler_48816
+atomic_counters_read_48827 atomic_counters_read 3 48827 NULL
+azx_get_position_48841 azx_get_position 0 48841 NULL
-+vc_do_resize_48842 vc_do_resize 3-4 48842 NULL
++vc_do_resize_48842 vc_do_resize 4-3 48842 NULL
+viafb_dvp1_proc_write_48864 viafb_dvp1_proc_write 3 48864 NULL
+__ffs_ep0_read_events_48868 __ffs_ep0_read_events 3 48868 NULL
+sys_setgroups16_48882 sys_setgroups16 1 48882 NULL
+get_num_ops_48886 get_num_ops 0 48886 NULL
+ext2_alloc_branch_48889 ext2_alloc_branch 4 48889 NULL
+crypto_cipher_ctxsize_48890 crypto_cipher_ctxsize 0 48890 NULL
++mac_drv_rx_init_48898 mac_drv_rx_init 2 48898 NULL nohasharray
++joydev_handle_JSIOCSAXMAP_48898 joydev_handle_JSIOCSAXMAP 3 48898 &mac_drv_rx_init_48898
+xdi_copy_to_user_48900 xdi_copy_to_user 4 48900 NULL
+msg_hdr_sz_48908 msg_hdr_sz 0 48908 NULL
-+gdth_isa_probe_one_48925 gdth_isa_probe_one 1 48925 NULL
++snd_pcm_update_hw_ptr_48925 snd_pcm_update_hw_ptr 0 48925 NULL
+lpfc_sli4_get_els_iocb_cnt_48926 lpfc_sli4_get_els_iocb_cnt 0 48926 NULL
+event_heart_beat_read_48961 event_heart_beat_read 3 48961 NULL
+_alloc_set_attr_list_48991 _alloc_set_attr_list 4 48991 NULL
+rds_rm_size_48996 rds_rm_size 0-2 48996 NULL
+sel_write_enforce_48998 sel_write_enforce 3 48998 NULL
+xd_rw_49020 xd_rw 3-4 49020 NULL
++aic_inb_49023 aic_inb 0 49023 NULL
+transient_status_49027 transient_status 4 49027 NULL
+ubi_read_49061 ubi_read 0 49061 NULL
++l2cap_bredr_sig_cmd_49065 l2cap_bredr_sig_cmd 3 49065 NULL
+mirror_status_49073 mirror_status 4 49073 NULL
+vmx_set_msr_49090 vmx_set_msr 3 49090 NULL
+scsi_register_49094 scsi_register 2 49094 NULL
+compat_do_readv_writev_49102 compat_do_readv_writev 4 49102 NULL
++receive_client_update_packet_49104 receive_client_update_packet 3 49104 NULL
+xfrm_replay_state_esn_len_49119 xfrm_replay_state_esn_len 0 49119 NULL
+pt_read_49136 pt_read 3 49136 NULL
+iwl_legacy_dbgfs_fh_reg_read_49144 iwl_legacy_dbgfs_fh_reg_read 3 49144 NULL nohasharray
+tipc_multicast_49144 tipc_multicast 5 49144 &iwl_legacy_dbgfs_fh_reg_read_49144
-+atyfb_setup_generic_49151 atyfb_setup_generic 3 49151 NULL
+ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL
+ipw_queue_tx_init_49161 ipw_queue_tx_init 3 49161 NULL
+ext4_free_clusters_after_init_49174 ext4_free_clusters_after_init 2 49174 NULL
++__jfs_setxattr_49175 __jfs_setxattr 5 49175 NULL
+dvb_dvr_ioctl_49182 dvb_dvr_ioctl 2 49182 NULL
++root_nfs_cat_49192 root_nfs_cat 3 49192 NULL
+iwl_dbgfs_ucode_general_stats_read_49199 iwl_dbgfs_ucode_general_stats_read 3 49199 NULL
+do_jffs2_getxattr_49210 do_jffs2_getxattr 0 49210 NULL
+osd_req_add_get_attr_list_49278 osd_req_add_get_attr_list 3 49278 NULL
++__ext4_ext_dirty_49284 __ext4_ext_dirty 0 49284 NULL
+viafb_dfph_proc_write_49288 viafb_dfph_proc_write 3 49288 NULL
+uio_read_49300 uio_read 3 49300 NULL
+ocfs2_resmap_find_free_bits_49301 ocfs2_resmap_find_free_bits 3 49301 NULL
++beiscsi_session_create_49304 beiscsi_session_create 2 49304 NULL
++__intel_map_single_49338 __intel_map_single 3-2 49338 NULL
+cfpkt_setlen_49343 cfpkt_setlen 2 49343 NULL
+joydev_ioctl_common_49359 joydev_ioctl_common 2 49359 NULL
-+ocfs2_remove_btree_range_49370 ocfs2_remove_btree_range 4-5-3 49370 NULL
++ocfs2_remove_btree_range_49370 ocfs2_remove_btree_range 4-3-5 49370 NULL
+px_raw_event_49371 px_raw_event 4 49371 NULL
+iscsi_alloc_session_49390 iscsi_alloc_session 3 49390 NULL
+applesmc_create_nodes_49392 applesmc_create_nodes 2 49392 NULL
@@ -107812,102 +109272,141 @@ index 0000000..6fcc08d
+tnode_alloc_49407 tnode_alloc 1 49407 NULL
+samples_to_bytes_49426 samples_to_bytes 0-2 49426 NULL
+md_domain_init_49432 md_domain_init 2 49432 NULL
++i915_gem_object_set_to_gtt_domain_49450 i915_gem_object_set_to_gtt_domain 0 49450 NULL
++ocfs2_merge_rec_left_49455 ocfs2_merge_rec_left 0 49455 NULL
+agp_3_5_isochronous_node_enable_49465 agp_3_5_isochronous_node_enable 3 49465 NULL
+xfs_iformat_local_49472 xfs_iformat_local 4 49472 NULL
++dn_nsp_do_disc_49474 dn_nsp_do_disc 6 49474 NULL
++esp4_get_mtu_49483 esp4_get_mtu 0-2 49483 NULL
+isr_decrypt_done_read_49490 isr_decrypt_done_read 3 49490 NULL
-+emulator_write_phys_49520 emulator_write_phys 2-4 49520 NULL
-+acpi_os_ioremap_49523 acpi_os_ioremap 1-2 49523 NULL
++emulator_write_phys_49520 emulator_write_phys 2-4 49520 NULL nohasharray
++__sock_recvmsg_nosec_49520 __sock_recvmsg_nosec 0 49520 &emulator_write_phys_49520
+smk_write_access_49561 smk_write_access 3 49561 NULL
-+ntfs_malloc_nofs_49572 ntfs_malloc_nofs 1 49572 NULL
+alloc_chunk_49575 alloc_chunk 1 49575 NULL
+sctp_setsockopt_default_send_param_49578 sctp_setsockopt_default_send_param 3 49578 NULL
++readfifo_49583 readfifo 1 49583 NULL
+isr_wakeups_read_49607 isr_wakeups_read 3 49607 NULL
+heap_init_49617 heap_init 2 49617 NULL
+smk_write_doi_49621 smk_write_doi 3 49621 NULL
++port_fops_read_49626 port_fops_read 3 49626 NULL
+svm_set_msr_49643 svm_set_msr 3 49643 NULL
-+____cache_alloc_49656 ____cache_alloc 0 49656 NULL
+aa_simple_write_to_buffer_49683 aa_simple_write_to_buffer 3-4 49683 NULL
++__setup_irq_49696 __setup_irq 0 49696 NULL
+sys_gethostname_49698 sys_gethostname 2 49698 NULL
+cx2341x_ctrl_new_menu_49700 cx2341x_ctrl_new_menu 3 49700 NULL
+get_key_haup_common_49709 get_key_haup_common 4 49709 NULL
++write_pool_49718 write_pool 3 49718 NULL
+sys_fsetxattr_49736 sys_fsetxattr 4 49736 NULL
++check_frame_49741 check_frame 0 49741 NULL
+zd_usb_iowrite16v_49744 zd_usb_iowrite16v 3 49744 NULL
+btrfs_chunk_num_stripes_49751 btrfs_chunk_num_stripes 0 49751 NULL
++nci_skb_alloc_49757 nci_skb_alloc 2 49757 NULL
+key_conf_keylen_read_49758 key_conf_keylen_read 3 49758 NULL
+fuse_conn_waiting_read_49762 fuse_conn_waiting_read 3 49762 NULL
++w83977af_fir_interrupt_49775 w83977af_fir_interrupt 0 49775 NULL
+pohmelfs_send_xattr_req_49783 pohmelfs_send_xattr_req 6 49783 NULL
-+ceph_osdc_readpages_49789 ceph_osdc_readpages 10-4 49789 NULL
++ceph_osdc_readpages_49789 ceph_osdc_readpages 0-10-4 49789 NULL
++be_num_rxqs_want_49794 be_num_rxqs_want 0 49794 NULL
+nfs4_acl_new_49806 nfs4_acl_new 1 49806 NULL
+ntfs_copy_from_user_iovec_49829 ntfs_copy_from_user_iovec 3-6-0 49829 NULL
++b1dma_tolink_49834 b1dma_tolink 0 49834 NULL
++iraw_loop_49842 iraw_loop 0-1 49842 NULL
+vmw_execbuf_process_49845 vmw_execbuf_process 5 49845 NULL
+scsi_dispatch_cmd_entry_49848 scsi_dispatch_cmd_entry 3 49848 NULL
+timeradd_entry_49850 timeradd_entry 3 49850 NULL
++ubifs_destroy_tnc_subtree_49853 ubifs_destroy_tnc_subtree 0 49853 NULL
+sctp_setsockopt_bindx_49870 sctp_setsockopt_bindx 3 49870 NULL
++snd_mask_eq_49889 snd_mask_eq 0 49889 NULL
+ceph_get_caps_49890 ceph_get_caps 0 49890 NULL
-+__copy_from_user_inatomic_nocache_49921 __copy_from_user_inatomic_nocache 3 49921 NULL
++config_ep_by_speed_49939 config_ep_by_speed 0 49939 NULL
++hpi_stream_estimate_buffer_size_49965 hpi_stream_estimate_buffer_size 2 49965 NULL
++b43legacy_pio_read_49978 b43legacy_pio_read 0 49978 NULL
+ieee80211_if_fmt_dtim_count_49987 ieee80211_if_fmt_dtim_count 3 49987 NULL
++drm_buffer_copy_from_user_49990 drm_buffer_copy_from_user 3 49990 NULL
+dn_mss_from_pmtu_50011 dn_mss_from_pmtu 0-2 50011 NULL
-+ptrace_readdata_50020 ptrace_readdata 2-4 50020 NULL
+isdn_read_50021 isdn_read 3 50021 NULL
+rbd_req_write_50041 rbd_req_write 4-5 50041 NULL
-+alloc_ebda_hpc_50046 alloc_ebda_hpc 1-2 50046 NULL
++alloc_ebda_hpc_50046 alloc_ebda_hpc 2-1 50046 NULL
+fuse_conn_max_background_write_50061 fuse_conn_max_background_write 3 50061 NULL
-+vmw_surface_destroy_size_50072 vmw_surface_destroy_size 0 50072 NULL
+arch_setup_ht_irq_50073 arch_setup_ht_irq 1 50073 NULL
++call_usermodehelper_fns_50078 call_usermodehelper_fns 0 50078 NULL
++__kfifo_dma_in_prepare_50081 __kfifo_dma_in_prepare 4 50081 NULL
+dev_set_alias_50084 dev_set_alias 3 50084 NULL
+pcpu_get_vm_areas_50085 pcpu_get_vm_areas 3 50085 NULL
+sock_setsockopt_50088 sock_setsockopt 5 50088 NULL
+altera_swap_dr_50090 altera_swap_dr 2 50090 NULL
+read_file_slot_50111 read_file_slot 3 50111 NULL
+pn544_fw_read_50112 pn544_fw_read 0 50112 NULL
++rx_streaming_interval_write_50120 rx_streaming_interval_write 3 50120 NULL
++ocfs2_search_one_group_50125 ocfs2_search_one_group 0 50125 NULL
+copy_items_50140 copy_items 6 50140 NULL
-+reiserfs_bmap_count_50160 reiserfs_bmap_count 0 50160 NULL
-+aac_nark_ioremap_50163 aac_nark_ioremap 2 50163 NULL nohasharray
-+kmalloc_node_50163 kmalloc_node 1 50163 &aac_nark_ioremap_50163
++kmalloc_node_50163 kmalloc_node 1 50163 NULL
++ahd_probe_stack_size_50168 ahd_probe_stack_size 0 50168 NULL
+odev_update_50169 odev_update 2 50169 NULL
+ieee80211_if_fmt_dot11MeshHWMPRannInterval_50172 ieee80211_if_fmt_dot11MeshHWMPRannInterval 3 50172 NULL nohasharray
+ubi_resize_volume_50172 ubi_resize_volume 2 50172 &ieee80211_if_fmt_dot11MeshHWMPRannInterval_50172
+ib_send_cm_drep_50186 ib_send_cm_drep 3 50186 NULL
++mthca_buddy_init_50206 mthca_buddy_init 2 50206 NULL
+l2cap_sock_setsockopt_50207 l2cap_sock_setsockopt 5 50207 NULL
+ieee80211_skb_resize_50211 ieee80211_skb_resize 3 50211 NULL
+mon_bin_compat_ioctl_50234 mon_bin_compat_ioctl 3 50234 NULL
+sg_kmalloc_50240 sg_kmalloc 1 50240 NULL
+afs_extract_data_50261 afs_extract_data 5 50261 NULL
++qfq_calc_index_50263 qfq_calc_index 2-1 50263 NULL
+rxrpc_setsockopt_50286 rxrpc_setsockopt 5 50286 NULL nohasharray
+gart_free_coherent_50286 gart_free_coherent 4-2 50286 &rxrpc_setsockopt_50286
-+soc_codec_reg_show_50302 soc_codec_reg_show 0 50302 NULL
++soc_codec_reg_show_50302 soc_codec_reg_show 0-3 50302 NULL
++iterate_irefs_50313 iterate_irefs 0 50313 NULL
+cifs_readdata_alloc_50318 cifs_readdata_alloc 1 50318 NULL
+do_launder_page_50329 do_launder_page 0 50329 NULL
+lpfc_idiag_pcicfg_read_50334 lpfc_idiag_pcicfg_read 3 50334 NULL
+ocfs2_block_to_cluster_group_50337 ocfs2_block_to_cluster_group 2 50337 NULL nohasharray
-+snd_pcm_lib_writev_50337 snd_pcm_lib_writev 0-3 50337 &ocfs2_block_to_cluster_group_50337 nohasharray
-+au_br_alloc_50337 au_br_alloc 2 50337 &snd_pcm_lib_writev_50337
++snd_pcm_lib_writev_50337 snd_pcm_lib_writev 0-3 50337 &ocfs2_block_to_cluster_group_50337
+tpm_read_50344 tpm_read 3 50344 NULL
++sched_clock_remote_50347 sched_clock_remote 0 50347 NULL
+isdn_ppp_read_50356 isdn_ppp_read 4 50356 NULL
+unpack_u16_chunk_50357 unpack_u16_chunk 0 50357 NULL
++ocfs2_figure_insert_type_50362 ocfs2_figure_insert_type 0 50362 NULL nohasharray
++iwl_dbgfs_echo_test_write_50362 iwl_dbgfs_echo_test_write 3 50362 &ocfs2_figure_insert_type_50362
+xfrm_send_migrate_50365 xfrm_send_migrate 5 50365 NULL
+sl_alloc_bufs_50380 sl_alloc_bufs 2 50380 NULL
++inet_nlmsg_size_50399 inet_nlmsg_size 0 50399 NULL
++snd_mask_refine_last_50406 snd_mask_refine_last 0 50406 NULL
+l2tp_ip_sendmsg_50411 l2tp_ip_sendmsg 4 50411 NULL
+iscsi_create_conn_50425 iscsi_create_conn 2 50425 NULL
+pgctrl_write_50453 pgctrl_write 3 50453 NULL
++device_create_sys_dev_entry_50458 device_create_sys_dev_entry 0 50458 NULL
+cdrom_read_cdda_50478 cdrom_read_cdda 4 50478 NULL
+pwr_rcvd_awake_beacons_read_50505 pwr_rcvd_awake_beacons_read 3 50505 NULL
++fwnet_receive_packet_50537 fwnet_receive_packet 9 50537 NULL
+ath6kl_set_ap_probe_resp_ies_50539 ath6kl_set_ap_probe_resp_ies 3 50539 NULL
++usbat_flash_write_data_50553 usbat_flash_write_data 4 50553 NULL
++hme_read_desc32_50574 hme_read_desc32 0 50574 NULL
++pep_reply_50582 pep_reply 5 50582 NULL
+iwl_dbgfs_missed_beacon_read_50584 iwl_dbgfs_missed_beacon_read 3 50584 NULL
+build_inv_iommu_pages_50589 build_inv_iommu_pages 2-3 50589 NULL
++sge_rx_50594 sge_rx 3 50594 NULL
++ocfs2_split_extent_50618 ocfs2_split_extent 0 50618 NULL
++add_uevent_var_50620 add_uevent_var 0 50620 NULL
++GET_WORD_50624 GET_WORD 0 50624 NULL
+__ffs_50625 __ffs 0 50625 NULL
++macvtap_alloc_skb_50629 macvtap_alloc_skb 2-4-3 50629 NULL
+simple_transaction_get_50633 simple_transaction_get 3 50633 NULL
+ocfs2_readlink_50656 ocfs2_readlink 3 50656 NULL
++ocfs2_do_insert_extent_50658 ocfs2_do_insert_extent 0 50658 NULL
+sys_readv_50664 sys_readv 3 50664 NULL
-+ext2_try_to_allocate_with_rsv_50669 ext2_try_to_allocate_with_rsv 4-2 50669 NULL
++ext2_try_to_allocate_with_rsv_50669 ext2_try_to_allocate_with_rsv 2-4-0 50669 NULL
+btmrvl_psstate_read_50683 btmrvl_psstate_read 3 50683 NULL
++prism2_read_fid_reg_50689 prism2_read_fid_reg 0 50689 NULL
+get_wear_leveling_table_len_50712 get_wear_leveling_table_len 0 50712 NULL
+__ext3_get_inode_loc_50744 __ext3_get_inode_loc 0 50744 NULL
+skb_padto_50759 skb_padto 2 50759 NULL
+udp_manip_pkt_50770 udp_manip_pkt 2 50770 NULL
+ocfs2_xattr_block_get_50773 ocfs2_xattr_block_get 0 50773 NULL
-+tm6000_read_write_usb_50774 tm6000_read_write_usb 7 50774 NULL
-+bio_alloc_map_data_50782 bio_alloc_map_data 1-2 50782 NULL
++tm6000_read_write_usb_50774 tm6000_read_write_usb 7 50774 NULL nohasharray
++pipe_handler_request_50774 pipe_handler_request 5 50774 &tm6000_read_write_usb_50774
++bio_alloc_map_data_50782 bio_alloc_map_data 2-1 50782 NULL
++ixgbe_acquire_msix_vectors_50789 ixgbe_acquire_msix_vectors 2 50789 NULL
+tpm_write_50798 tpm_write 3 50798 NULL
+tun_do_read_50800 tun_do_read 4 50800 NULL
+write_flush_50803 write_flush 3 50803 NULL
@@ -107915,6 +109414,8 @@ index 0000000..6fcc08d
+acpi_ev_install_gpe_block_50829 acpi_ev_install_gpe_block 2 50829 NULL
+pstore_mkfile_50830 pstore_mkfile 5 50830 NULL
+create_mem_extents_50835 create_mem_extents 0 50835 NULL
++videobuf_dma_init_user_50839 videobuf_dma_init_user 4-3 50839 NULL
++ChannelConfiguration_50853 ChannelConfiguration 0 50853 NULL
+carl9170_debugfs_write_50857 carl9170_debugfs_write 3 50857 NULL
+netlbl_secattr_catmap_walk_rng_50894 netlbl_secattr_catmap_walk_rng 0-2 50894 NULL
+osd_req_write_sg_50908 osd_req_write_sg 5 50908 NULL
@@ -107923,24 +109424,32 @@ index 0000000..6fcc08d
+hash_recvmsg_50924 hash_recvmsg 4 50924 NULL
+chd_dec_fetch_cdata_50926 chd_dec_fetch_cdata 3 50926 NULL
+sock_bindtodevice_50942 sock_bindtodevice 3 50942 NULL
++mld_newpack_50950 mld_newpack 2 50950 NULL
+ocfs2_add_refcount_flag_50952 ocfs2_add_refcount_flag 6 50952 NULL
-+iwl_statistics_flag_50981 iwl_statistics_flag 0-3 50981 NULL
++sdio_uart_write_50954 sdio_uart_write 3 50954 NULL
++iwl_statistics_flag_50981 iwl_statistics_flag 3-0 50981 NULL
+timeout_write_50991 timeout_write 3 50991 NULL
+proc_write_51003 proc_write 3 51003 NULL
++jbd2_journal_extend_51012 jbd2_journal_extend 0 51012 NULL
+lbs_dev_info_51023 lbs_dev_info 3 51023 NULL
+ntfs_attr_find_51028 ntfs_attr_find 0 51028 NULL nohasharray
+fuse_conn_congestion_threshold_read_51028 fuse_conn_congestion_threshold_read 3 51028 &ntfs_attr_find_51028
+BcmGetSectionValEndOffset_51039 BcmGetSectionValEndOffset 0 51039 NULL
+dump_midi_51040 dump_midi 3 51040 NULL
++usb_get_descriptor_51041 usb_get_descriptor 0 51041 NULL
+do_arpt_set_ctl_51053 do_arpt_set_ctl 4 51053 NULL
+wusb_prf_64_51065 wusb_prf_64 7 51065 NULL
-+qla4_8xxx_pci_mem_write_direct_51079 qla4_8xxx_pci_mem_write_direct 2 51079 NULL
+jbd2_journal_init_revoke_51088 jbd2_journal_init_revoke 2 51088 NULL
+__ocfs2_find_path_51096 __ocfs2_find_path 0 51096 NULL
+read_file_wiphy_51103 read_file_wiphy 3 51103 NULL
++iscsi_nop_out_rsp_51117 iscsi_nop_out_rsp 4 51117 NULL
++xfs_file_splice_read_51121 xfs_file_splice_read 4 51121 NULL
+nfs_map_name_to_uid_51132 nfs_map_name_to_uid 3 51132 NULL
+alloc_rtllib_51136 alloc_rtllib 1 51136 NULL
++wl1271_cmd_build_probe_req_51141 wl1271_cmd_build_probe_req 3-5 51141 NULL
+xfs_trans_get_efd_51148 xfs_trans_get_efd 3 51148 NULL
++walk_page_buffers_51170 walk_page_buffers 0 51170 NULL
++snd_pcm_unlink_51210 snd_pcm_unlink 0 51210 NULL
+snd_pcm_write_51235 snd_pcm_write 3 51235 NULL
+tipc_send_51238 tipc_send 4 51238 NULL
+drm_property_create_51239 drm_property_create 4 51239 NULL
@@ -107950,15 +109459,17 @@ index 0000000..6fcc08d
+ipwireless_network_packet_received_51277 ipwireless_network_packet_received 4 51277 NULL
+zone_reclaimable_pages_51283 zone_reclaimable_pages 0 51283 NULL
+pvr2_std_id_to_str_51288 pvr2_std_id_to_str 2 51288 NULL
++xfrm_count_enc_supported_51290 xfrm_count_enc_supported 0 51290 NULL
++buffDnldVerify_51297 buffDnldVerify 0 51297 NULL
++ocfs2_read_inode_block_51319 ocfs2_read_inode_block 0 51319 NULL
+alloc_hippi_dev_51320 alloc_hippi_dev 1 51320 NULL
+ext2_xattr_get_51327 ext2_xattr_get 0 51327 NULL
-+alloc_smp_req_51337 alloc_smp_req 1 51337 NULL nohasharray
-+compat_arch_ptrace_51337 compat_arch_ptrace 3-4 51337 &alloc_smp_req_51337
++alloc_smp_req_51337 alloc_smp_req 1 51337 NULL
+ipw_get_event_log_len_51341 ipw_get_event_log_len 0 51341 NULL
+ieee80211_if_fmt_estab_plinks_51370 ieee80211_if_fmt_estab_plinks 3 51370 NULL
+radeon_kms_compat_ioctl_51371 radeon_kms_compat_ioctl 2 51371 NULL
+ieee80211_wx_set_gen_ie_51399 ieee80211_wx_set_gen_ie 3 51399 NULL
-+ceph_sync_read_51410 ceph_sync_read 3 51410 NULL
++ceph_sync_read_51410 ceph_sync_read 3-0 51410 NULL
+blk_register_region_51424 blk_register_region 1-2 51424 NULL
+mwifiex_rdeeprom_read_51429 mwifiex_rdeeprom_read 3 51429 NULL
+econet_sendmsg_51430 econet_sendmsg 4 51430 NULL
@@ -107966,34 +109477,38 @@ index 0000000..6fcc08d
+print_devstats_dot11ACKFailureCount_51443 print_devstats_dot11ACKFailureCount 3 51443 NULL
+____alloc_ei_netdev_51475 ____alloc_ei_netdev 1 51475 NULL
+xfs_buf_get_uncached_51477 xfs_buf_get_uncached 2 51477 NULL
-+acpi_pre_map_51532 acpi_pre_map 1-2 51532 NULL
++btrfs_find_space_cluster_51482 btrfs_find_space_cluster 5 51482 NULL
++kvm_fetch_guest_virt_51493 kvm_fetch_guest_virt 4-2 51493 NULL
+__alloc_eip_netdev_51549 __alloc_eip_netdev 1 51549 NULL
+ixgb_get_eeprom_len_51586 ixgb_get_eeprom_len 0 51586 NULL
-+raw_ioctl_51607 raw_ioctl 3 51607 NULL
++snd_interval_refine_first_51589 snd_interval_refine_first 0 51589 NULL
++rfcomm_tty_write_51603 rfcomm_tty_write 3 51603 NULL
+table_size_to_number_of_entries_51613 table_size_to_number_of_entries 0-1 51613 NULL
+dns_resolve_server_name_to_ip_51632 dns_resolve_server_name_to_ip 0 51632 NULL
+sctp_auth_create_key_51641 sctp_auth_create_key 1 51641 NULL
+iscsi_create_session_51647 iscsi_create_session 3 51647 NULL
-+au_fidir_realloc_51650 au_fidir_realloc 2 51650 NULL
+get_new_cssid_51665 get_new_cssid 2 51665 NULL
+ps_upsd_utilization_read_51669 ps_upsd_utilization_read 3 51669 NULL
+sctp_setsockopt_associnfo_51684 sctp_setsockopt_associnfo 3 51684 NULL
-+sfi_sysfs_install_table_51688 sfi_sysfs_install_table 1 51688 NULL
+sel_write_access_51704 sel_write_access 3 51704 NULL
++gem_alloc_skb_51715 gem_alloc_skb 2 51715 NULL
+drm_compat_ioctl_51717 drm_compat_ioctl 2 51717 NULL
+sg_read_oxfer_51724 sg_read_oxfer 3 51724 NULL
+msg_set_51725 msg_set 3 51725 NULL
++dbg_check_lpt_nodes_51727 dbg_check_lpt_nodes 0 51727 NULL
++cm4040_read_51732 cm4040_read 3 51732 NULL
+pwc_video_read_51735 pwc_video_read 3 51735 NULL
+hid_parse_report_51737 hid_parse_report 3 51737 NULL
+get_user_pages_fast_51751 get_user_pages_fast 0 51751 NULL
+ifx_spi_insert_flip_string_51752 ifx_spi_insert_flip_string 3 51752 NULL
+if_write_51756 if_write 3 51756 NULL
-+ioremap_prot_51764 ioremap_prot 1-2 51764 NULL
+iio_buffer_add_channel_sysfs_51766 iio_buffer_add_channel_sysfs 0 51766 NULL
++spin_time_accum_blocked_51769 spin_time_accum_blocked 1 51769 NULL
++swiotlb_init_with_tbl_51770 swiotlb_init_with_tbl 2 51770 NULL
++__fswab32_51781 __fswab32 0 51781 NULL
+l2cap_create_iframe_pdu_51801 l2cap_create_iframe_pdu 3 51801 NULL
+qib_alloc_devdata_51819 qib_alloc_devdata 2 51819 NULL
+buffer_from_user_51826 buffer_from_user 3 51826 NULL
-+type_attribute_bounds_av_51837 type_attribute_bounds_av 3 51837 NULL
+ioread32_51847 ioread32 0 51847 NULL nohasharray
+read_file_tgt_tx_stats_51847 read_file_tgt_tx_stats 3 51847 &ioread32_51847
+do_readv_writev_51849 do_readv_writev 4 51849 NULL
@@ -108003,13 +109518,19 @@ index 0000000..6fcc08d
+user_read_51881 user_read 3 51881 NULL
+dbAdjCtl_51888 dbAdjCtl 0 51888 NULL
+virt_to_phys_51896 virt_to_phys 0 51896 NULL
++iio_read_first_n_sw_rb_51911 iio_read_first_n_sw_rb 2 51911 NULL
++tipc_createport_51914 tipc_createport 2 51914 NULL
+dbg_status_buf_51930 dbg_status_buf 2 51930 NULL
+xfrm_alg_len_51940 xfrm_alg_len 0 51940 NULL
+scsi_get_vpd_page_51951 scsi_get_vpd_page 4 51951 NULL
++ab8500_bank_write_51960 ab8500_bank_write 3 51960 NULL
+snd_mask_min_51969 snd_mask_min 0 51969 NULL
++__blkdev_get_51972 __blkdev_get 0 51972 NULL
+twl6030_init_irq_51979 twl6030_init_irq 2 51979 NULL
+ath6kl_sdio_alloc_prep_scat_req_51986 ath6kl_sdio_alloc_prep_scat_req 2 51986 NULL
++scsi_sysfs_add_host_52010 scsi_sysfs_add_host 0 52010 NULL
+skb_copy_datagram_from_iovec_52014 skb_copy_datagram_from_iovec 4-2-5 52014 NULL
++rdmalt_52022 rdmalt 0 52022 NULL
+vxge_rx_alloc_52024 vxge_rx_alloc 3 52024 NULL
+override_release_52032 override_release 2 52032 NULL
+end_port_52042 end_port 0 52042 NULL
@@ -108018,92 +109539,137 @@ index 0000000..6fcc08d
+dvb_ringbuffer_avail_52057 dvb_ringbuffer_avail 0 52057 NULL
+nsm_get_handle_52089 nsm_get_handle 4 52089 NULL
+o2net_debug_read_52105 o2net_debug_read 3 52105 NULL
++bcm_compare_buff_contents_52124 bcm_compare_buff_contents 0 52124 NULL
+retry_count_read_52129 retry_count_read 3 52129 NULL
++snd_pcm_channel_info_user_52135 snd_pcm_channel_info_user 0 52135 NULL
+hysdn_conf_write_52145 hysdn_conf_write 3 52145 NULL nohasharray
+ext2_alloc_blocks_52145 ext2_alloc_blocks 2 52145 &hysdn_conf_write_52145
++wait_gpio_52146 wait_gpio 0 52146 NULL
++__le16_to_cpup_52155 __le16_to_cpup 0 52155 NULL
+ieee80211_if_read_dot11MeshRetryTimeout_52168 ieee80211_if_read_dot11MeshRetryTimeout 3 52168 NULL
+mga_compat_ioctl_52170 mga_compat_ioctl 2 52170 NULL
+proc_pid_readlink_52186 proc_pid_readlink 3 52186 NULL
-+do_dmabuf_dirty_ldu_52241 do_dmabuf_dirty_ldu 6 52241 NULL
++iscsi_if_send_reply_52219 iscsi_if_send_reply 7 52219 NULL nohasharray
++iwl_dbgfs_wd_timeout_write_52219 iwl_dbgfs_wd_timeout_write 3 52219 &iscsi_if_send_reply_52219
++_alloc_mISDN_skb_52232 _alloc_mISDN_skb 3 52232 NULL
++ocfs2_try_to_merge_extent_52244 ocfs2_try_to_merge_extent 0 52244 NULL
+shrink_slab_52261 shrink_slab 2-3 52261 NULL
+sisusbcon_do_font_op_52271 sisusbcon_do_font_op 9 52271 NULL
+smk_write_load_list_52280 smk_write_load_list 3 52280 NULL
-+mpol_to_str_52293 mpol_to_str 2 52293 NULL
++handle_supp_msgs_52284 handle_supp_msgs 4 52284 NULL
+atomic64_read_52300 atomic64_read 0 52300 NULL
++ath6kl_wmi_get_new_buf_52304 ath6kl_wmi_get_new_buf 1 52304 NULL
++jbd2_free_52306 jbd2_free 2 52306 NULL
++kobject_set_name_vargs_52309 kobject_set_name_vargs 0 52309 NULL
+hwflags_read_52318 hwflags_read 3 52318 NULL
-+ntfs_rl_split_52328 ntfs_rl_split 2-4 52328 NULL
++snd_pcm_hw_free_52327 snd_pcm_hw_free 0 52327 NULL
+test_unaligned_bulk_52333 test_unaligned_bulk 3 52333 NULL
+iwl3945_ucode_rx_stats_read_52340 iwl3945_ucode_rx_stats_read 3 52340 NULL
+bytes_to_frames_52362 bytes_to_frames 0-2 52362 NULL
+copy_entries_to_user_52367 copy_entries_to_user 1 52367 NULL
+iwl_dump_fh_52371 iwl_dump_fh 0 52371 NULL
++ocfs2_journal_access_eb_52377 ocfs2_journal_access_eb 0 52377 NULL
++pfkey_sockaddr_pair_size_52378 pfkey_sockaddr_pair_size 0 52378 NULL
+isdn_writebuf_stub_52383 isdn_writebuf_stub 4 52383 NULL
+jfs_setxattr_52389 jfs_setxattr 4 52389 NULL
+aer_inject_write_52399 aer_inject_write 3 52399 NULL
-+aac_rx_ioremap_52410 aac_rx_ioremap 2 52410 NULL
+cgroup_file_write_52417 cgroup_file_write 3 52417 NULL
+line6_midibuf_init_52425 line6_midibuf_init 2 52425 NULL
++hso_serial_common_create_52428 hso_serial_common_create 4 52428 NULL
+ieee80211_if_fmt_num_sta_ps_52438 ieee80211_if_fmt_num_sta_ps 3 52438 NULL
+nl80211_send_mgmt_tx_status_52445 nl80211_send_mgmt_tx_status 5 52445 NULL
-+ieee80211_alloc_txb_52477 ieee80211_alloc_txb 1 52477 NULL
++alauda_read_data_52452 alauda_read_data 3 52452 NULL
++ip6_skb_dst_mtu_52457 ip6_skb_dst_mtu 0 52457 NULL
++ieee80211_alloc_txb_52477 ieee80211_alloc_txb 1-2 52477 NULL
++usb_tranzport_write_52479 usb_tranzport_write 3 52479 NULL
+ocfs2_extend_no_holes_52483 ocfs2_extend_no_holes 3-4 52483 NULL
+skb_cow_head_52495 skb_cow_head 2 52495 NULL
+int_tasklet_entry_52500 int_tasklet_entry 3 52500 NULL
++netlbl_unlabel_init_52506 netlbl_unlabel_init 1 52506 NULL
+pm_qos_power_write_52513 pm_qos_power_write 3 52513 NULL
++bt_sock_stream_recvmsg_52518 bt_sock_stream_recvmsg 4 52518 NULL
+dup_variable_bug_52525 dup_variable_bug 3 52525 NULL
++raw_recvmsg_52529 raw_recvmsg 4 52529 NULL
++x86_setup_msi_irqs_52535 x86_setup_msi_irqs 0 52535 NULL
+dccpprobe_read_52549 dccpprobe_read 3 52549 NULL
+ocfs2_make_right_split_rec_52562 ocfs2_make_right_split_rec 3 52562 NULL
-+emit_code_52583 emit_code 0-3 52583 NULL
++debug_level_proc_write_52572 debug_level_proc_write 3 52572 NULL
++snd_pcm_sw_params_52594 snd_pcm_sw_params 0 52594 NULL
+xfs_file_buffered_aio_write_52609 xfs_file_buffered_aio_write 4 52609 NULL
+iwl_legacy_dbgfs_channels_read_52619 iwl_legacy_dbgfs_channels_read 3 52619 NULL
++__iter_shared_inline_ref_inodes_52668 __iter_shared_inline_ref_inodes 0 52668 NULL
++dirty_poll_interval_52669 dirty_poll_interval 1-2 52669 NULL
++ntfs_get_nr_significant_bytes_52688 ntfs_get_nr_significant_bytes 0 52688 NULL
++vendorextnWriteSection_52698 vendorextnWriteSection 0 52698 NULL
+cx25840_ir_rx_read_52724 cx25840_ir_rx_read 3 52724 NULL
+blkcipher_next_slow_52733 blkcipher_next_slow 3-4 52733 NULL
+relay_alloc_page_array_52735 relay_alloc_page_array 1 52735 NULL
-+__do_cache_alloc_52738 __do_cache_alloc 0 52738 NULL
++alloc_irte_52741 alloc_irte 3 52741 NULL
+carl9170_debugfs_vif_dump_read_52755 carl9170_debugfs_vif_dump_read 3 52755 NULL
++radeon_get_ib_value_52757 radeon_get_ib_value 0 52757 NULL
++debug_lpm_write_52830 debug_lpm_write 3 52830 NULL
+bl_mark_sectors_init_52831 bl_mark_sectors_init 2-3 52831 NULL
+pwr_rcvd_beacons_read_52836 pwr_rcvd_beacons_read 3 52836 NULL
+ext2_xattr_set_acl_52857 ext2_xattr_set_acl 4 52857 NULL
-+mon_bin_get_event_52863 mon_bin_get_event 4 52863 NULL
++mon_bin_get_event_52863 mon_bin_get_event 6-4 52863 NULL
++iwl_legacy_dbgfs_clear_traffic_statistics_write_52866 iwl_legacy_dbgfs_clear_traffic_statistics_write 3 52866 NULL
++qib_decode_6120_err_52876 qib_decode_6120_err 3 52876 NULL
+pvr2_ctrl_value_to_sym_internal_52881 pvr2_ctrl_value_to_sym_internal 5 52881 NULL
+cache_read_procfs_52882 cache_read_procfs 3 52882 NULL
++ubi_wl_flush_52900 ubi_wl_flush 0 52900 NULL
++create_vtbl_52909 create_vtbl 0 52909 NULL
++__kfifo_out_peek_r_52919 __kfifo_out_peek_r 3 52919 NULL
+__iio_device_attr_init_52936 __iio_device_attr_init 0 52936 NULL
+ip_nat_sdp_port_52938 ip_nat_sdp_port 6 52938 NULL
-+__nodes_remap_52951 __nodes_remap 5 52951 NULL
++norm_maxw_52951 norm_maxw 0 52951 NULL nohasharray
++__nodes_remap_52951 __nodes_remap 5 52951 &norm_maxw_52951
+store_disp_52952 store_disp 4 52952 NULL
+send_packet_52960 send_packet 4 52960 NULL
+ieee80211_if_fmt_fwded_mcast_52961 ieee80211_if_fmt_fwded_mcast 3 52961 NULL
-+compat_sock_ioctl_52964 compat_sock_ioctl 3 52964 NULL
+num_node_state_52989 num_node_state 0 52989 NULL
++xfs_rtfree_extent_53024 xfs_rtfree_extent 2-3 53024 NULL
++ocfs2_new_leaf_refcount_block_53036 ocfs2_new_leaf_refcount_block 0 53036 NULL
+bio_cur_bytes_53037 bio_cur_bytes 0 53037 NULL
++ValidateHWParmStructure_53048 ValidateHWParmStructure 0 53048 NULL
++kobject_uevent_53065 kobject_uevent 0 53065 NULL
+cfi_read_query_53066 cfi_read_query 0 53066 NULL
++iwl_dbgfs_interrupt_write_53069 iwl_dbgfs_interrupt_write 3 53069 NULL
+mwifiex_debug_read_53074 mwifiex_debug_read 3 53074 NULL
-+security_transition_sid_user_53075 security_transition_sid_user 3 53075 NULL
-+qib_resize_cq_53090 qib_resize_cq 2 53090 NULL
++pcbit_readw_53084 pcbit_readw 0 53084 NULL
++insert_new_root_53097 insert_new_root 0 53097 NULL
+line6_dumpreq_initbuf_53123 line6_dumpreq_initbuf 3 53123 NULL
+clear_capture_buf_53192 clear_capture_buf 2 53192 NULL
-+mtdoops_erase_block_53206 mtdoops_erase_block 2 53206 NULL
++__pci_enable_device_flags_53213 __pci_enable_device_flags 0 53213 NULL
++sctp_make_fwdtsn_53265 sctp_make_fwdtsn 3 53265 NULL
+btrfs_file_extent_num_bytes_53269 btrfs_file_extent_num_bytes 0 53269 NULL
+pn544_i2c_read_53270 pn544_i2c_read 0 53270 NULL
+lirc_buffer_init_53282 lirc_buffer_init 3-2 53282 NULL
++determine_dirtyable_memory_53290 determine_dirtyable_memory 0 53290 NULL
++ftrace_profile_write_53327 ftrace_profile_write 3 53327 NULL
+gsm_control_reply_53333 gsm_control_reply 4 53333 NULL
++vendorextnIoctl_53350 vendorextnIoctl 0 53350 NULL
++mmc_resume_host_53353 mmc_resume_host 0 53353 NULL nohasharray
++bnx2i_send_nl_mesg_53353 bnx2i_send_nl_mesg 4 53353 &mmc_resume_host_53353
+get_random_bytes_arch_53370 get_random_bytes_arch 2 53370 NULL
++tsi721_open_outb_mbox_53397 tsi721_open_outb_mbox 4 53397 NULL
+roccat_common_receive_53407 roccat_common_receive 4 53407 NULL
++i915_gem_execbuffer_relocate_object_53435 i915_gem_execbuffer_relocate_object 0 53435 NULL
+isr_cmd_cmplt_read_53439 isr_cmd_cmplt_read 3 53439 NULL
-+mwifiex_info_read_53447 mwifiex_info_read 3 53447 NULL
++mwifiex_info_read_53447 mwifiex_info_read 3 53447 NULL nohasharray
++snd_dma_alloc_pages_53447 snd_dma_alloc_pages 3 53447 &mwifiex_info_read_53447
+apei_exec_run_optional_53452 apei_exec_run_optional 0 53452 NULL
-+acpi_tb_parse_root_table_53455 acpi_tb_parse_root_table 1 53455 NULL
-+n2_run_53459 n2_run 3 53459 NULL
-+rds_tcp_data_recv_53476 rds_tcp_data_recv 3 53476 NULL
++rds_tcp_data_recv_53476 rds_tcp_data_recv 3-4 53476 NULL
+iowarrior_read_53483 iowarrior_read 3 53483 NULL
+osd_req_write_kern_53486 osd_req_write_kern 5 53486 NULL
+do_verify_xattr_datum_53499 do_verify_xattr_datum 0 53499 NULL
++ext4_ext_grow_indepth_53503 ext4_ext_grow_indepth 0 53503 NULL
+snd_pcm_format_physical_width_53505 snd_pcm_format_physical_width 0 53505 NULL
+dbAllocNext_53506 dbAllocNext 0 53506 NULL
+ocfs2_xattr_set_acl_53508 ocfs2_xattr_set_acl 4 53508 NULL
+check_acl_53512 check_acl 0 53512 NULL
+set_registers_53582 set_registers 3 53582 NULL
-+obj_to_index_53614 obj_to_index 0 53614 NULL
++__readw_53594 __readw 0 53594 NULL
++pfkey_recvmsg_53604 pfkey_recvmsg 4 53604 NULL
+___alloc_bootmem_nopanic_53626 ___alloc_bootmem_nopanic 1 53626 NULL
+xd_write_multiple_pages_53633 xd_write_multiple_pages 6-5 53633 NULL
+ccid_getsockopt_builtin_ccids_53634 ccid_getsockopt_builtin_ccids 2 53634 NULL
@@ -108113,11 +109679,14 @@ index 0000000..6fcc08d
+_preload_range_53676 _preload_range 2-3 53676 &orig_hash_add_if_53676
+fuse_fill_write_pages_53682 fuse_fill_write_pages 4 53682 NULL
+bdev_logical_block_size_53690 bdev_logical_block_size 0 53690 NULL
++i830_write_fence_reg_53695 i830_write_fence_reg 0 53695 NULL
++phy_read_1bit_53708 phy_read_1bit 0 53708 NULL
+find_overflow_devnum_53711 find_overflow_devnum 0 53711 NULL
+bio_integrity_split_53714 bio_integrity_split 3 53714 NULL
+__ocfs2_resv_find_window_53721 __ocfs2_resv_find_window 3 53721 NULL
++subscr_named_msg_event_53723 subscr_named_msg_event 6 53723 NULL
+wdm_write_53735 wdm_write 3 53735 NULL
-+ext3_try_to_allocate_with_rsv_53737 ext3_try_to_allocate_with_rsv 5-3 53737 NULL
++ext3_try_to_allocate_with_rsv_53737 ext3_try_to_allocate_with_rsv 3-5-0 53737 NULL
+lpfc_idiag_queacc_read_qe_53755 lpfc_idiag_queacc_read_qe 0-2 53755 NULL nohasharray
+amdtp_out_stream_get_max_payload_53755 amdtp_out_stream_get_max_payload 0 53755 &lpfc_idiag_queacc_read_qe_53755
+ext2_acl_count_53773 ext2_acl_count 0-1 53773 NULL
@@ -108125,18 +109694,26 @@ index 0000000..6fcc08d
+regmap_raw_write_53803 regmap_raw_write 4 53803 NULL
+lpfc_idiag_ctlacc_read_reg_53809 lpfc_idiag_ctlacc_read_reg 0-3 53809 NULL
+nls_nullsize_53815 nls_nullsize 0 53815 NULL
++setup_data_read_53822 setup_data_read 3 53822 NULL
+multipath_status_53836 multipath_status 4 53836 NULL
++i915_gem_flush_ring_53843 i915_gem_flush_ring 0 53843 NULL
++pms_read_53873 pms_read 3 53873 NULL
+ieee80211_if_fmt_dropped_frames_congestion_53883 ieee80211_if_fmt_dropped_frames_congestion 3 53883 NULL
-+ocfs2_rm_xattr_cluster_53900 ocfs2_rm_xattr_cluster 5-4-3 53900 NULL
++ocfs2_rm_xattr_cluster_53900 ocfs2_rm_xattr_cluster 4-5-3 53900 NULL
+proc_file_read_53905 proc_file_read 3 53905 NULL
-+ocfs2_make_clusters_writable_53938 ocfs2_make_clusters_writable 4 53938 NULL
-+mthca_setup_cmd_doorbells_53954 mthca_setup_cmd_doorbells 2 53954 NULL
++azx_via_get_position_53916 azx_via_get_position 0 53916 NULL
++tcp_mss_split_point_53925 tcp_mss_split_point 0-4-3 53925 NULL
++usb_serial_generic_write_53927 usb_serial_generic_write 4 53927 NULL
++ocfs2_make_clusters_writable_53938 ocfs2_make_clusters_writable 0-5-4 53938 NULL
++xfs_mod_sb_53960 xfs_mod_sb 2 53960 NULL
+mlx4_num_eq_uar_53965 mlx4_num_eq_uar 0 53965 NULL
+idetape_chrdev_write_53976 idetape_chrdev_write 3 53976 NULL
+__ocfs2_xattr_set_value_outside_53981 __ocfs2_xattr_set_value_outside 5 53981 NULL
-+snd_pcm_lib_write_transfer_54018 snd_pcm_lib_write_transfer 4-2-5 54018 NULL
++snd_pcm_lib_write_transfer_54018 snd_pcm_lib_write_transfer 5-2-4 54018 NULL
++cmpk_message_handle_tx_54024 cmpk_message_handle_tx 4 54024 NULL
+ipxrtr_route_packet_54036 ipxrtr_route_packet 4 54036 NULL
+nl80211_send_disconnected_54056 nl80211_send_disconnected 5 54056 NULL
++wl12xx_rx_get_buf_size_54070 wl12xx_rx_get_buf_size 0 54070 NULL
+_malloc_54077 _malloc 1 54077 NULL
+bitmap_bitremap_54096 bitmap_bitremap 4 54096 NULL
+altera_set_ir_pre_54103 altera_set_ir_pre 2 54103 NULL
@@ -108147,32 +109724,40 @@ index 0000000..6fcc08d
+c4iw_pblpool_alloc_54148 c4iw_pblpool_alloc 2 54148 NULL
+i2400m_zrealloc_2x_54166 i2400m_zrealloc_2x 3 54166 NULL nohasharray
+memcpy_toiovec_54166 memcpy_toiovec 3 54166 &i2400m_zrealloc_2x_54166
-+acpi_os_read_memory_54186 acpi_os_read_memory 1-3 54186 NULL
++p9_client_prepare_req_54175 p9_client_prepare_req 3 54175 NULL
++devm_request_threaded_irq_54215 devm_request_threaded_irq 0 54215 NULL
++do_sys_poll_54221 do_sys_poll 2 54221 NULL
+__register_chrdev_54223 __register_chrdev 2-3 54223 NULL
+_format_mac_addr_54229 _format_mac_addr 2-0 54229 NULL
+pi_read_regr_54231 pi_read_regr 0 54231 NULL
++jbd2__journal_restart_54249 jbd2__journal_restart 0 54249 NULL
+xfs_dir2_sf_addname_hard_54254 xfs_dir2_sf_addname_hard 3 54254 NULL
+ceph_msgpool_get_54258 ceph_msgpool_get 2 54258 NULL
+wusb_prf_54261 wusb_prf 7 54261 NULL nohasharray
+audio_write_54261 audio_write 4 54261 &wusb_prf_54261
+mwifiex_getlog_read_54269 mwifiex_getlog_read 3 54269 NULL
-+ubi_calc_data_len_54279 ubi_calc_data_len 0-3 54279 NULL
++kstrtou16_from_user_54274 kstrtou16_from_user 2 54274 NULL
+altera_set_dr_post_54291 altera_set_dr_post 2 54291 NULL
+dlm_alloc_pagevec_54296 dlm_alloc_pagevec 1 54296 NULL
++ttm_mem_global_alloc_54299 ttm_mem_global_alloc 0 54299 NULL
+sprintf_54306 sprintf 0 54306 NULL
++pn_raw_send_54330 pn_raw_send 2 54330 NULL
+br_fdb_fillbuf_54339 br_fdb_fillbuf 0 54339 NULL
+__alloc_dev_table_54343 __alloc_dev_table 2 54343 NULL
-+__get_free_pages_54352 __get_free_pages 0 54352 NULL nohasharray
-+_osd_realloc_seg_54352 _osd_realloc_seg 3 54352 &__get_free_pages_54352
++_osd_realloc_seg_54352 _osd_realloc_seg 3 54352 NULL nohasharray
++__get_free_pages_54352 __get_free_pages 0 54352 &_osd_realloc_seg_54352
+tcf_hash_create_54360 tcf_hash_create 4 54360 NULL
+read_file_credit_dist_stats_54367 read_file_credit_dist_stats 3 54367 NULL
+vfs_readlink_54368 vfs_readlink 3 54368 NULL
+do_dccp_setsockopt_54377 do_dccp_setsockopt 5 54377 NULL
-+ah_alloc_tmp_54378 ah_alloc_tmp 3-2 54378 NULL
-+gart_unmap_page_54379 gart_unmap_page 2-3 54379 NULL
-+snd_pcm_oss_read2_54387 snd_pcm_oss_read2 0-3 54387 NULL
-+i386_mmap_check_54388 i386_mmap_check 0 54388 NULL
++ah_alloc_tmp_54378 ah_alloc_tmp 2-3 54378 NULL
++gart_unmap_page_54379 gart_unmap_page 3-2 54379 NULL
++sysfs_dir_llseek_54385 sysfs_dir_llseek 2 54385 NULL
++snd_pcm_oss_read2_54387 snd_pcm_oss_read2 3-0 54387 NULL
+iwl_dbgfs_power_save_status_read_54392 iwl_dbgfs_power_save_status_read 3 54392 NULL
++add_packet_54433 add_packet 3 54433 NULL
++__btrfs_alloc_chunk_54445 __btrfs_alloc_chunk 0 54445 NULL
++do_chunk_alloc_54457 do_chunk_alloc 0 54457 NULL
+simple_strtoull_54493 simple_strtoull 0 54493 NULL
+cifs_idmap_key_instantiate_54503 cifs_idmap_key_instantiate 3 54503 NULL
+l2cap_create_basic_pdu_54508 l2cap_create_basic_pdu 3 54508 NULL
@@ -108182,12 +109767,18 @@ index 0000000..6fcc08d
+viacam_read_54526 viacam_read 3 54526 NULL
+unix_dgram_connect_54535 unix_dgram_connect 3 54535 NULL
+setsockopt_54539 setsockopt 5 54539 NULL
++lbs_lowsnr_write_54549 lbs_lowsnr_write 3 54549 NULL
+nfsd_vfs_write_54577 nfsd_vfs_write 6 54577 NULL
+fw_iso_buffer_init_54582 fw_iso_buffer_init 3 54582 NULL
++xfrm_polexpire_msgsize_54589 xfrm_polexpire_msgsize 0 54589 NULL
++fwSendNullPacket_54618 fwSendNullPacket 2 54618 NULL
++port_fops_write_54627 port_fops_write 3 54627 NULL
++setup_cluster_bitmap_54649 setup_cluster_bitmap 4 54649 NULL
++_regulator_enable_54655 _regulator_enable 0 54655 NULL
+dns_resolver_read_54658 dns_resolver_read 3 54658 NULL
++bus_add_device_54665 bus_add_device 0 54665 NULL
+bio_kmalloc_54672 bio_kmalloc 2 54672 NULL
+evm_read_key_54674 evm_read_key 3 54674 NULL
-+resource_string_54699 resource_string 0 54699 NULL
+addtgt_54703 addtgt 3 54703 NULL
+rfkill_fop_read_54711 rfkill_fop_read 3 54711 NULL
+_add_sg_continuation_descriptor_54721 _add_sg_continuation_descriptor 3 54721 NULL
@@ -108195,11 +109786,12 @@ index 0000000..6fcc08d
+kzalloc_54740 kzalloc 1 54740 NULL
+drm_mode_crtc_set_gamma_size_54742 drm_mode_crtc_set_gamma_size 2 54742 NULL
+wep_iv_read_54744 wep_iv_read 3 54744 NULL
-+qla4_8xxx_pci_set_window_54766 qla4_8xxx_pci_set_window 0-2 54766 NULL
++lpfc_idiag_pcicfg_write_54749 lpfc_idiag_pcicfg_write 3 54749 NULL
++xfs_rtallocate_extent_block_54791 xfs_rtallocate_extent_block 5 54791 NULL
+flexcop_device_kmalloc_54793 flexcop_device_kmalloc 1 54793 NULL
+domain_init_54797 domain_init 2 54797 NULL
+ext3_find_goal_54801 ext3_find_goal 0 54801 NULL
-+avc_has_perm_flags_54802 avc_has_perm_flags 3 54802 NULL
++get_dev_size_54807 get_dev_size 0 54807 NULL
+nfsd_write_54809 nfsd_write 6 54809 NULL
+aes_decrypt_fail_read_54815 aes_decrypt_fail_read 3 54815 NULL nohasharray
+crypto_tfm_ctx_alignment_54815 crypto_tfm_ctx_alignment 0 54815 &aes_decrypt_fail_read_54815
@@ -108207,125 +109799,153 @@ index 0000000..6fcc08d
+write_rio_54837 write_rio 3 54837 NULL
+ext3_acl_from_disk_54839 ext3_acl_from_disk 2 54839 NULL
+edac_mc_alloc_54846 edac_mc_alloc 1 54846 NULL
++scsi_add_host_54847 scsi_add_host 0 54847 NULL
+ufx_ops_write_54848 ufx_ops_write 3 54848 NULL
+printer_read_54851 printer_read 3 54851 NULL
++assign_irq_vector_54852 assign_irq_vector 0 54852 NULL
++em28xx_isoc_dvb_max_packetsize_54854 em28xx_isoc_dvb_max_packetsize 0 54854 NULL
+alloc_ep_req_54860 alloc_ep_req 2 54860 NULL
+broadsheet_spiflash_rewrite_sector_54864 broadsheet_spiflash_rewrite_sector 2 54864 NULL
+prism_build_supp_rates_54865 prism_build_supp_rates 0 54865 NULL
+tcf_csum_ipv6_tcp_54877 tcf_csum_ipv6_tcp 4 54877 NULL
-+iscsi_pool_init_54913 iscsi_pool_init 2-4 54913 NULL
++iscsi_pool_init_54913 iscsi_pool_init 4-2 54913 NULL nohasharray
++kobject_set_name_vargs_54913 kobject_set_name_vargs 0 54913 &iscsi_pool_init_54913
+btrfs_stack_chunk_num_stripes_54923 btrfs_stack_chunk_num_stripes 0 54923 NULL
-+mxms_structlen_54939 mxms_structlen 0 54939 NULL
+add_port_54941 add_port 2 54941 NULL
++alauda_write_data_54967 alauda_write_data 3 54967 NULL
+c4_add_card_54968 c4_add_card 3 54968 NULL
+__proc_file_read_54978 __proc_file_read 3 54978 NULL
++ubi_change_vtbl_record_54979 ubi_change_vtbl_record 0 54979 NULL
++brcmf_sdcard_send_buf_54980 brcmf_sdcard_send_buf 6 54980 NULL
++_queue_data_54983 _queue_data 4 54983 NULL
+ext3_xattr_get_54989 ext3_xattr_get 0 54989 NULL
++rds_ib_inc_copy_to_user_55007 rds_ib_inc_copy_to_user 3 55007 NULL
+cx231xx_v4l2_read_55014 cx231xx_v4l2_read 3 55014 NULL
++ext4_ext_handle_uninitialized_extents_55059 ext4_ext_handle_uninitialized_extents 0-6 55059 NULL
+__netdev_alloc_skb_ip_align_55067 __netdev_alloc_skb_ip_align 2 55067 NULL
+apei_exec_run_55075 apei_exec_run 0 55075 NULL
++set_interface_55085 set_interface 0 55085 NULL
++snd_pcm_capture_hw_avail_55086 snd_pcm_capture_hw_avail 0 55086 NULL
++PropagateCalParamsFromFlashToMemory_55099 PropagateCalParamsFromFlashToMemory 0 55099 NULL
+rxpipe_beacon_buffer_thres_host_int_trig_rx_data_read_55106 rxpipe_beacon_buffer_thres_host_int_trig_rx_data_read 3 55106 NULL
-+kmalloc_large_55111 kmalloc_large 0 55111 NULL
++kmalloc_large_55111 kmalloc_large 1 55111 NULL
+crypto_ahash_setkey_55134 crypto_ahash_setkey 3 55134 NULL
-+ocfs2_prepare_refcount_change_for_del_55137 ocfs2_prepare_refcount_change_for_del 3 55137 NULL nohasharray
++ocfs2_prepare_refcount_change_for_del_55137 ocfs2_prepare_refcount_change_for_del 0-3 55137 NULL nohasharray
+filldir_55137 filldir 3 55137 &ocfs2_prepare_refcount_change_for_del_55137
++validate_vid_hdr_55145 validate_vid_hdr 0 55145 NULL
+ocfs2_truncate_file_55148 ocfs2_truncate_file 3 55148 NULL
+sel_write_relabel_55195 sel_write_relabel 3 55195 NULL
+sched_feat_write_55202 sched_feat_write 3 55202 NULL
-+ht40allow_map_read_55209 ht40allow_map_read 3 55209 NULL
++ht40allow_map_read_55209 ht40allow_map_read 3 55209 NULL nohasharray
++isdn_net_ciscohdlck_alloc_skb_55209 isdn_net_ciscohdlck_alloc_skb 2 55209 &ht40allow_map_read_55209
+__kfifo_dma_out_prepare_r_55211 __kfifo_dma_out_prepare_r 4-5 55211 NULL
+do_raw_setsockopt_55215 do_raw_setsockopt 5 55215 NULL
++sctp_abort_pkt_new_55218 sctp_abort_pkt_new 5 55218 NULL
+dbAllocDmap_55227 dbAllocDmap 0 55227 NULL
+tipc_port_reject_sections_55229 tipc_port_reject_sections 5 55229 NULL
-+get_nr_threads_55242 get_nr_threads 0 55242 NULL
++ext4_ext_convert_to_initialized_55235 ext4_ext_convert_to_initialized 0 55235 NULL
+memcpy_fromiovec_55247 memcpy_fromiovec 3 55247 NULL
-+ptrace_request_55288 ptrace_request 3 55288 NULL
++lbs_failcount_write_55276 lbs_failcount_write 3 55276 NULL
+rx_streaming_interval_read_55291 rx_streaming_interval_read 3 55291 NULL
+gsm_control_modem_55303 gsm_control_modem 3 55303 NULL
-+__get_vm_area_node_55305 __get_vm_area_node 1 55305 NULL
++wimax_msg_len_55304 wimax_msg_len 0 55304 NULL
+vme_user_read_55338 vme_user_read 3 55338 NULL
+sctp_datamsg_from_user_55342 sctp_datamsg_from_user 4 55342 NULL nohasharray
+__wa_xfer_setup_sizes_55342 __wa_xfer_setup_sizes 0 55342 &sctp_datamsg_from_user_55342
+acpi_system_read_event_55362 acpi_system_read_event 3 55362 NULL
++__domain_mapping_55393 __domain_mapping 5 55393 NULL
++mm_to_dma_pfn_55394 mm_to_dma_pfn 0-1 55394 NULL
+iwl_dbgfs_plcp_delta_read_55407 iwl_dbgfs_plcp_delta_read 3 55407 NULL
+alloc_skb_55439 alloc_skb 1 55439 NULL
-+security_dump_masked_av_55447 security_dump_masked_av 3 55447 NULL
+__vxge_hw_channel_allocate_55462 __vxge_hw_channel_allocate 3 55462 NULL
++isdnhdlc_decode_55466 isdnhdlc_decode 0 55466 NULL
+cx23888_ir_rx_read_55473 cx23888_ir_rx_read 3 55473 NULL
+snd_pcm_lib_write_55483 snd_pcm_lib_write 0-3 55483 NULL
+i2o_pool_alloc_55485 i2o_pool_alloc 4 55485 NULL
+ocfs2_rec_clusters_55501 ocfs2_rec_clusters 0 55501 NULL
+ext4_flex_bg_size_55502 ext4_flex_bg_size 0 55502 NULL
+cfpkt_pad_trail_55511 cfpkt_pad_trail 2 55511 NULL
-+ea_get_55522 ea_get 0 55522 NULL
++ea_get_55522 ea_get 3-0 55522 NULL
+set_msr_interception_55538 set_msr_interception 2 55538 NULL
++_regulator_is_enabled_55550 _regulator_is_enabled 0 55550 NULL
+add_partition_55588 add_partition 2 55588 NULL
++kstrtou8_from_user_55599 kstrtou8_from_user 2 55599 NULL
+macvtap_put_user_55609 macvtap_put_user 4 55609 NULL
+selinux_setprocattr_55611 selinux_setprocattr 4 55611 NULL
++snd_pcm_hw_param_last_55624 snd_pcm_hw_param_last 0 55624 NULL
+reiserfs_xattr_get_55628 reiserfs_xattr_get 0 55628 NULL nohasharray
+pktgen_if_write_55628 pktgen_if_write 3 55628 &reiserfs_xattr_get_55628
-+dvb_dmxdev_set_buffer_size_55643 dvb_dmxdev_set_buffer_size 2 55643 NULL
+mlx4_buddy_alloc_55647 mlx4_buddy_alloc 2 55647 NULL
+xfs_bmbt_maxrecs_55649 xfs_bmbt_maxrecs 0-2 55649 NULL
-+ib_umad_compat_ioctl_55650 ib_umad_compat_ioctl 3 55650 NULL
+read_oldmem_55658 read_oldmem 3 55658 NULL
+lpfc_idiag_queinfo_read_55662 lpfc_idiag_queinfo_read 3 55662 NULL
+get_info_55681 get_info 3 55681 NULL
++iwl_dbgfs_plcp_delta_write_55682 iwl_dbgfs_plcp_delta_write 3 55682 NULL
+pm8001_store_update_fw_55716 pm8001_store_update_fw 4 55716 NULL
-+mtdswap_init_55719 mtdswap_init 2 55719 NULL
++ocfs2_lock_refcount_tree_55719 ocfs2_lock_refcount_tree 0 55719 NULL
++prepare_reply_55734 prepare_reply 4 55734 NULL
+__iio_allocate_kfifo_55738 __iio_allocate_kfifo 2-3 55738 NULL
-+strlen_55778 strlen 0 55778 NULL
++strlen_55778 strlen 0 55778 NULL nohasharray
++is_idx_node_in_tnc_55778 is_idx_node_in_tnc 0 55778 &strlen_55778
+req_bio_endio_55786 req_bio_endio 3 55786 NULL
++rtnl_vfinfo_size_55794 rtnl_vfinfo_size 0 55794 NULL
+uwb_rc_neh_grok_event_55799 uwb_rc_neh_grok_event 3 55799 NULL
+iwl_legacy_dbgfs_sensitivity_read_55816 iwl_legacy_dbgfs_sensitivity_read 3 55816 NULL
-+sb16_copy_from_user_55836 sb16_copy_from_user 10-6-7 55836 NULL
++sb16_copy_from_user_55836 sb16_copy_from_user 7-6-10 55836 NULL
+xfs_da_buf_make_55845 xfs_da_buf_make 1 55845 NULL
+ip_hdrlen_55849 ip_hdrlen 0 55849 NULL
-+hcd_alloc_coherent_55862 hcd_alloc_coherent 5 55862 NULL
++hcd_alloc_coherent_55862 hcd_alloc_coherent 5-0 55862 NULL
+shmem_setxattr_55867 shmem_setxattr 4 55867 NULL
++__check_block_validity_55869 __check_block_validity 0 55869 NULL
+pm_qos_power_read_55891 pm_qos_power_read 3 55891 NULL
+snd_pcm_hw_param_value_min_55917 snd_pcm_hw_param_value_min 0 55917 NULL
++kvm_write_guest_virt_system_55944 kvm_write_guest_virt_system 4-2 55944 NULL
+sel_read_policy_55947 sel_read_policy 3 55947 NULL
+handle_response_55951 handle_response 5 55951 NULL
-+simple_read_from_buffer_55957 simple_read_from_buffer 2-5 55957 NULL
-+ssb_bus_pcmciabus_register_56020 ssb_bus_pcmciabus_register 3 56020 NULL
++simple_read_from_buffer_55957 simple_read_from_buffer 5-2 55957 NULL
++acct_stack_growth_56023 acct_stack_growth 0 56023 NULL
+dccp_sendmsg_56058 dccp_sendmsg 4 56058 NULL
+pscsi_get_bio_56103 pscsi_get_bio 1 56103 NULL
-+kmem_zalloc_large_56128 kmem_zalloc_large 1 56128 NULL
++em28xx_write_reg_bits_56107 em28xx_write_reg_bits 0 56107 NULL
+sel_read_handle_status_56139 sel_read_handle_status 3 56139 NULL
++write_file_frameerrors_56145 write_file_frameerrors 3 56145 NULL
+ath6kl_wmi_bssinfo_event_rx_56146 ath6kl_wmi_bssinfo_event_rx 3 56146 NULL
+rawv6_setsockopt_56165 rawv6_setsockopt 5 56165 NULL
-+create_irq_nr_56180 create_irq_nr 1 56180 NULL
++create_irq_nr_56180 create_irq_nr 1-0 56180 NULL
+skb_headroom_56200 skb_headroom 0 56200 NULL
-+usb_dump_iad_descriptor_56204 usb_dump_iad_descriptor 0 56204 NULL
-+delay_status_56215 delay_status 4 56215 NULL
-+ncp_read_bounce_size_56221 ncp_read_bounce_size 0-1 56221 NULL
++ocfs2_journal_access_gd_56209 ocfs2_journal_access_gd 0 56209 NULL
+ocfs2_find_xe_in_bucket_56224 ocfs2_find_xe_in_bucket 0 56224 NULL
+cp210x_get_config_56229 cp210x_get_config 4 56229 NULL
+do_ipt_set_ctl_56238 do_ipt_set_ctl 4 56238 NULL
+fd_copyin_56247 fd_copyin 3 56247 NULL
++p9pdu_vreadf_56271 p9pdu_vreadf 0 56271 NULL
+dvb_aplay_56296 dvb_aplay 3 56296 NULL
+btmrvl_hscfgcmd_read_56303 btmrvl_hscfgcmd_read 3 56303 NULL
-+compat_cdrom_read_audio_56304 compat_cdrom_read_audio 4 56304 NULL
++speakup_file_write_56310 speakup_file_write 3 56310 NULL
+journal_init_revoke_table_56331 journal_init_revoke_table 1 56331 NULL
+snd_rawmidi_read_56337 snd_rawmidi_read 3 56337 NULL
-+sixpack_compat_ioctl_56346 sixpack_compat_ioctl 4 56346 NULL
++ipv6_recv_error_56347 ipv6_recv_error 3 56347 NULL
+vxge_os_dma_malloc_async_56348 vxge_os_dma_malloc_async 3 56348 NULL
-+iov_iter_copy_from_user_atomic_56368 iov_iter_copy_from_user_atomic 4 56368 NULL
++iov_iter_copy_from_user_atomic_56368 iov_iter_copy_from_user_atomic 4-0 56368 NULL
+dev_read_56369 dev_read 3 56369 NULL
++snd_pcm_common_ioctl1_56382 snd_pcm_common_ioctl1 0 56382 NULL
+ocfs2_control_read_56405 ocfs2_control_read 3 56405 NULL
-+__get_vm_area_caller_56416 __get_vm_area_caller 1 56416 NULL nohasharray
-+acpi_os_write_memory_56416 acpi_os_write_memory 1-3 56416 &__get_vm_area_caller_56416
++do_get_write_access_56410 do_get_write_access 0 56410 NULL
+store_msg_56417 store_msg 3 56417 NULL
+pppol2tp_sendmsg_56420 pppol2tp_sendmsg 4 56420 NULL
+fl_create_56435 fl_create 5 56435 NULL
+gnttab_map_56439 gnttab_map 2 56439 NULL
-+cx231xx_init_isoc_56453 cx231xx_init_isoc 3-2 56453 NULL
++ata_scsi_add_hosts_56448 ata_scsi_add_hosts 0 56448 NULL
++cx231xx_init_isoc_56453 cx231xx_init_isoc 3-2-4 56453 NULL
+osd_req_list_partition_objects_56464 osd_req_list_partition_objects 5 56464 NULL
++lbs_rdmac_write_56471 lbs_rdmac_write 3 56471 NULL
+calc_linear_pos_56472 calc_linear_pos 0-3 56472 NULL
+crypto_shash_alignmask_56486 crypto_shash_alignmask 0 56486 NULL
-+cfg80211_connect_result_56515 cfg80211_connect_result 4-6 56515 NULL
++cfg80211_connect_result_56515 cfg80211_connect_result 6-4 56515 NULL
+iwl_legacy_dbgfs_rx_queue_read_56533 iwl_legacy_dbgfs_rx_queue_read 3 56533 NULL
++l1oip_socket_recv_56537 l1oip_socket_recv 6 56537 NULL
+ip_options_get_56538 ip_options_get 4 56538 NULL
++tcp_cwnd_test_56547 tcp_cwnd_test 0 56547 NULL
+ocfs2_change_extent_flag_56549 ocfs2_change_extent_flag 5 56549 NULL
+alloc_apertures_56561 alloc_apertures 1 56561 NULL
+rs_sta_dbgfs_stats_table_read_56573 rs_sta_dbgfs_stats_table_read 3 56573 NULL
@@ -108333,35 +109953,43 @@ index 0000000..6fcc08d
+event_filter_write_56609 event_filter_write 3 56609 NULL
+gather_array_56641 gather_array 3 56641 NULL
+dlm_dir_lookup_56662 dlm_dir_lookup 4 56662 NULL
++tg3_nvram_write_block_56666 tg3_nvram_write_block 3 56666 NULL
++btrfs_cow_block_56678 btrfs_cow_block 0 56678 NULL
+snd_gus_dram_read_56686 snd_gus_dram_read 4 56686 NULL
-+dvb_ringbuffer_read_user_56702 dvb_ringbuffer_read_user 3 56702 NULL
++dvb_ringbuffer_read_user_56702 dvb_ringbuffer_read_user 3-0 56702 NULL
+sta_flags_read_56710 sta_flags_read 3 56710 NULL
+ipv6_getsockopt_sticky_56711 ipv6_getsockopt_sticky 5 56711 NULL
+__wa_xfer_setup_segs_56725 __wa_xfer_setup_segs 2 56725 NULL
-+pcpu_populate_chunk_56741 pcpu_populate_chunk 2-3 56741 NULL
++__copy_from_user_ll_56738 __copy_from_user_ll 0-3 56738 NULL
++pcpu_populate_chunk_56741 pcpu_populate_chunk 3-2 56741 NULL
+drm_agp_bind_pages_56748 drm_agp_bind_pages 3 56748 NULL
+mfd_add_devices_56753 mfd_add_devices 4 56753 NULL
-+dbgaufs_xi_read_56759 dbgaufs_xi_read 3 56759 NULL
-+alloc_iommu_56778 alloc_iommu 2-3 56778 NULL
-+ntfs_rl_realloc_56831 ntfs_rl_realloc 3 56831 NULL
-+snd_rawmidi_kernel_write1_56847 snd_rawmidi_kernel_write1 4 56847 NULL
++alloc_iommu_56778 alloc_iommu 2-3-0 56778 NULL
++__carl9170_rx_56784 __carl9170_rx 3 56784 NULL
++ttm_alloc_new_pages_56792 ttm_alloc_new_pages 5 56792 NULL
++ext4_ext_rm_idx_56827 ext4_ext_rm_idx 0 56827 NULL
++snd_rawmidi_kernel_write1_56847 snd_rawmidi_kernel_write1 4-0 56847 NULL
+ext3_xattr_ibody_get_56880 ext3_xattr_ibody_get 0 56880 NULL
+pvr2_debugifc_print_status_56890 pvr2_debugifc_print_status 3 56890 NULL
++__bitmap_clear_bits_56912 __bitmap_clear_bits 3 56912 NULL
+__kfifo_out_56927 __kfifo_out 0-3 56927 NULL
-+journal_init_revoke_56933 journal_init_revoke 2 56933 NULL
++journal_init_revoke_56933 journal_init_revoke 2 56933 NULL nohasharray
++CopyBufferToControlPacket_56933 CopyBufferToControlPacket 0 56933 &journal_init_revoke_56933
+diva_get_driver_info_56967 diva_get_driver_info 0 56967 NULL
+vlsi_alloc_ring_57003 vlsi_alloc_ring 3-4 57003 NULL
+btrfs_super_csum_size_57004 btrfs_super_csum_size 0 57004 NULL
++snd_dma_alloc_pages_fallback_57029 snd_dma_alloc_pages_fallback 3 57029 NULL
+skb_network_offset_57043 skb_network_offset 0 57043 NULL nohasharray
+ieee80211_if_fmt_state_57043 ieee80211_if_fmt_state 3 57043 &skb_network_offset_57043
+bytes_to_samples_57049 bytes_to_samples 0-2 57049 NULL
-+autofs_dev_ioctl_compat_57059 autofs_dev_ioctl_compat 3 57059 NULL
+cx2341x_ctrl_new_std_57061 cx2341x_ctrl_new_std 4 57061 NULL
+sca3000_read_data_57064 sca3000_read_data 4 57064 NULL
+pcmcia_replace_cis_57066 pcmcia_replace_cis 3 57066 NULL
+sis190_try_rx_copy_57069 sis190_try_rx_copy 3 57069 NULL
+thin_status_57084 thin_status 4 57084 NULL
+tracing_set_trace_write_57096 tracing_set_trace_write 3 57096 NULL
++altera_get_note_57099 altera_get_note 6 57099 NULL
++snd_pcm_hw_params_old_user_57108 snd_pcm_hw_params_old_user 0 57108 NULL
+crypto_compress_ctxsize_57109 crypto_compress_ctxsize 0 57109 NULL
+sysfs_write_file_57116 sysfs_write_file 3 57116 NULL
+cipso_v4_gentag_loc_57119 cipso_v4_gentag_loc 0 57119 NULL
@@ -108370,15 +109998,20 @@ index 0000000..6fcc08d
+ima_show_htable_value_57136 ima_show_htable_value 2 57136 &rds_ib_sub_signaled_57136
+snd_sonicvibes_getdmac_57140 snd_sonicvibes_getdmac 0 57140 NULL
+stk_prepare_sio_buffers_57168 stk_prepare_sio_buffers 2 57168 NULL
-+rx_hw_stuck_read_57179 rx_hw_stuck_read 3 57179 NULL
++extent_from_logical_57179 extent_from_logical 0 57179 NULL nohasharray
++rx_hw_stuck_read_57179 rx_hw_stuck_read 3 57179 &extent_from_logical_57179
++sys_poll_57190 sys_poll 2 57190 NULL
++ocfs2_claim_metadata_57192 ocfs2_claim_metadata 0 57192 NULL
+ieee80211_if_fmt_tsf_57249 ieee80211_if_fmt_tsf 3 57249 NULL
+oprofilefs_ulong_from_user_57251 oprofilefs_ulong_from_user 3 57251 NULL
++lbs_sleepparams_write_57283 lbs_sleepparams_write 3 57283 NULL
+pstore_file_read_57288 pstore_file_read 3 57288 NULL
+snd_pcm_read_57289 snd_pcm_read 3 57289 NULL
++ath6kl_buf_alloc_57304 ath6kl_buf_alloc 1 57304 NULL
+ftdi_elan_write_57309 ftdi_elan_write 3 57309 NULL
++write_file_regval_57313 write_file_regval 3 57313 NULL
+ocfs2_xattr_shrink_size_57328 ocfs2_xattr_shrink_size 3 57328 NULL
-+check_mirror_57342 check_mirror 1-2 57342 NULL nohasharray
-+usblp_read_57342 usblp_read 3 57342 &check_mirror_57342
++usblp_read_57342 usblp_read 3 57342 NULL
+print_devstats_dot11RTSFailureCount_57347 print_devstats_dot11RTSFailureCount 3 57347 NULL
+read_file_blob_57406 read_file_blob 3 57406 NULL
+enclosure_register_57412 enclosure_register 3 57412 NULL
@@ -108386,51 +110019,66 @@ index 0000000..6fcc08d
+alloc_ftrace_hash_57431 alloc_ftrace_hash 1 57431 &compat_keyctl_instantiate_key_iov_57431
+copy_to_user_fromio_57432 copy_to_user_fromio 3 57432 NULL
+sys_pselect6_57449 sys_pselect6 1 57449 NULL
-+__roundup_pow_of_two_57461 __roundup_pow_of_two 0 57461 NULL
++ReadReg_57453 ReadReg 0 57453 NULL
++__roundup_pow_of_two_57461 __roundup_pow_of_two 0-1 57461 NULL
+crypto_tfm_alg_blocksize_57463 crypto_tfm_alg_blocksize 0 57463 NULL nohasharray
+send_midi_async_57463 send_midi_async 3 57463 &crypto_tfm_alg_blocksize_57463
+iwl4965_statistics_flag_57466 iwl4965_statistics_flag 3-0 57466 NULL nohasharray
-+sisusb_clear_vram_57466 sisusb_clear_vram 3-2 57466 &iwl4965_statistics_flag_57466
++sisusb_clear_vram_57466 sisusb_clear_vram 2-3 57466 &iwl4965_statistics_flag_57466
+ieee80211_if_read_flags_57470 ieee80211_if_read_flags 3 57470 NULL
-+ocfs2_write_cluster_57483 ocfs2_write_cluster 8-2-9 57483 NULL
++ocfs2_write_cluster_57483 ocfs2_write_cluster 8-9-2 57483 NULL
+nl80211_send_mgmt_57497 nl80211_send_mgmt 6 57497 NULL
+skb_headlen_57501 skb_headlen 0 57501 NULL
+copy_in_user_57502 copy_in_user 3 57502 NULL
+ks8842_read32_57505 ks8842_read32 0 57505 NULL nohasharray
+ckhdid_printf_57505 ckhdid_printf 2 57505 &ks8842_read32_57505
+init_tag_map_57515 init_tag_map 3 57515 NULL
++cmm_read_57520 cmm_read 3 57520 NULL
+inode_permission_57531 inode_permission 0 57531 NULL
-+DoC_Probe_57534 DoC_Probe 1 57534 NULL
-+ext4_group_first_block_no_57559 ext4_group_first_block_no 0-2 57559 NULL
++ReadHDLCPnP_57559 ReadHDLCPnP 0 57559 NULL nohasharray
++ext4_group_first_block_no_57559 ext4_group_first_block_no 0-2 57559 &ReadHDLCPnP_57559
+snd_pcm_playback_ioctl1_57569 snd_pcm_playback_ioctl1 0 57569 NULL
++get_bridge_ifindices_57579 get_bridge_ifindices 0 57579 NULL
++iwl4965_rs_sta_dbgfs_scale_table_write_57595 iwl4965_rs_sta_dbgfs_scale_table_write 3 57595 NULL
+sk_stream_alloc_skb_57622 sk_stream_alloc_skb 2 57622 NULL
+osdmap_set_max_osd_57630 osdmap_set_max_osd 2 57630 NULL nohasharray
+sisusbcon_putcs_57630 sisusbcon_putcs 3 57630 &osdmap_set_max_osd_57630
+mem_read_57631 mem_read 3 57631 NULL
++pci_enable_msi_block_57632 pci_enable_msi_block 0 57632 NULL
++msi_compose_msg_57637 msi_compose_msg 0 57637 NULL
+sys_mq_timedsend_57661 sys_mq_timedsend 3 57661 NULL
+r3964_write_57662 r3964_write 4 57662 NULL
+__lgwrite_57669 __lgwrite 4 57669 NULL
++ieee80211_MFIE_rate_len_57692 ieee80211_MFIE_rate_len 0 57692 NULL
+i2400m_rx_stats_read_57706 i2400m_rx_stats_read 3 57706 NULL
++snd_interval_value_57713 snd_interval_value 0 57713 NULL
+calgary_alloc_coherent_57714 calgary_alloc_coherent 2 57714 NULL
+aa_matching_read_57720 aa_matching_read 3 57720 NULL
-+compat_sys_set_mempolicy_57742 compat_sys_set_mempolicy 3 57742 NULL
++vm_find_vqs_57729 vm_find_vqs 0 57729 NULL
++compat_sys_set_mempolicy_57742 compat_sys_set_mempolicy 3 57742 NULL nohasharray
++pppol2tp_recvmsg_57742 pppol2tp_recvmsg 4 57742 &compat_sys_set_mempolicy_57742
+ieee80211_if_fmt_dot11MeshHWMPpreqMinInterval_57762 ieee80211_if_fmt_dot11MeshHWMPpreqMinInterval 3 57762 NULL
++read_block_for_search_57781 read_block_for_search 0 57781 NULL
++apei_exec_collect_resources_57788 apei_exec_collect_resources 0 57788 NULL
+ld2_57794 ld2 0 57794 NULL
+ivtv_read_57796 ivtv_read 3 57796 NULL
-+generic_ptrace_peekdata_57806 generic_ptrace_peekdata 2 57806 NULL
-+usb_dump_config_57817 usb_dump_config 0 57817 NULL
+bfad_debugfs_read_regrd_57830 bfad_debugfs_read_regrd 3 57830 NULL
-+copy_to_user_57835 copy_to_user 3 57835 NULL
++copy_to_user_57835 copy_to_user 3-0 57835 NULL
+flash_read_57843 flash_read 3 57843 NULL
++tt_response_fill_table_57902 tt_response_fill_table 1 57902 NULL
+xt_alloc_table_info_57903 xt_alloc_table_info 1 57903 NULL
+emi26_writememory_57908 emi26_writememory 4 57908 NULL
-+iio_read_first_n_kfifo_57910 iio_read_first_n_kfifo 2 57910 NULL
++atomic_add_return_unchecked_57910 atomic_add_return_unchecked 0-1 57910 NULL nohasharray
++iio_read_first_n_kfifo_57910 iio_read_first_n_kfifo 2 57910 &atomic_add_return_unchecked_57910
+__snd_gf1_look16_57925 __snd_gf1_look16 0 57925 NULL
+sel_read_handle_unknown_57933 sel_read_handle_unknown 3 57933 NULL
++xfs_mru_cache_create_57943 xfs_mru_cache_create 3 57943 NULL
++rx_57944 rx 4 57944 NULL
+key_algorithm_read_57946 key_algorithm_read 3 57946 NULL
+ip_set_alloc_57953 ip_set_alloc 1 57953 NULL nohasharray
+ioat3_dca_count_dca_slots_57953 ioat3_dca_count_dca_slots 0 57953 &ip_set_alloc_57953
+i915_cache_sharing_write_57961 i915_cache_sharing_write 3 57961 NULL
++hfc_empty_fifo_57972 hfc_empty_fifo 2 57972 NULL
+stripe_status_57985 stripe_status 4 57985 NULL
+rx_reset_counter_read_58001 rx_reset_counter_read 3 58001 NULL
+regcache_rbtree_insert_to_block_58009 regcache_rbtree_insert_to_block 5 58009 NULL
@@ -108438,26 +110086,33 @@ index 0000000..6fcc08d
+io_playback_transfer_58030 io_playback_transfer 4 58030 NULL
+mce_async_out_58056 mce_async_out 3 58056 NULL
+ocfs2_find_leaf_58065 ocfs2_find_leaf 0 58065 NULL
-+cm4040_write_58079 cm4040_write 3 58079 NULL
-+socket_type_to_security_class_58118 socket_type_to_security_class 0 58118 NULL
++cm4040_write_58079 cm4040_write 3 58079 NULL nohasharray
++usb_stor_acquire_resources_58079 usb_stor_acquire_resources 0 58079 &cm4040_write_58079
++rfcomm_wmalloc_58090 rfcomm_wmalloc 2 58090 NULL
++i915_add_request_58096 i915_add_request 0 58096 NULL
+savemem_58129 savemem 3 58129 NULL
+ipv6_flowlabel_opt_58135 ipv6_flowlabel_opt 3 58135 NULL nohasharray
-+slhc_init_58135 slhc_init 1-2 58135 &ipv6_flowlabel_opt_58135
++slhc_init_58135 slhc_init 2-1 58135 &ipv6_flowlabel_opt_58135
++ocfs2_reserve_clusters_58164 ocfs2_reserve_clusters 0 58164 NULL
+garmin_write_bulk_58191 garmin_write_bulk 3 58191 NULL
+asix_write_cmd_58192 asix_write_cmd 5 58192 NULL
+ieee80211_if_fmt_flags_58205 ieee80211_if_fmt_flags 3 58205 NULL
++nci_send_cmd_58206 nci_send_cmd 3 58206 NULL
++sysfs_add_file_mode_58222 sysfs_add_file_mode 0 58222 NULL
+read_file_debug_58256 read_file_debug 3 58256 NULL
+cfg80211_mgmt_tx_status_58266 cfg80211_mgmt_tx_status 4 58266 NULL
+profile_load_58267 profile_load 3 58267 NULL
++kstrtos8_from_user_58268 kstrtos8_from_user 2 58268 NULL
+acpi_ds_build_internal_package_obj_58271 acpi_ds_build_internal_package_obj 3 58271 NULL
+iscsi_decode_text_input_58292 iscsi_decode_text_input 4 58292 NULL
+my_skb_head_push_58297 my_skb_head_push 2 58297 NULL
+ieee80211_if_read_dot11MeshTTL_58307 ieee80211_if_read_dot11MeshTTL 3 58307 NULL
-+pcim_iomap_58334 pcim_iomap 3 58334 NULL
-+diva_init_dma_map_58336 diva_init_dma_map 3 58336 NULL
-+next_pidmap_58347 next_pidmap 2 58347 NULL
++next_pidmap_58347 next_pidmap 2-0 58347 NULL
+vmalloc_to_sg_58354 vmalloc_to_sg 2 58354 NULL
++sctp_make_init_58401 sctp_make_init 4 58401 NULL
++idetape_pad_zeros_58406 idetape_pad_zeros 2 58406 NULL
+i2400m_pld_size_58415 i2400m_pld_size 0 58415 NULL
++iscsi_offload_mesg_58425 iscsi_offload_mesg 5 58425 NULL
+__iio_add_chan_devattr_58451 __iio_add_chan_devattr 0 58451 NULL
+capabilities_read_58457 capabilities_read 3 58457 NULL
+lpfc_idiag_baracc_read_58466 lpfc_idiag_baracc_read 3 58466 NULL nohasharray
@@ -108466,19 +110121,25 @@ index 0000000..6fcc08d
+snd_rme96_capture_copy_58484 snd_rme96_capture_copy 5 58484 NULL
+rndis_add_response_58544 rndis_add_response 2 58544 NULL
+efx_tsoh_heap_alloc_58545 efx_tsoh_heap_alloc 2 58545 NULL
++wrap_max_58548 wrap_max 0-1-2 58548 NULL
+gen_pool_alloc_58558 gen_pool_alloc 2 58558 NULL
+wep_decrypt_fail_read_58567 wep_decrypt_fail_read 3 58567 NULL
+scnprint_mac_oui_58578 scnprint_mac_oui 3-0 58578 NULL
++get_rhf_errstring_58582 get_rhf_errstring 3 58582 NULL
+ea_read_inline_58589 ea_read_inline 0 58589 NULL
+xip_file_read_58592 xip_file_read 3 58592 NULL
-+gdth_search_isa_58595 gdth_search_isa 1 58595 NULL
-+ebt_buf_count_58607 ebt_buf_count 0 58607 NULL
++ecryptfs_write_end_58594 ecryptfs_write_end 5-3 58594 NULL
++ixj_read_58615 ixj_read 3 58615 NULL
+skb_copy_to_page_nocache_58624 skb_copy_to_page_nocache 6 58624 NULL
++filemap_fdatawrite_range_58630 filemap_fdatawrite_range 0 58630 NULL
++vb2_qbuf_58631 vb2_qbuf 0 58631 NULL
+module_alloc_update_bounds_rx_58634 module_alloc_update_bounds_rx 1 58634 NULL
+ocfs2_block_to_cluster_start_58653 ocfs2_block_to_cluster_start 2 58653 NULL
++iwl_dbgfs_rx_handlers_write_58655 iwl_dbgfs_rx_handlers_write 3 58655 NULL
+uwb_bce_print_IEs_58686 uwb_bce_print_IEs 4 58686 NULL
-+vmalloc_node_58700 vmalloc_node 1 58700 NULL
-+csum_exist_in_range_58730 csum_exist_in_range 2 58730 NULL
++scsi_setup_command_freelist_58703 scsi_setup_command_freelist 0 58703 NULL
++vx_send_msg_58711 vx_send_msg 0 58711 NULL
++csum_exist_in_range_58730 csum_exist_in_range 2-3 58730 NULL
+frames_to_bytes_58741 frames_to_bytes 0-2 58741 NULL
+ieee80211_if_write_tkip_mic_test_58748 ieee80211_if_write_tkip_mic_test 3 58748 NULL
+agp_allocate_memory_58761 agp_allocate_memory 2 58761 NULL
@@ -108487,88 +110148,115 @@ index 0000000..6fcc08d
+raw_send_hdrinc_58803 raw_send_hdrinc 4 58803 NULL
+ep_read_58813 ep_read 3 58813 NULL
+command_write_58841 command_write 3 58841 NULL
-+ocfs2_truncate_log_append_58850 ocfs2_truncate_log_append 3 58850 NULL
++ocfs2_truncate_log_append_58850 ocfs2_truncate_log_append 0-3 58850 NULL
+iwl_dbgfs_traffic_log_read_58870 iwl_dbgfs_traffic_log_read 3 58870 NULL
+gs_alloc_req_58883 gs_alloc_req 2 58883 NULL
-+cs553x_init_one_58886 cs553x_init_one 3 58886 NULL
-+raw_ctl_compat_ioctl_58905 raw_ctl_compat_ioctl 3 58905 NULL
+print_devstats_dot11FCSErrorCount_58919 print_devstats_dot11FCSErrorCount 3 58919 NULL
-+tun_chr_compat_ioctl_58921 tun_chr_compat_ioctl 3 58921 NULL
++st5481_isoc_flatten_58952 st5481_isoc_flatten 0 58952 NULL
++netpoll_send_udp_58955 netpoll_send_udp 3 58955 NULL
++wait_table_hash_nr_entries_58962 wait_table_hash_nr_entries 0 58962 NULL
+crypto_aead_ivsize_58970 crypto_aead_ivsize 0 58970 NULL
+max3107_handlerx_58978 max3107_handlerx 2 58978 NULL
++handle_rx_packet_58993 handle_rx_packet 3 58993 NULL
+ep_write_59008 ep_write 3 59008 NULL
++lpfc_idiag_baracc_write_59014 lpfc_idiag_baracc_write 3 59014 NULL
++receive_server_sync_packet_59021 receive_server_sync_packet 3 59021 NULL
+selinux_transaction_write_59038 selinux_transaction_write 3 59038 NULL
+crypto_aead_reqsize_59039 crypto_aead_reqsize 0 59039 NULL
++i8042_enable_kbd_port_59049 i8042_enable_kbd_port 0 59049 NULL
+mmc_sd_num_wr_blocks_59112 mmc_sd_num_wr_blocks 0 59112 NULL
+scsi_io_completion_59122 scsi_io_completion 2 59122 NULL
+__iio_add_event_config_attrs_59136 __iio_add_event_config_attrs 0 59136 NULL
+print_devstats_dot11RTSSuccessCount_59145 print_devstats_dot11RTSSuccessCount 3 59145 NULL nohasharray
+framebuffer_alloc_59145 framebuffer_alloc 1 59145 &print_devstats_dot11RTSSuccessCount_59145
++ocfs2_claim_local_alloc_bits_59147 ocfs2_claim_local_alloc_bits 0 59147 NULL
+radeon_compat_ioctl_59150 radeon_compat_ioctl 2 59150 NULL
+pvr2_hdw_report_clients_59152 pvr2_hdw_report_clients 3 59152 NULL
++mthca_create_eq_59157 mthca_create_eq 2 59157 NULL
+setup_window_59178 setup_window 4-2-5-7 59178 NULL
-+ocfs2_move_extent_59187 ocfs2_move_extent 3 59187 NULL
++ocfs2_move_extent_59187 ocfs2_move_extent 2-5-3 59187 NULL
++InitLedSettings_59192 InitLedSettings 0 59192 NULL
++validate_exec_list_59204 validate_exec_list 0 59204 NULL
+xfs_iext_realloc_indirect_59211 xfs_iext_realloc_indirect 2 59211 NULL
-+inftl_partscan_59216 inftl_partscan 0 59216 NULL
-+skb_transport_header_59223 skb_transport_header 0 59223 NULL
++fast_rx_path_59214 fast_rx_path 3 59214 NULL
++check_mapped_selector_name_59216 check_mapped_selector_name 5 59216 NULL nohasharray
++inftl_partscan_59216 inftl_partscan 0 59216 &check_mapped_selector_name_59216
+dt3155_read_59226 dt3155_read 3 59226 NULL
+tcp_try_rmem_schedule_59231 tcp_try_rmem_schedule 2 59231 NULL
+tty_prepare_flip_string_flags_59240 tty_prepare_flip_string_flags 4 59240 NULL
+solo_v4l2_read_59247 solo_v4l2_read 3 59247 NULL
+nla_len_59258 nla_len 0 59258 NULL
++__push_leaf_right_59302 __push_leaf_right 0 59302 NULL
+btrfs_insert_dir_item_59304 btrfs_insert_dir_item 4 59304 NULL
+fd_copyout_59323 fd_copyout 3 59323 NULL
+read_9287_modal_eeprom_59327 read_9287_modal_eeprom 3 59327 NULL
+xfs_attrmulti_attr_set_59346 xfs_attrmulti_attr_set 4 59346 NULL
++__map_request_59350 __map_request 0 59350 NULL
+xfs_dir2_sf_entsize_59366 xfs_dir2_sf_entsize 0-2 59366 NULL
+pvr2_debugifc_print_info_59380 pvr2_debugifc_print_info 3 59380 NULL
++journal_init_dev_59384 journal_init_dev 5 59384 NULL
+fc_frame_alloc_fill_59394 fc_frame_alloc_fill 2 59394 NULL
++pci_ctrl_read_59424 pci_ctrl_read 0 59424 NULL
+vxge_hw_ring_rxds_per_block_get_59425 vxge_hw_ring_rxds_per_block_get 0 59425 NULL
++snd_pcm_tstamp_59431 snd_pcm_tstamp 0 59431 NULL
+squashfs_read_data_59440 squashfs_read_data 6 59440 NULL
+descriptor_loc_59446 descriptor_loc 3 59446 NULL
-+dma_attach_59495 dma_attach 5-6 59495 NULL
++shrink_tnc_trees_59481 shrink_tnc_trees 0 59481 NULL
+ib_copy_from_udata_59502 ib_copy_from_udata 3 59502 NULL
+rds_pin_pages_59507 rds_pin_pages 0 59507 NULL
+tunables_write_59563 tunables_write 3 59563 NULL
++__copy_from_user_ll_nozero_59571 __copy_from_user_ll_nozero 0-3 59571 NULL
++write_pbl_59583 write_pbl 4 59583 NULL
+memdup_user_59590 memdup_user 2 59590 NULL
++fcoe_ctlr_vn_send_59607 fcoe_ctlr_vn_send 4 59607 NULL
+mtrr_write_59622 mtrr_write 3 59622 NULL
++ocfs2_adjust_rightmost_branch_59623 ocfs2_adjust_rightmost_branch 0 59623 NULL
+ip_vs_icmp_xmit_59624 ip_vs_icmp_xmit 4 59624 NULL
+find_first_zero_bit_59636 find_first_zero_bit 0-2 59636 NULL
++dn_fib_nlmsg_size_59643 dn_fib_nlmsg_size 0 59643 NULL
+ubifs_setxattr_59650 ubifs_setxattr 4 59650 NULL nohasharray
+hidraw_read_59650 hidraw_read 3 59650 &ubifs_setxattr_59650
+v9fs_xattr_set_acl_59651 v9fs_xattr_set_acl 4 59651 NULL
++paravirt_sched_clock_59660 paravirt_sched_clock 0 59660 NULL
++tcp_skb_pcount_59664 tcp_skb_pcount 0 59664 NULL
+alloc_dca_provider_59670 alloc_dca_provider 2 59670 NULL
-+sriov_enable_59689 sriov_enable 2 59689 NULL
+ieee80211_mgmt_tx_59699 ieee80211_mgmt_tx 9 59699 NULL
+mic_calc_failure_read_59700 mic_calc_failure_read 3 59700 NULL
++ioperm_get_59701 ioperm_get 4-3 59701 NULL
++snd_pcm_info_user_59711 snd_pcm_info_user 0 59711 NULL
+prism2_info_scanresults_59729 prism2_info_scanresults 3 59729 NULL
-+ieee80211_if_read_fwded_unicast_59740 ieee80211_if_read_fwded_unicast 3 59740 NULL
++nfs_file_splice_read_59735 nfs_file_splice_read 4 59735 NULL
++sock_rmalloc_59740 sock_rmalloc 2 59740 NULL nohasharray
++ieee80211_if_read_fwded_unicast_59740 ieee80211_if_read_fwded_unicast 3 59740 &sock_rmalloc_59740
+qib_decode_7220_sdma_errs_59745 qib_decode_7220_sdma_errs 4 59745 NULL
-+strnlen_59746 strnlen 0 59746 NULL
++strnlen_59746 strnlen 0 59746 NULL nohasharray
++fuse_file_llseek_59746 fuse_file_llseek 2 59746 &strnlen_59746
+ext3_acl_count_59754 ext3_acl_count 0-1 59754 NULL
+long_retry_limit_read_59766 long_retry_limit_read 3 59766 NULL
+venus_remove_59781 venus_remove 4 59781 NULL
++xlog_do_recover_59789 xlog_do_recover 3 59789 NULL
+ipw_write_59807 ipw_write 3 59807 NULL
+rtllib_wx_set_gen_ie_59808 rtllib_wx_set_gen_ie 3 59808 NULL
-+ubi_dbg_check_all_ff_59810 ubi_dbg_check_all_ff 4 59810 NULL
++ubi_dbg_check_all_ff_59810 ubi_dbg_check_all_ff 0 59810 NULL
+scsi_init_shared_tag_map_59812 scsi_init_shared_tag_map 2 59812 NULL
+ieee80211_if_read_dot11MeshHWMPmaxPREQretries_59829 ieee80211_if_read_dot11MeshHWMPmaxPREQretries 3 59829 NULL
+gspca_dev_probe2_59833 gspca_dev_probe2 4 59833 NULL
-+may_create_59843 may_create 3 59843 NULL
++fs64_to_cpu_59845 fs64_to_cpu 0 59845 NULL
+tun_put_user_59849 tun_put_user 4 59849 NULL
+format_array_59854 format_array 0 59854 NULL
+pvr2_ioread_set_sync_key_59882 pvr2_ioread_set_sync_key 3 59882 NULL
+shmem_zero_setup_59885 shmem_zero_setup 0 59885 NULL
++l2cap_sock_recvmsg_59886 l2cap_sock_recvmsg 4 59886 NULL
+ffs_prepare_buffer_59892 ffs_prepare_buffer 2 59892 NULL
++ocfs2_extend_rotate_transaction_59894 ocfs2_extend_rotate_transaction 0 59894 NULL
++swiotlb_map_page_59909 swiotlb_map_page 3 59909 NULL
++ocfs2_expand_inline_ref_root_59945 ocfs2_expand_inline_ref_root 0 59945 NULL
+dapm_widget_power_read_file_59950 dapm_widget_power_read_file 3 59950 NULL
-+compat_ipmi_ioctl_59956 compat_ipmi_ioctl 3 59956 NULL
-+fb_getput_cmap_59971 fb_getput_cmap 3 59971 NULL
+__arch_hweight16_59975 __arch_hweight16 0 59975 NULL
+osd_req_read_kern_59990 osd_req_read_kern 5 59990 NULL
+ghash_async_setkey_60001 ghash_async_setkey 3 60001 NULL
+rawsock_sendmsg_60010 rawsock_sendmsg 4 60010 NULL
+mthca_init_cq_60011 mthca_init_cq 2 60011 NULL
-+register_device_60015 register_device 2-3 60015 NULL
+osd_req_list_dev_partitions_60027 osd_req_list_dev_partitions 4 60027 NULL
+xlog_bread_offset_60030 xlog_bread_offset 3 60030 NULL
+sys_sched_getaffinity_60033 sys_sched_getaffinity 2 60033 NULL
@@ -108583,24 +110271,24 @@ index 0000000..6fcc08d
+mp_register_gsi_60079 mp_register_gsi 2 60079 NULL
+rxrpc_kernel_send_data_60083 rxrpc_kernel_send_data 3 60083 NULL
+ieee80211_if_fmt_fwded_frames_60103 ieee80211_if_fmt_fwded_frames 3 60103 NULL
-+ttm_bo_kmap_60118 ttm_bo_kmap 3-2 60118 NULL
-+kmem_cache_alloc_trace_60152 kmem_cache_alloc_trace 0 60152 NULL
++ld_usb_read_60156 ld_usb_read 3 60156 NULL
+jmb38x_ms_count_slots_60164 jmb38x_ms_count_slots 0 60164 NULL
+init_state_60165 init_state 2 60165 NULL
+sg_build_sgat_60179 sg_build_sgat 3 60179 NULL nohasharray
+jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 &sg_build_sgat_60179
-+svc_compat_ioctl_60194 svc_compat_ioctl 3 60194 NULL
+ib_send_cm_mra_60202 ib_send_cm_mra 4 60202 NULL nohasharray
+qib_reg_phys_mr_60202 qib_reg_phys_mr 3 60202 &ib_send_cm_mra_60202
+store_iwmct_log_level_60209 store_iwmct_log_level 4 60209 NULL
++pvclock_scale_delta_60231 pvclock_scale_delta 0 60231 NULL
+compat_sys_fcntl64_60256 compat_sys_fcntl64 3 60256 NULL
+printer_write_60276 printer_write 3 60276 NULL
+__pskb_pull_tail_60287 __pskb_pull_tail 2 60287 NULL
+do_xip_mapping_read_60297 do_xip_mapping_read 5 60297 NULL
+getDataLength_60301 getDataLength 0 60301 NULL
-+ceph_parse_server_name_60318 ceph_parse_server_name 2 60318 NULL
-+__kfifo_from_user_r_60345 __kfifo_from_user_r 3-5 60345 NULL
++usb_alphatrack_write_60341 usb_alphatrack_write 3 60341 NULL
++__kfifo_from_user_r_60345 __kfifo_from_user_r 5-3 60345 NULL
+brcmf_alloc_wdev_60347 brcmf_alloc_wdev 1 60347 NULL
++rh_call_control_60349 rh_call_control 0 60349 NULL
+dccp_setsockopt_60367 dccp_setsockopt 5 60367 NULL
+mthca_alloc_resize_buf_60394 mthca_alloc_resize_buf 3 60394 NULL
+ocfs2_zero_extend_60396 ocfs2_zero_extend 3 60396 NULL
@@ -108609,185 +110297,247 @@ index 0000000..6fcc08d
+simple_alloc_urb_60420 simple_alloc_urb 3 60420 NULL
+excessive_retries_read_60425 excessive_retries_read 3 60425 NULL
+tstats_write_60432 tstats_write 3 60432 NULL nohasharray
-+kmalloc_60432 kmalloc 0-1 60432 &tstats_write_60432
++kmalloc_60432 kmalloc 1 60432 &tstats_write_60432
+tipc_buf_acquire_60437 tipc_buf_acquire 1 60437 NULL
++rx_data_60442 rx_data 4 60442 NULL
+tcf_csum_ipv4_igmp_60446 tcf_csum_ipv4_igmp 3 60446 NULL
++iwm_ntf_rx_packet_60452 iwm_ntf_rx_packet 3 60452 NULL
+crypto_shash_setkey_60483 crypto_shash_setkey 3 60483 NULL
+ath_tx_init_60515 ath_tx_init 2 60515 NULL
++ubi_wl_get_peb_60525 ubi_wl_get_peb 0 60525 NULL
++hysdn_sched_rx_60533 hysdn_sched_rx 3 60533 NULL
+v9fs_fid_readn_60544 v9fs_fid_readn 4 60544 NULL
++tracing_entries_write_60563 tracing_entries_write 3 60563 NULL
+skb_transport_offset_60619 skb_transport_offset 0 60619 NULL
+wl1273_fm_fops_write_60621 wl1273_fm_fops_write 3 60621 NULL
++usb_control_msg_60624 usb_control_msg 0 60624 NULL
+acl_alloc_stack_init_60630 acl_alloc_stack_init 1 60630 NULL
-+ubifs_recover_leb_60639 ubifs_recover_leb 3 60639 NULL
-+fb_get_fscreeninfo_60640 fb_get_fscreeninfo 3 60640 NULL
++free_dind_blocks_60635 free_dind_blocks 0 60635 NULL
+if_sdio_host_to_card_60666 if_sdio_host_to_card 4 60666 NULL
+ieee80211_if_read_dot11MeshConfirmTimeout_60670 ieee80211_if_read_dot11MeshConfirmTimeout 3 60670 NULL
+init_data_container_60709 init_data_container 1 60709 NULL
++vga_rcrt_60731 vga_rcrt 0 60731 NULL
++add_to_list_60744 add_to_list 0 60744 NULL
+snd_ice1712_ds_read_60754 snd_ice1712_ds_read 0 60754 NULL
+sel_write_checkreqprot_60774 sel_write_checkreqprot 3 60774 NULL
+opticon_write_60775 opticon_write 4 60775 NULL
+acl_alloc_num_60778 acl_alloc_num 1-2 60778 NULL
+snd_pcm_oss_readv3_60792 snd_pcm_oss_readv3 3 60792 NULL
-+mtd_compat_ioctl_60850 mtd_compat_ioctl 3 60850 NULL
+pwr_tx_with_ps_read_60851 pwr_tx_with_ps_read 3 60851 NULL
+pool_status_60861 pool_status 4 60861 NULL
-+alloc_irq_from_60868 alloc_irq_from 1 60868 NULL
++ieee80211_send_auth_60865 ieee80211_send_auth 5 60865 NULL
++alloc_irq_from_60868 alloc_irq_from 1-0 60868 NULL
+generic_writepages_60871 generic_writepages 0 60871 NULL
++ubifs_read_one_lp_60882 ubifs_read_one_lp 0 60882 NULL
+mgt_set_varlen_60916 mgt_set_varlen 4 60916 NULL
++xen_clocksource_read_60918 xen_clocksource_read 0 60918 NULL
+set_powered_60938 set_powered 4 60938 NULL
++xfs_rtallocate_extent_size_60939 xfs_rtallocate_extent_size 4 60939 NULL
+pti_char_write_60960 pti_char_write 3 60960 NULL
+mwifiex_alloc_sdio_mpa_buffers_60961 mwifiex_alloc_sdio_mpa_buffers 2-3 60961 NULL
++blkio_get_key_name_61014 blkio_get_key_name 4 61014 NULL
+ath6kl_lrssi_roam_read_61022 ath6kl_lrssi_roam_read 3 61022 NULL
++lpfc_idiag_queacc_write_61043 lpfc_idiag_queacc_write 3 61043 NULL
+symtab_init_61050 symtab_init 2 61050 NULL
+fuse_send_write_61053 fuse_send_write 0 61053 NULL
-+bitmap_scnlistprintf_61062 bitmap_scnlistprintf 0-4-2 61062 NULL
++snd_pcm_pause_61054 snd_pcm_pause 0 61054 NULL
++bitmap_scnlistprintf_61062 bitmap_scnlistprintf 2-4-0 61062 NULL
+ahash_align_buffer_size_61070 ahash_align_buffer_size 0-1-2 61070 NULL
++snd_pcm_update_hw_ptr0_61084 snd_pcm_update_hw_ptr0 0 61084 NULL
+get_derived_key_61100 get_derived_key 4 61100 NULL
+alloc_chrdev_region_61112 alloc_chrdev_region 0 61112 NULL
-+__probe_kernel_read_61119 __probe_kernel_read 3 61119 NULL
++p80211_headerlen_61119 p80211_headerlen 0 61119 NULL nohasharray
++__probe_kernel_read_61119 __probe_kernel_read 3 61119 &p80211_headerlen_61119
+proto_ports_offset_61125 proto_ports_offset 0 61125 NULL
+vmemmap_alloc_block_buf_61126 vmemmap_alloc_block_buf 1 61126 NULL
+afs_proc_cells_write_61139 afs_proc_cells_write 3 61139 NULL
-+__vmalloc_61168 __vmalloc 1 61168 NULL
+event_oom_late_read_61175 event_oom_late_read 3 61175 NULL
+sys_lsetxattr_61177 sys_lsetxattr 4 61177 NULL
++cfpkt_append_61206 cfpkt_append 3 61206 NULL
+arch_hibernation_header_save_61212 arch_hibernation_header_save 0 61212 NULL
++pn544_write_61215 pn544_write 3 61215 NULL
+smk_read_ambient_61220 smk_read_ambient 3 61220 NULL
-+ubifs_leb_write_61226 ubifs_leb_write 4-5 61226 NULL
++__verify_planes_array_61249 __verify_planes_array 0 61249 NULL
++find_get_pages_tag_61270 find_get_pages_tag 0 61270 NULL
++kick_a_thread_61273 kick_a_thread 0 61273 NULL
+vortex_adbdma_getlinearpos_61283 vortex_adbdma_getlinearpos 0 61283 NULL
+sys_add_key_61288 sys_add_key 4 61288 NULL
+ext4_issue_discard_61305 ext4_issue_discard 2 61305 NULL
+xfrm_user_sec_ctx_size_61320 xfrm_user_sec_ctx_size 0 61320 NULL
-+__fls_61340 __fls 0 61340 NULL nohasharray
++__fls_61340 __fls 0-1 61340 NULL nohasharray
+st5481_setup_isocpipes_61340 st5481_setup_isocpipes 6-4 61340 &__fls_61340
-+sys_ptrace_61369 sys_ptrace 3 61369 NULL
++set_params_61373 set_params 0 61373 NULL
+change_xattr_61390 change_xattr 5 61390 NULL
-+size_entry_mwt_61400 size_entry_mwt 0 61400 NULL
++system_enable_write_61396 system_enable_write 3 61396 NULL
+pm860x_bulk_read_61415 pm860x_bulk_read 3 61415 NULL
-+dma_ops_area_alloc_61440 dma_ops_area_alloc 3-4-5 61440 NULL
++i915_emit_box_61436 i915_emit_box 0 61436 NULL
++dma_ops_area_alloc_61440 dma_ops_area_alloc 3-4-5-0 61440 NULL
+unix_stream_sendmsg_61455 unix_stream_sendmsg 4 61455 NULL
-+snd_pcm_lib_writev_transfer_61483 snd_pcm_lib_writev_transfer 4-2-5 61483 NULL
++snd_pcm_lib_writev_transfer_61483 snd_pcm_lib_writev_transfer 5-4-2 61483 NULL
+btrfs_item_size_61485 btrfs_item_size 0 61485 NULL
-+choke_len_61491 choke_len 0 61491 NULL
++ocfs2_get_refcount_rec_61514 ocfs2_get_refcount_rec 0 61514 NULL
+clone_bio_61526 clone_bio 5 61526 NULL nohasharray
+erst_errno_61526 erst_errno 0 61526 &clone_bio_61526
+ntfs_attr_lookup_61539 ntfs_attr_lookup 0 61539 NULL
++trace_options_core_write_61551 trace_options_core_write 3 61551 NULL
+o2hb_pop_count_61553 o2hb_pop_count 2 61553 NULL
+dvb_net_ioctl_61559 dvb_net_ioctl 2 61559 NULL
+rbd_do_request_61561 rbd_do_request 6-7 61561 NULL
++parport_pc_fifo_write_block_dma_61568 parport_pc_fifo_write_block_dma 3 61568 NULL
++fan_proc_write_61569 fan_proc_write 3 61569 NULL
+ieee80211_if_read_rc_rateidx_mask_2ghz_61570 ieee80211_if_read_rc_rateidx_mask_2ghz 3 61570 NULL
++mip_minify_61584 mip_minify 2-1-0 61584 NULL
+seq_open_private_61589 seq_open_private 3 61589 NULL
-+__get_vm_area_61599 __get_vm_area 1 61599 NULL
-+ncp_compat_ioctl_61608 ncp_compat_ioctl 3 61608 NULL
++netlink_recvmsg_61600 netlink_recvmsg 4 61600 NULL
++cx2341x_handler_init_61601 cx2341x_handler_init 2 61601 NULL
+configfs_write_file_61621 configfs_write_file 3 61621 NULL
+ieee80211_rx_bss_info_61630 ieee80211_rx_bss_info 3 61630 NULL
+i2o_parm_table_get_61635 i2o_parm_table_get 6 61635 NULL
+snd_pcm_oss_read3_61643 snd_pcm_oss_read3 0-3 61643 NULL
+resize_stripes_61650 resize_stripes 2 61650 NULL
-+ttm_page_pool_free_61661 ttm_page_pool_free 2 61661 NULL
++ttm_page_pool_free_61661 ttm_page_pool_free 2-0 61661 NULL
+insert_one_name_61668 insert_one_name 7 61668 NULL
++snd_pcm_playback_avail_61671 snd_pcm_playback_avail 0 61671 NULL
++qib_format_hwmsg_61679 qib_format_hwmsg 2 61679 NULL
+lock_loop_61681 lock_loop 1 61681 NULL
+filter_read_61692 filter_read 3 61692 NULL
+iov_length_61716 iov_length 0 61716 NULL
+fragmentation_threshold_read_61718 fragmentation_threshold_read 3 61718 NULL
+read_file_interrupt_61742 read_file_interrupt 3 61742 NULL nohasharray
+read_file_regval_61742 read_file_regval 3 61742 &read_file_interrupt_61742
++gfs2_meta_wait_61773 gfs2_meta_wait 0 61773 NULL
++mls_compute_context_len_61812 mls_compute_context_len 0 61812 NULL
++btrfs_file_llseek_61838 btrfs_file_llseek 2 61838 NULL
+bfad_debugfs_write_regwr_61841 bfad_debugfs_write_regwr 3 61841 NULL
++btrfs_bitmap_cluster_61854 btrfs_bitmap_cluster 4 61854 NULL
+evdev_compute_buffer_size_61863 evdev_compute_buffer_size 0 61863 NULL
+get_fw_name_61874 get_fw_name 3 61874 NULL
-+ax25_addr_size_61899 ax25_addr_size 0 61899 NULL
++ieee80211_rtl_auth_challenge_61897 ieee80211_rtl_auth_challenge 3 61897 NULL
++ax25_addr_size_61899 ax25_addr_size 0 61899 NULL nohasharray
++cxgb4_pktgl_to_skb_61899 cxgb4_pktgl_to_skb 2 61899 &ax25_addr_size_61899
++roundup_ring_size_61901 roundup_ring_size 1 61901 NULL
+clear_refs_write_61904 clear_refs_write 3 61904 NULL
-+au0828_init_isoc_61917 au0828_init_isoc 3-2 61917 NULL
++au0828_init_isoc_61917 au0828_init_isoc 3-2-4 61917 NULL
+sctp_sendmsg_61919 sctp_sendmsg 4 61919 NULL
++ocfs2_reserve_new_metadata_blocks_61926 ocfs2_reserve_new_metadata_blocks 0 61926 NULL
+send_bulk_static_data_61932 send_bulk_static_data 3 61932 NULL
++cluster_pages_for_defrag_61956 cluster_pages_for_defrag 0 61956 NULL
+squashfs_read_id_index_table_61961 squashfs_read_id_index_table 4 61961 NULL
+mlx4_alloc_mtt_range_61966 mlx4_alloc_mtt_range 2 61966 NULL
+ocfs2_quota_write_61972 ocfs2_quota_write 5-4 61972 NULL
++fd_locked_ioctl_61978 fd_locked_ioctl 3 61978 NULL
+cow_file_range_61979 cow_file_range 3 61979 NULL
++ext4_da_get_block_prep_61987 ext4_da_get_block_prep 2 61987 NULL
++module_alloc_exec_61991 module_alloc_exec 1 61991 NULL
+virtnet_send_command_61993 virtnet_send_command 5-6 61993 NULL
++dequeue_event_62000 dequeue_event 3 62000 NULL
+xt_compat_match_offset_62011 xt_compat_match_offset 0 62011 NULL
+jffs2_do_unlink_62020 jffs2_do_unlink 4 62020 NULL
+pmcraid_build_passthrough_ioadls_62034 pmcraid_build_passthrough_ioadls 2 62034 NULL
+proc_fdinfo_read_62043 proc_fdinfo_read 3 62043 NULL
++ppp_tx_cp_62044 ppp_tx_cp 5 62044 NULL
+sctp_user_addto_chunk_62047 sctp_user_addto_chunk 2-3 62047 NULL
+do_pselect_62061 do_pselect 1 62061 NULL
+pcpu_alloc_bootmem_62074 pcpu_alloc_bootmem 2 62074 NULL
+get_domain_for_dev_62099 get_domain_for_dev 2 62099 NULL
+jffs2_security_setxattr_62107 jffs2_security_setxattr 4 62107 NULL
++generic_block_fiemap_62122 generic_block_fiemap 4 62122 NULL
+llc_ui_header_len_62131 llc_ui_header_len 0 62131 NULL
-+qib_diag_write_62133 qib_diag_write 3 62133 NULL
-+ql_status_62135 ql_status 5 62135 NULL
++qib_diag_write_62133 qib_diag_write 3 62133 NULL nohasharray
++kobject_add_varg_62133 kobject_add_varg 0 62133 &qib_diag_write_62133
++ql_status_62135 ql_status 5 62135 NULL nohasharray
++device_add_attrs_62135 device_add_attrs 0 62135 &ql_status_62135
+video_usercopy_62151 video_usercopy 2 62151 NULL
++wrmWithLock_62164 wrmWithLock 0 62164 NULL
+prism54_wpa_bss_ie_get_62173 prism54_wpa_bss_ie_get 0 62173 NULL
+alloc_upcall_62186 alloc_upcall 2 62186 NULL
++global_page_state_62202 global_page_state 0 62202 NULL
+btrfs_xattr_acl_set_62203 btrfs_xattr_acl_set 4 62203 NULL
+sock_kmalloc_62205 sock_kmalloc 2 62205 NULL
+check_unicast_packet_62217 check_unicast_packet 2 62217 NULL
+hash_new_62224 hash_new 1 62224 NULL
+nfsd_read_file_62241 nfsd_read_file 6 62241 NULL
-+allocate_partition_62245 allocate_partition 4 62245 NULL
+send_control_msg_62261 send_control_msg 5 62261 NULL
++ocfs2_find_victim_alloc_group_62306 ocfs2_find_victim_alloc_group 0 62306 NULL
+subsystem_filter_read_62310 subsystem_filter_read 3 62310 NULL
+udf_sb_alloc_partition_maps_62313 udf_sb_alloc_partition_maps 2 62313 NULL
++hfcpci_empty_bfifo_62323 hfcpci_empty_bfifo 4 62323 NULL
+Wb35Reg_BurstWrite_62327 Wb35Reg_BurstWrite 4 62327 NULL
+flash_write_62354 flash_write 3 62354 NULL
-+kmalloc_order_62372 kmalloc_order 0 62372 NULL
++xfpregs_set_62363 xfpregs_set 4 62363 NULL
+altera_irscan_62396 altera_irscan 2 62396 NULL
+udplite_manip_pkt_62433 udplite_manip_pkt 2 62433 NULL
+netdev_alloc_skb_62437 netdev_alloc_skb 2 62437 NULL
+e1000_check_copybreak_62448 e1000_check_copybreak 3 62448 NULL
-+ceph_dns_resolve_name_62488 ceph_dns_resolve_name 2 62488 NULL
-+mlx4_en_create_rx_ring_62498 mlx4_en_create_rx_ring 3 62498 NULL
-+pep_sendmsg_62524 pep_sendmsg 4 62524 NULL
++ocfs2_path_bh_journal_access_62504 ocfs2_path_bh_journal_access 0 62504 NULL
++count_open_files_62524 count_open_files 0 62524 NULL nohasharray
++pep_sendmsg_62524 pep_sendmsg 4 62524 &count_open_files_62524
+store_pwm1_62529 store_pwm1 4 62529 NULL
+test_iso_queue_62534 test_iso_queue 5 62534 NULL
+debugfs_read_62535 debugfs_read 3 62535 NULL
+sco_sock_sendmsg_62542 sco_sock_sendmsg 4 62542 NULL
+qib_refresh_qsfp_cache_62547 qib_refresh_qsfp_cache 0 62547 NULL
+xfrm_user_policy_62573 xfrm_user_policy 4 62573 NULL
-+flex_array_get_ptr_62579 flex_array_get_ptr 2 62579 NULL
-+nfsd_vfs_read_62605 nfsd_vfs_read 6 62605 NULL
-+iommu_area_alloc_62619 iommu_area_alloc 2-3-4-7 62619 NULL
-+ems_pcmcia_add_card_62627 ems_pcmcia_add_card 2 62627 NULL
++packet_alloc_skb_62602 packet_alloc_skb 2-5-4 62602 NULL
++prism2_send_mgmt_62605 prism2_send_mgmt 4 62605 NULL nohasharray
++nfsd_vfs_read_62605 nfsd_vfs_read 6 62605 &prism2_send_mgmt_62605
++iommu_area_alloc_62619 iommu_area_alloc 2-3-4-7-0 62619 NULL
+iwl_dbgfs_force_reset_read_62628 iwl_dbgfs_force_reset_read 3 62628 NULL
-+compat_rangeinfo_62630 compat_rangeinfo 2 62630 NULL
+lpfc_sli4_queue_alloc_62646 lpfc_sli4_queue_alloc 3 62646 NULL
+tt_changes_fill_buffer_62649 tt_changes_fill_buffer 3 62649 NULL
+ima_file_mmap_62663 ima_file_mmap 0 62663 NULL
+write_62671 write 3 62671 NULL
+printer_req_alloc_62687 printer_req_alloc 2 62687 NULL nohasharray
+iwl_dbgfs_rx_statistics_read_62687 iwl_dbgfs_rx_statistics_read 3 62687 &printer_req_alloc_62687
++ext4_ind_map_blocks_62690 ext4_ind_map_blocks 0 62690 NULL
+adxl34x_i2c_read_block_62691 adxl34x_i2c_read_block 3 62691 NULL
-+ioremap_wc_62695 ioremap_wc 1-2 62695 NULL
+bioset_integrity_create_62708 bioset_integrity_create 2 62708 NULL
++rdm_62719 rdm 0 62719 NULL
+key_replays_read_62746 key_replays_read 3 62746 NULL
-+init_chip_wc_pat_62768 init_chip_wc_pat 2 62768 NULL
++mwifiex_rdeeprom_write_62754 mwifiex_rdeeprom_write 3 62754 NULL
+ax25_sendmsg_62770 ax25_sendmsg 4 62770 NULL
+scrub_chunk_62771 scrub_chunk 4 62771 NULL nohasharray
+page_key_alloc_62771 page_key_alloc 0 62771 &scrub_chunk_62771
+tracing_total_entries_read_62817 tracing_total_entries_read 3 62817 NULL
-+__rounddown_pow_of_two_62836 __rounddown_pow_of_two 0 62836 NULL
++__generic_file_splice_read_62834 __generic_file_splice_read 4 62834 NULL
++BeceemEEPROMBulkRead_62835 BeceemEEPROMBulkRead 0 62835 NULL
++__rounddown_pow_of_two_62836 __rounddown_pow_of_two 0-1 62836 NULL
+xlog_recover_add_to_trans_62839 xlog_recover_add_to_trans 4 62839 NULL
+rx_fcs_err_read_62844 rx_fcs_err_read 3 62844 NULL
++genlmsg_msg_size_62845 genlmsg_msg_size 0-1 62845 NULL
++read_nic_io_dword_62859 read_nic_io_dword 0 62859 NULL
+hpi_read_word_62862 hpi_read_word 0 62862 NULL
+nfs_writedata_alloc_62868 nfs_writedata_alloc 1 62868 NULL
+aoechr_write_62883 aoechr_write 3 62883 NULL
-+inode_mode_to_security_class_62886 inode_mode_to_security_class 0 62886 NULL
+resize_info_buffer_62889 resize_info_buffer 2 62889 NULL
+if_spi_host_to_card_62890 if_spi_host_to_card 4 62890 NULL
++ocfs2_validate_gd_parent_62905 ocfs2_validate_gd_parent 0 62905 NULL
+mempool_create_slab_pool_62907 mempool_create_slab_pool 1 62907 NULL
+getdqbuf_62908 getdqbuf 1 62908 NULL
+agp_create_user_memory_62955 agp_create_user_memory 1 62955 NULL
-+__vb2_perform_fileio_63033 __vb2_perform_fileio 3 63033 NULL
++get_skb_63008 get_skb 2 63008 NULL
++kstrtoull_from_user_63026 kstrtoull_from_user 2 63026 NULL
++PTR_ERR_63033 PTR_ERR 0 63033 NULL nohasharray
++__vb2_perform_fileio_63033 __vb2_perform_fileio 3 63033 &PTR_ERR_63033
+scsi_host_alloc_63041 scsi_host_alloc 2 63041 NULL
-+au_dir_size_63057 au_dir_size 0 63057 NULL
+unlink1_63059 unlink1 3 63059 NULL
-+ocfs2_decrease_refcount_63078 ocfs2_decrease_refcount 3 63078 NULL
-+iwl_dbgfs_sensitivity_read_63116 iwl_dbgfs_sensitivity_read 3 63116 NULL
++ocfs2_decrease_refcount_63078 ocfs2_decrease_refcount 0-4-3 63078 NULL
++compare_lebs_63098 compare_lebs 0 63098 NULL
++brcmf_alloc_pkt_and_read_63116 brcmf_alloc_pkt_and_read 2 63116 NULL nohasharray
++iwl_dbgfs_sensitivity_read_63116 iwl_dbgfs_sensitivity_read 3 63116 &brcmf_alloc_pkt_and_read_63116
+ib_send_cm_rtu_63138 ib_send_cm_rtu 3 63138 NULL
++snd_pcm_status_user_63140 snd_pcm_status_user 0 63140 NULL
++ubifs_change_one_lp_63157 ubifs_change_one_lp 0 63157 NULL
++dma_set_mask_63172 dma_set_mask 0 63172 NULL
++snd_pcm_lib_malloc_pages_63182 snd_pcm_lib_malloc_pages 2 63182 NULL
+vme_master_read_63221 vme_master_read 0 63221 NULL
+module_alloc_update_bounds_rw_63233 module_alloc_update_bounds_rw 1 63233 NULL
++sched_domain_node_span_63234 sched_domain_node_span 1 63234 NULL
+ptp_read_63251 ptp_read 4 63251 NULL
++ntfs_attr_can_be_non_resident_63267 ntfs_attr_can_be_non_resident 0 63267 NULL
++readword_63288 readword 0 63288 NULL
++tcp_collapse_63294 tcp_collapse 5-6 63294 NULL
++isdn_ppp_ccp_xmit_reset_63297 isdn_ppp_ccp_xmit_reset 6 63297 NULL
+dns_resolver_instantiate_63314 dns_resolver_instantiate 3 63314 NULL
+proc_info_read_63344 proc_info_read 3 63344 NULL
+ps_upsd_max_sptime_read_63362 ps_upsd_max_sptime_read 3 63362 NULL
@@ -108797,127 +110547,152 @@ index 0000000..6fcc08d
+noack_read_63419 noack_read 3 63419 NULL
+l2cap_sock_sendmsg_63427 l2cap_sock_sendmsg 4 63427 NULL
+iwl_dbgfs_debug_level_read_63430 iwl_dbgfs_debug_level_read 3 63430 NULL
++brcmu_pkttotlen_63431 brcmu_pkttotlen 0 63431 NULL
+kone_send_63435 kone_send 4 63435 NULL
+nfsd_symlink_63442 nfsd_symlink 6 63442 NULL
+snd_info_entry_write_63474 snd_info_entry_write 3 63474 NULL
-+read_kcore_63488 read_kcore 3 63488 NULL
++do_work_63483 do_work 0 63483 NULL
++read_kcore_63488 read_kcore 3 63488 NULL nohasharray
++get_gpio_63488 get_gpio 0 63488 &read_kcore_63488
+snd_pcm_plug_write_transfer_63503 snd_pcm_plug_write_transfer 0-3 63503 NULL
-+ubi_more_leb_change_data_63534 ubi_more_leb_change_data 4 63534 NULL
++ubi_more_leb_change_data_63534 ubi_more_leb_change_data 4-0 63534 NULL
+snapshot_status_63538 snapshot_status 4 63538 NULL
+if_sdio_read_scratch_63540 if_sdio_read_scratch 0 63540 NULL
+append_to_buffer_63550 append_to_buffer 3 63550 NULL
+kvm_write_guest_page_63555 kvm_write_guest_page 5 63555 NULL
-+au_br_do_del_hdp_63561 au_br_do_del_hdp 3 63561 NULL
+ubifs_lpt_scan_nolock_63572 ubifs_lpt_scan_nolock 0 63572 NULL
+ocfs2_calc_trunc_pos_63576 ocfs2_calc_trunc_pos 4 63576 NULL
+ext3_clear_blocks_63597 ext3_clear_blocks 4-5 63597 NULL
++mlx4_ib_alloc_cq_buf_63610 mlx4_ib_alloc_cq_buf 3 63610 NULL
+module_alloc_63630 module_alloc 1 63630 NULL
-+ntfs_malloc_nofs_nofail_63631 ntfs_malloc_nofs_nofail 1 63631 NULL
+symbol_build_supp_rates_63634 symbol_build_supp_rates 0 63634 NULL
-+_ubh_find_next_zero_bit__63640 _ubh_find_next_zero_bit_ 4-5-3 63640 NULL
++_ubh_find_next_zero_bit__63640 _ubh_find_next_zero_bit_ 3-5-4 63640 NULL
++ext4_ext_get_access_63642 ext4_ext_get_access 0 63642 NULL
+proc_loginuid_write_63648 proc_loginuid_write 3 63648 NULL
+nand_ecc_test_63654 nand_ecc_test 1 63654 NULL nohasharray
-+ValidateDSDParamsChecksum_63654 ValidateDSDParamsChecksum 3 63654 &nand_ecc_test_63654
++ValidateDSDParamsChecksum_63654 ValidateDSDParamsChecksum 3-0 63654 &nand_ecc_test_63654
+hidraw_ioctl_63658 hidraw_ioctl 2 63658 NULL
+iwl4965_rs_sta_dbgfs_scale_table_read_63672 iwl4965_rs_sta_dbgfs_scale_table_read 3 63672 NULL
+vbi_read_63673 vbi_read 3 63673 NULL nohasharray
+xen_register_pirq_63673 xen_register_pirq 1-2 63673 &vbi_read_63673
-+mkiss_compat_ioctl_63686 mkiss_compat_ioctl 4 63686 NULL
++bin_search_63697 bin_search 0 63697 NULL
++ocfs2_et_root_journal_access_63713 ocfs2_et_root_journal_access 0 63713 NULL
+btrfs_insert_delayed_dir_index_63720 btrfs_insert_delayed_dir_index 4 63720 NULL
+nfs4_reset_slot_table_63721 nfs4_reset_slot_table 2 63721 NULL
-+au_ii_realloc_63728 au_ii_realloc 2 63728 NULL
++i915_gem_execbuffer_relocate_63728 i915_gem_execbuffer_relocate 0 63728 NULL
+selinux_secctx_to_secid_63744 selinux_secctx_to_secid 2 63744 NULL
++i915_gem_execbuffer_flush_63749 i915_gem_execbuffer_flush 0 63749 NULL
+snd_pcm_oss_read1_63771 snd_pcm_oss_read1 3 63771 NULL
++snd_pcm_link_63772 snd_pcm_link 0 63772 NULL
+snd_opl4_mem_proc_read_63774 snd_opl4_mem_proc_read 5 63774 NULL
-+spidev_compat_ioctl_63778 spidev_compat_ioctl 2-3 63778 NULL
-+snapshot_compat_ioctl_63792 snapshot_compat_ioctl 3 63792 NULL
++spidev_compat_ioctl_63778 spidev_compat_ioctl 2 63778 NULL
+mwifiex_11n_create_rx_reorder_tbl_63806 mwifiex_11n_create_rx_reorder_tbl 4 63806 NULL
+copy_nodes_to_user_63807 copy_nodes_to_user 2 63807 NULL
+sel_write_load_63830 sel_write_load 3 63830 NULL
++IsSectionWritable_63842 IsSectionWritable 0 63842 NULL
+proc_pid_attr_write_63845 proc_pid_attr_write 3 63845 NULL
+ieee80211_if_fmt_channel_type_63855 ieee80211_if_fmt_channel_type 3 63855 NULL
+init_map_ipmac_63896 init_map_ipmac 4-3 63896 NULL
-+divas_write_63901 divas_write 3 63901 NULL
-+xhci_alloc_stream_info_63902 xhci_alloc_stream_info 3 63902 NULL
++IsOffsetWritable_63902 IsOffsetWritable 0 63902 NULL nohasharray
++xhci_alloc_stream_info_63902 xhci_alloc_stream_info 3 63902 &IsOffsetWritable_63902
+pohmelfs_readpages_trans_complete_63912 pohmelfs_readpages_trans_complete 2 63912 NULL
-+uvc_alloc_urb_buffers_63922 uvc_alloc_urb_buffers 0-3-2 63922 NULL
++uvc_alloc_urb_buffers_63922 uvc_alloc_urb_buffers 0-2-3 63922 NULL
+acpi_ev_get_gpe_xrupt_block_63924 acpi_ev_get_gpe_xrupt_block 1 63924 NULL
+ledd_proc_write_63928 ledd_proc_write 3 63928 NULL
+tipc_send2port_63935 tipc_send2port 5 63935 NULL
+afs_send_simple_reply_63940 afs_send_simple_reply 3 63940 NULL
+macvtap_recvmsg_63949 macvtap_recvmsg 4 63949 NULL
-+diva_xdi_write_63975 diva_xdi_write 4 63975 NULL
++domain_pfn_mapping_63957 domain_pfn_mapping 4 63957 NULL
++ieee80211_authentication_req_63973 ieee80211_authentication_req 3 63973 NULL
+iwl_legacy_dbgfs_tx_statistics_read_63987 iwl_legacy_dbgfs_tx_statistics_read 3 63987 NULL
+read_file_frameerrors_64001 read_file_frameerrors 3 64001 NULL
-+raid_status_64011 raid_status 4 64011 NULL
+kmemdup_64015 kmemdup 2 64015 NULL
+tcf_csum_skb_nextlayer_64025 tcf_csum_skb_nextlayer 3 64025 NULL
+dbAllocDmapLev_64030 dbAllocDmapLev 0 64030 NULL
-+frequency_read_64031 frequency_read 3 64031 NULL nohasharray
-+resize_async_buffer_64031 resize_async_buffer 4 64031 &frequency_read_64031
++frequency_read_64031 frequency_read 3 64031 NULL
+get_u8_64076 get_u8 0 64076 NULL
+sl_realloc_bufs_64086 sl_realloc_bufs 2 64086 NULL
++clear_update_marker_64088 clear_update_marker 0 64088 NULL
+lbs_highrssi_read_64089 lbs_highrssi_read 3 64089 NULL
+do_load_xattr_datum_64118 do_load_xattr_datum 0 64118 NULL
+ol_quota_entries_per_block_64122 ol_quota_entries_per_block 0 64122 NULL
-+init_bch_64130 init_bch 1-2 64130 NULL
++i915_gem_execbuffer_reserve_64127 i915_gem_execbuffer_reserve 0 64127 NULL
++init_bch_64130 init_bch 2-1 64130 NULL
+uea_idma_write_64139 uea_idma_write 3 64139 NULL
+ablkcipher_copy_iv_64140 ablkcipher_copy_iv 3 64140 NULL
+dlfb_ops_write_64150 dlfb_ops_write 3 64150 NULL
++WriteReg_64163 WriteReg 0 64163 NULL
+cpumask_scnprintf_64170 cpumask_scnprintf 2 64170 NULL
+alloc_session_64171 alloc_session 2-1 64171 NULL
++ea_len_64229 ea_len 0 64229 NULL
++header_len_64232 header_len 0 64232 NULL
++xfrm_acquire_msgsize_64239 xfrm_acquire_msgsize 0 64239 NULL
+redrat3_transmit_ir_64244 redrat3_transmit_ir 3 64244 NULL
-+verify_ucode_size_64266 verify_ucode_size 0 64266 NULL
++fuse_do_getattr_64245 fuse_do_getattr 0 64245 NULL
+io_capture_transfer_64276 io_capture_transfer 4 64276 NULL
+btrfs_file_extent_offset_64278 btrfs_file_extent_offset 0 64278 NULL
+event_id_read_64288 event_id_read 3 64288 NULL nohasharray
+xfs_dir_cilookup_result_64288 xfs_dir_cilookup_result 3 64288 &event_id_read_64288
++btrfs_reserve_extent_64293 btrfs_reserve_extent 6 64293 NULL
+ocfs2_block_check_validate_bhs_64302 ocfs2_block_check_validate_bhs 0 64302 NULL
++snd_hda_get_sub_nodes_64304 snd_hda_get_sub_nodes 0 64304 NULL
+ffz_64324 ffz 0 64324 NULL
+sisusbcon_clear_64329 sisusbcon_clear 4-3-5 64329 NULL
-+kmem_cache_alloc_trace_64334 kmem_cache_alloc_trace 0 64334 NULL
+ts_write_64336 ts_write 3 64336 NULL
+usbtmc_write_64340 usbtmc_write 3 64340 NULL
-+do_write_orph_node_64343 do_write_orph_node 2 64343 NULL
-+wlc_phy_loadsampletable_nphy_64367 wlc_phy_loadsampletable_nphy 3 64367 NULL
++ft1000_read_reg_64352 ft1000_read_reg 0 64352 NULL
++user_regset_copyin_64360 user_regset_copyin 7 64360 NULL
++llc_alloc_frame_64366 llc_alloc_frame 4 64366 NULL
++bnx2_enable_msix_64372 bnx2_enable_msix 2 64372 NULL
+ilo_write_64378 ilo_write 3 64378 NULL
+ir_lirc_transmit_ir_64403 ir_lirc_transmit_ir 3 64403 NULL
+pidlist_allocate_64404 pidlist_allocate 1 64404 NULL
+rx_hdr_overflow_read_64407 rx_hdr_overflow_read 3 64407 NULL
+snd_card_create_64418 snd_card_create 4 64418 NULL nohasharray
+keyctl_get_security_64418 keyctl_get_security 3 64418 &snd_card_create_64418
++ax25_recvmsg_64441 ax25_recvmsg 4 64441 NULL
++pfkey_sockaddr_len_64453 pfkey_sockaddr_len 0 64453 NULL
+ip_vs_create_timeout_table_64478 ip_vs_create_timeout_table 2 64478 NULL
-+alloc_large_system_hash_64490 alloc_large_system_hash 2 64490 NULL
++alloc_large_system_hash_64490 alloc_large_system_hash 2-8-4-3 64490 NULL
+p54_parse_rssical_64493 p54_parse_rssical 3 64493 NULL
++emulator_cmpxchg_emulated_64501 emulator_cmpxchg_emulated 5 64501 NULL
+msg_data_sz_64503 msg_data_sz 0 64503 NULL
+crypto_blkcipher_alignmask_64520 crypto_blkcipher_alignmask 0 64520 NULL
+opera1_usb_i2c_msgxfer_64521 opera1_usb_i2c_msgxfer 4 64521 NULL
++iwl_dbgfs_ucode_tracing_write_64524 iwl_dbgfs_ucode_tracing_write 3 64524 NULL
+ses_send_diag_64527 ses_send_diag 4 64527 NULL
-+ca_extend_64541 ca_extend 2 64541 NULL
+lm8323_read_64547 lm8323_read 4 64547 NULL
+__spi_sync_64561 __spi_sync 0 64561 NULL
+__apei_exec_run_64563 __apei_exec_run 0 64563 NULL
++diva_os_alloc_message_buffer_64568 diva_os_alloc_message_buffer 1 64568 NULL
++kstrtoul_from_user_64569 kstrtoul_from_user 2 64569 NULL
++use_pool_64607 use_pool 2 64607 NULL
+fanotify_write_64623 fanotify_write 3 64623 NULL
++ocfs2_remove_refcount_extent_64631 ocfs2_remove_refcount_extent 0 64631 NULL
+ocfs2_read_xattr_block_64661 ocfs2_read_xattr_block 0 64661 NULL
+nr_free_zone_pages_64680 nr_free_zone_pages 0 64680 NULL
++ip_select_ident_more_64707 ip_select_ident_more 4 64707 NULL
+__feat_register_sp_64712 __feat_register_sp 6 64712 NULL
+snd_pcm_oss_capture_position_fixup_64713 snd_pcm_oss_capture_position_fixup 0 64713 NULL
+dapm_bias_read_file_64715 dapm_bias_read_file 3 64715 NULL
+atomic_add_return_64720 atomic_add_return 0-1 64720 NULL
+i2400m_msg_to_dev_64722 i2400m_msg_to_dev 3 64722 NULL
++AscGetChipVersion_64737 AscGetChipVersion 0 64737 NULL
+squashfs_read_inode_lookup_table_64739 squashfs_read_inode_lookup_table 4 64739 NULL
+bio_map_kern_64751 bio_map_kern 3 64751 NULL
+rt2x00debug_write_csr_64753 rt2x00debug_write_csr 3 64753 NULL
+isr_low_rssi_read_64789 isr_low_rssi_read 3 64789 NULL
+nfsctl_transaction_write_64800 nfsctl_transaction_write 3 64800 NULL
++rfkill_fop_write_64808 rfkill_fop_write 3 64808 NULL
+megaraid_change_queue_depth_64815 megaraid_change_queue_depth 2 64815 NULL
+ecryptfs_send_miscdev_64816 ecryptfs_send_miscdev 2 64816 NULL
+do_kimage_alloc_64827 do_kimage_alloc 3 64827 NULL
++em28xx_read_reg_64839 em28xx_read_reg 0 64839 NULL
+altera_set_dr_pre_64862 altera_set_dr_pre 2 64862 NULL
+ffs_epfile_io_64886 ffs_epfile_io 3 64886 NULL
++mk_pid_64894 mk_pid 0-3 64894 NULL
+ieee80211_if_read_ave_beacon_64924 ieee80211_if_read_ave_beacon 3 64924 NULL
-+ubifs_wbuf_write_nolock_64946 ubifs_wbuf_write_nolock 3 64946 NULL
-+snd_rawmidi_ioctl_compat_64954 snd_rawmidi_ioctl_compat 3 64954 NULL
++usb_reset_and_verify_device_64933 usb_reset_and_verify_device 0 64933 NULL
+ip_options_get_from_user_64958 ip_options_get_from_user 4 64958 NULL
+acpi_os_install_interrupt_handler_64968 acpi_os_install_interrupt_handler 1 64968 NULL
+ext2_group_first_block_no_64972 ext2_group_first_block_no 0-2 64972 NULL
@@ -108925,41 +110700,48 @@ index 0000000..6fcc08d
+crypto_ahash_digestsize_65014 crypto_ahash_digestsize 0 65014 NULL
+c4iw_ocqp_pool_alloc_65023 c4iw_ocqp_pool_alloc 2 65023 NULL
+insert_dent_65034 insert_dent 7 65034 NULL
-+compat_put_ushort_65040 compat_put_ushort 1 65040 NULL
-+compat_cmdtest_65064 compat_cmdtest 2 65064 NULL
-+count_run_65072 count_run 0-2-4 65072 NULL nohasharray
++brcmf_sdcard_rwdata_65041 brcmf_sdcard_rwdata 5 65041 NULL
++ath9k_multi_regread_65056 ath9k_multi_regread 4 65056 NULL
++pcibios_enable_device_65059 pcibios_enable_device 0 65059 NULL
++make_idx_node_65068 make_idx_node 0 65068 NULL
++count_run_65072 count_run 0-4-5-2 65072 NULL nohasharray
+bnx2fc_process_l2_frame_compl_65072 bnx2fc_process_l2_frame_compl 3 65072 &count_run_65072
+__alloc_bootmem_node_high_65076 __alloc_bootmem_node_high 2 65076 NULL
+ocfs2_truncate_cluster_pages_65086 ocfs2_truncate_cluster_pages 2 65086 NULL
-+ssb_bus_register_65183 ssb_bus_register 3 65183 NULL
++scsi_add_host_with_dma_65093 scsi_add_host_with_dma 0 65093 NULL
++nf_bridge_mtu_reduction_65192 nf_bridge_mtu_reduction 0 65192 NULL
++nfulnl_alloc_skb_65207 nfulnl_alloc_skb 2-1 65207 NULL
+whci_n_caps_65247 whci_n_caps 0 65247 NULL
+atomic_long_read_65263 atomic_long_read 0 65263 NULL
-+kmem_zalloc_greedy_65268 kmem_zalloc_greedy 3-2 65268 NULL
+kmalloc_parameter_65279 kmalloc_parameter 1 65279 NULL
+compat_core_sys_select_65285 compat_core_sys_select 1 65285 NULL
++get_unaligned_le16_65293 get_unaligned_le16 0 65293 NULL
+redirected_tty_write_65297 redirected_tty_write 3 65297 NULL
+get_var_len_65304 get_var_len 0 65304 NULL
+unpack_array_65318 unpack_array 0 65318 NULL
+dccp_setsockopt_service_65336 dccp_setsockopt_service 4 65336 NULL
+dma_rx_requested_read_65354 dma_rx_requested_read 3 65354 NULL
+alloc_cpu_rmap_65363 alloc_cpu_rmap 1 65363 NULL
-+strchr_65372 strchr 0 65372 NULL
+__alloc_bootmem_nopanic_65397 __alloc_bootmem_nopanic 1 65397 NULL
+trace_seq_to_user_65398 trace_seq_to_user 3 65398 NULL
++usb_ep_enable_65405 usb_ep_enable 0 65405 NULL
+iio_device_add_channel_sysfs_65406 iio_device_add_channel_sysfs 0 65406 NULL
+ocfs2_write_begin_nolock_65410 ocfs2_write_begin_nolock 3-4 65410 NULL
-+drm_calloc_large_65421 drm_calloc_large 1-2 65421 NULL
++drm_calloc_large_65421 drm_calloc_large 2-1 65421 NULL
++device_add_groups_65423 device_add_groups 0 65423 NULL
+cap_capable_65430 cap_capable 0 65430 NULL
+xpc_kzalloc_cacheline_aligned_65433 xpc_kzalloc_cacheline_aligned 1 65433 NULL
+usb_alloc_coherent_65444 usb_alloc_coherent 2 65444 NULL
++clear_user_65470 clear_user 2 65470 NULL
+ath_rx_edma_init_65483 ath_rx_edma_init 2 65483 NULL
+alloc_dr_65495 alloc_dr 2 65495 NULL
++selnl_msglen_65499 selnl_msglen 0 65499 NULL
diff --git a/tools/gcc/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin.c
new file mode 100644
-index 0000000..03d0c84
+index 0000000..87dd5e2
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin.c
-@@ -0,0 +1,2113 @@
+@@ -0,0 +1,3840 @@
+/*
+ * Copyright 2011, 2012, 2013 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -108998,6 +110780,30 @@ index 0000000..03d0c84
+
+#if BUILDING_GCC_VERSION >= 4008
+#define TODO_dump_func 0
++#define TODO_dump_cgraph 0
++#endif
++
++#define __unused __attribute__((__unused__))
++#define ASM_NAME(node) IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(node))
++#define NAME(node) IDENTIFIER_POINTER(DECL_NAME(node))
++#define NAME_LEN(node) IDENTIFIER_LENGTH(DECL_NAME(node))
++#define BEFORE_STMT true
++#define AFTER_STMT false
++#define CREATE_NEW_VAR NULL_TREE
++#define CODES_LIMIT 32
++#define MAX_PARAM 31
++#define VEC_LEN 128
++#define MY_STMT GF_PLF_1
++#define NO_CAST_CHECK GF_PLF_2
++#define RET_CHECK NULL_TREE
++#define CANNOT_FIND_ARG 32
++#define WRONG_NODE 32
++#define NOT_INTENTIONAL_ASM NULL
++#define MIN_CHECK true
++#define MAX_CHECK false
++
++#if BUILDING_GCC_VERSION == 4005
++#define DECL_CHAIN(NODE) (TREE_CHAIN(DECL_MINIMAL_CHECK(NODE)))
+#endif
+
+struct size_overflow_hash {
@@ -109012,44 +110818,56 @@ index 0000000..03d0c84
+ MARK_NO, MARK_YES, MARK_NOT_INTENTIONAL, MARK_TURN_OFF
+};
+
-+enum err_code_conditions {
-+ CAST_ONLY, FROM_CONST
-+};
++static unsigned int call_count;
+
-+static unsigned int call_count = 0;
++struct visited {
++ struct visited *next;
++ const_tree fndecl;
++ unsigned int num;
++ const_gimple first_stmt;
++};
+
-+#define __unused __attribute__((__unused__))
-+#define NAME(node) IDENTIFIER_POINTER(DECL_NAME(node))
-+#define NAME_LEN(node) IDENTIFIER_LENGTH(DECL_NAME(node))
-+#define BEFORE_STMT true
-+#define AFTER_STMT false
-+#define CREATE_NEW_VAR NULL_TREE
-+#define CODES_LIMIT 32
-+#define MAX_PARAM 31
-+#define MY_STMT GF_PLF_1
-+#define NO_CAST_CHECK GF_PLF_2
-+#define FROM_ARG true
-+#define FROM_RET false
++struct next_cgraph_node {
++ struct next_cgraph_node *next;
++ struct cgraph_node *current_function;
++ tree callee_fndecl;
++ unsigned int num;
++};
+
-+#if BUILDING_GCC_VERSION == 4005
-+#define DECL_CHAIN(NODE) (TREE_CHAIN(DECL_MINIMAL_CHECK(NODE)))
++struct interesting_node {
++ struct interesting_node *next;
++ gimple first_stmt;
++ const_tree fndecl;
++ tree node;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC(tree, gc) *last_nodes;
++#else
++ vec<tree, va_gc> *last_nodes;
+#endif
++ unsigned int num;
++ enum mark intentional_attr_decl;
++ enum mark intentional_attr_cur_fndecl;
++ gimple intentional_mark_from_gimple;
++};
+
+int plugin_is_GPL_compatible;
+void debug_gimple_stmt(gimple gs);
+
-+static tree expand(struct pointer_set_t *visited, tree lhs);
-+static enum mark pre_expand(struct pointer_set_t *visited, bool *search_err_code, const_tree lhs);
+static tree report_size_overflow_decl;
+static const_tree const_char_ptr_type_node;
-+static unsigned int handle_function(void);
-+static void check_size_overflow(gimple stmt, tree size_overflow_type, tree cast_rhs, tree rhs, bool before);
++
++static tree expand(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree lhs);
++static void set_conditions(struct pointer_set_t *visited, bool *interesting_conditions, const_tree lhs);
++static void walk_use_def(struct pointer_set_t *visited, struct interesting_node *cur_node, tree lhs);
++static enum mark search_intentional(struct pointer_set_t *visited, const_tree lhs);
++static void search_size_overflow_attribute(struct pointer_set_t *visited, tree lhs);
++
++static void check_size_overflow(struct cgraph_node *caller_node, gimple stmt, tree size_overflow_type, tree cast_rhs, tree rhs, bool before);
+static tree get_size_overflow_type(gimple stmt, const_tree node);
+static tree dup_assign(struct pointer_set_t *visited, gimple oldstmt, const_tree node, tree rhs1, tree rhs2, tree __unused rhs3);
-+static void print_missing_msg(tree func, unsigned int argnum);
+
+static struct plugin_info size_overflow_plugin_info = {
-+ .version = "20130822beta",
++ .version = "20131120beta",
+ .help = "no-size-overflow\tturn off size overflow checking\n",
+};
+
@@ -109082,14 +110900,9 @@ index 0000000..03d0c84
+ return NULL_TREE;
+}
+
-+static const char* get_asm_name(tree node)
-+{
-+ return IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(node));
-+}
-+
+static tree handle_intentional_overflow_attribute(tree *node, tree __unused name, tree args, int __unused flags, bool *no_add_attrs)
+{
-+ unsigned int arg_count, arg_num;
++ unsigned int arg_count;
+ enum tree_code code = TREE_CODE(*node);
+
+ switch (code) {
@@ -109101,11 +110914,6 @@ index 0000000..03d0c84
+ arg_count = type_num_arguments(*node);
+ break;
+ case FIELD_DECL:
-+ arg_num = TREE_INT_CST_LOW(TREE_VALUE(args));
-+ if (arg_num != 0) {
-+ *no_add_attrs = true;
-+ error("%s: %qE attribute parameter can only be 0 in structure fields", __func__, name);
-+ }
+ return NULL_TREE;
+ default:
+ *no_add_attrs = true;
@@ -109158,55 +110966,70 @@ index 0000000..03d0c84
+ register_attribute(&intentional_overflow_attr);
+}
+
-+// http://www.team5150.com/~andrew/noncryptohashzoo2~/CrapWow.html
-+static unsigned int CrapWow(const char *key, unsigned int len, unsigned int seed)
++static bool is_bool(const_tree node)
+{
-+#define cwfold( a, b, lo, hi ) { p = (unsigned int)(a) * (unsigned long long)(b); lo ^= (unsigned int)p; hi ^= (unsigned int)(p >> 32); }
-+#define cwmixa( in ) { cwfold( in, m, k, h ); }
-+#define cwmixb( in ) { cwfold( in, n, h, k ); }
-+
-+ unsigned int m = 0x57559429;
-+ unsigned int n = 0x5052acdb;
-+ const unsigned int *key4 = (const unsigned int *)key;
-+ unsigned int h = len;
-+ unsigned int k = len + seed + n;
-+ unsigned long long p;
++ const_tree type;
+
-+ while (len >= 8) {
-+ cwmixb(key4[0]) cwmixa(key4[1]) key4 += 2;
-+ len -= 8;
-+ }
-+ if (len >= 4) {
-+ cwmixb(key4[0]) key4 += 1;
-+ len -= 4;
-+ }
-+ if (len)
-+ cwmixa(key4[0] & ((1 << (len * 8)) - 1 ));
-+ cwmixb(h ^ (k + n));
-+ return k ^ h;
++ if (node == NULL_TREE)
++ return false;
+
-+#undef cwfold
-+#undef cwmixa
-+#undef cwmixb
++ type = TREE_TYPE(node);
++ if (!INTEGRAL_TYPE_P(type))
++ return false;
++ if (TREE_CODE(type) == BOOLEAN_TYPE)
++ return true;
++ if (TYPE_PRECISION(type) == 1)
++ return true;
++ return false;
+}
+
-+static inline unsigned int get_hash_num(const char *fndecl, const char *tree_codes, unsigned int len, unsigned int seed)
++static bool skip_types(const_tree var)
+{
-+ unsigned int fn = CrapWow(fndecl, strlen(fndecl), seed) & 0xffff;
-+ unsigned int codes = CrapWow(tree_codes, len, seed) & 0xffff;
-+ return fn ^ codes;
-+}
++ tree type;
++ enum tree_code code;
+
-+static inline tree get_original_function_decl(tree fndecl)
-+{
-+ if (DECL_ABSTRACT_ORIGIN(fndecl))
-+ return DECL_ABSTRACT_ORIGIN(fndecl);
-+ return fndecl;
++ if (is_gimple_constant(var))
++ return true;
++
++ switch (TREE_CODE(var)) {
++ case ADDR_EXPR:
++#if BUILDING_GCC_VERSION >= 4006
++ case MEM_REF:
++#endif
++ case ARRAY_REF:
++ case BIT_FIELD_REF:
++ case INDIRECT_REF:
++ case TARGET_MEM_REF:
++ case COMPONENT_REF:
++ case VAR_DECL:
++ case VIEW_CONVERT_EXPR:
++ return true;
++ default:
++ break;
++ }
++
++ code = TREE_CODE(var);
++ gcc_assert(code == SSA_NAME || code == PARM_DECL);
++
++ type = TREE_TYPE(var);
++ switch (TREE_CODE(type)) {
++ case INTEGER_TYPE:
++ case ENUMERAL_TYPE:
++ return false;
++ case BOOLEAN_TYPE:
++ return is_bool(var);
++ default:
++ return true;
++ }
+}
+
+static inline gimple get_def_stmt(const_tree node)
+{
+ gcc_assert(node != NULL_TREE);
++
++ if (skip_types(node))
++ return NULL;
++
+ if (TREE_CODE(node) != SSA_NAME)
+ return NULL;
+ return SSA_NAME_DEF_STMT(node);
@@ -109249,163 +111072,149 @@ index 0000000..03d0c84
+ }
+}
+
-+static size_t add_type_codes(const_tree type, unsigned char *tree_codes, size_t len)
++struct function_hash {
++ size_t tree_codes_len;
++ unsigned char tree_codes[CODES_LIMIT];
++ tree fndecl;
++ unsigned int hash;
++};
++
++// http://www.team5150.com/~andrew/noncryptohashzoo2~/CrapWow.html
++static unsigned int CrapWow(const char *key, unsigned int len, unsigned int seed)
++{
++#define cwfold( a, b, lo, hi ) { p = (unsigned int)(a) * (unsigned long long)(b); lo ^= (unsigned int)p; hi ^= (unsigned int)(p >> 32); }
++#define cwmixa( in ) { cwfold( in, m, k, h ); }
++#define cwmixb( in ) { cwfold( in, n, h, k ); }
++
++ unsigned int m = 0x57559429;
++ unsigned int n = 0x5052acdb;
++ const unsigned int *key4 = (const unsigned int *)key;
++ unsigned int h = len;
++ unsigned int k = len + seed + n;
++ unsigned long long p;
++
++ while (len >= 8) {
++ cwmixb(key4[0]) cwmixa(key4[1]) key4 += 2;
++ len -= 8;
++ }
++ if (len >= 4) {
++ cwmixb(key4[0]) key4 += 1;
++ len -= 4;
++ }
++ if (len)
++ cwmixa(key4[0] & ((1 << (len * 8)) - 1 ));
++ cwmixb(h ^ (k + n));
++ return k ^ h;
++
++#undef cwfold
++#undef cwmixa
++#undef cwmixb
++}
++
++static void set_hash(const char *fn_name, struct function_hash *fn_hash_data)
++{
++ unsigned int fn, codes, seed = 0;
++
++ fn = CrapWow(fn_name, strlen(fn_name), seed) & 0xffff;
++ codes = CrapWow((const char*)fn_hash_data->tree_codes, fn_hash_data->tree_codes_len, seed) & 0xffff;
++
++ fn_hash_data->hash = fn ^ codes;
++}
++
++static void set_node_codes(const_tree type, struct function_hash *fn_hash_data)
+{
+ gcc_assert(type != NULL_TREE);
++ gcc_assert(TREE_CODE_CLASS(TREE_CODE(type)) == tcc_type);
+
-+ while (type && len < CODES_LIMIT) {
-+ tree_codes[len] = get_tree_code(type);
-+ len++;
++ while (type && fn_hash_data->tree_codes_len < CODES_LIMIT) {
++ fn_hash_data->tree_codes[fn_hash_data->tree_codes_len] = get_tree_code(type);
++ fn_hash_data->tree_codes_len++;
+ type = TREE_TYPE(type);
+ }
-+ return len;
+}
+
-+static unsigned int get_function_decl(const_tree fndecl, unsigned char *tree_codes)
++static void set_result_codes(const_tree node, struct function_hash *fn_hash_data)
+{
-+ const_tree arg, result, arg_field, type = TREE_TYPE(fndecl);
-+ enum tree_code code = TREE_CODE(type);
-+ size_t len = 0;
++ const_tree result;
+
-+ gcc_assert(code == FUNCTION_TYPE || code == METHOD_TYPE);
++ gcc_assert(node != NULL_TREE);
+
-+ arg = TYPE_ARG_TYPES(type);
-+ // skip builtins __builtin_constant_p
-+ if (!arg && DECL_BUILT_IN(fndecl))
-+ return 0;
++ if (DECL_P(node)) {
++ result = DECL_RESULT(node);
++ if (result != NULL_TREE)
++ return set_node_codes(TREE_TYPE(result), fn_hash_data);
++ return set_result_codes(TREE_TYPE(node), fn_hash_data);
++ }
+
-+ if (TREE_CODE_CLASS(code) == tcc_type)
-+ result = type;
-+ else
-+ result = DECL_RESULT(fndecl);
++ gcc_assert(TYPE_P(node));
+
-+ gcc_assert(result != NULL_TREE);
-+ len = add_type_codes(TREE_TYPE(result), tree_codes, len);
++ if (TREE_CODE(node) == FUNCTION_TYPE)
++ return set_result_codes(TREE_TYPE(node), fn_hash_data);
+
-+ if (arg == NULL_TREE) {
-+ gcc_assert(CODE_CONTAINS_STRUCT(TREE_CODE(fndecl), TS_DECL_NON_COMMON));
-+ arg_field = DECL_ARGUMENT_FLD(fndecl);
-+ if (arg_field == NULL_TREE)
-+ return 0;
-+ arg = TREE_TYPE(arg_field);
-+ len = add_type_codes(arg, tree_codes, len);
-+ gcc_assert(len != 0);
-+ return len;
-+ }
++ return set_node_codes(node, fn_hash_data);
++}
+
-+ gcc_assert(arg != NULL_TREE && TREE_CODE(arg) == TREE_LIST);
-+ while (arg && len < CODES_LIMIT) {
-+ len = add_type_codes(TREE_VALUE(arg), tree_codes, len);
-+ arg = TREE_CHAIN(arg);
-+ }
++static void set_function_codes(struct function_hash *fn_hash_data)
++{
++ const_tree arg, type = TREE_TYPE(fn_hash_data->fndecl);
++ enum tree_code code = TREE_CODE(type);
+
-+ gcc_assert(len != 0);
-+ return len;
++ gcc_assert(code == FUNCTION_TYPE || code == METHOD_TYPE);
++
++ set_result_codes(fn_hash_data->fndecl, fn_hash_data);
++
++ for (arg = TYPE_ARG_TYPES(type); arg != NULL_TREE && fn_hash_data->tree_codes_len < CODES_LIMIT; arg = TREE_CHAIN(arg))
++ set_node_codes(TREE_VALUE(arg), fn_hash_data);
+}
+
+static const struct size_overflow_hash *get_function_hash(tree fndecl)
+{
-+ unsigned int hash;
+ const struct size_overflow_hash *entry;
-+ unsigned char tree_codes[CODES_LIMIT];
-+ size_t len;
++ struct function_hash fn_hash_data;
+ const char *func_name;
+
-+ fndecl = get_original_function_decl(fndecl);
-+ len = get_function_decl(fndecl, tree_codes);
-+ if (len == 0)
++ // skip builtins __builtin_constant_p
++ if (DECL_BUILT_IN(fndecl))
+ return NULL;
+
-+ func_name = get_asm_name(fndecl);
-+ hash = get_hash_num(func_name, (const char*) tree_codes, len, 0);
++ fn_hash_data.fndecl = fndecl;
++ fn_hash_data.tree_codes_len = 0;
++
++ set_function_codes(&fn_hash_data);
++ gcc_assert(fn_hash_data.tree_codes_len != 0);
++
++ func_name = ASM_NAME(fn_hash_data.fndecl);
++ set_hash(func_name, &fn_hash_data);
++
++ entry = size_overflow_hash[fn_hash_data.hash];
+
-+ entry = size_overflow_hash[hash];
+ while (entry) {
+ if (!strcmp(entry->name, func_name))
+ return entry;
+ entry = entry->next;
+ }
-+
+ return NULL;
+}
+
-+static bool is_bool(const_tree node)
-+{
-+ const_tree type;
-+
-+ if (node == NULL_TREE)
-+ return false;
-+
-+ type = TREE_TYPE(node);
-+ if (!INTEGRAL_TYPE_P(type))
-+ return false;
-+ if (TREE_CODE(type) == BOOLEAN_TYPE)
-+ return true;
-+ if (TYPE_PRECISION(type) == 1)
-+ return true;
-+ return false;
-+}
-+
-+static bool skip_types(const_tree var)
++static void print_missing_msg(tree func, unsigned int argnum)
+{
-+ tree type;
-+
-+ if (is_gimple_constant(var))
-+ return true;
-+
-+ switch (TREE_CODE(var)) {
-+ case ADDR_EXPR:
-+#if BUILDING_GCC_VERSION >= 4006
-+ case MEM_REF:
-+#endif
-+ case ARRAY_REF:
-+ case BIT_FIELD_REF:
-+ case INDIRECT_REF:
-+ case TARGET_MEM_REF:
-+ return true;
-+ case PARM_DECL:
-+ case VAR_DECL:
-+ case COMPONENT_REF:
-+ return false;
-+ default:
-+ break;
-+ }
++ location_t loc;
++ const char *curfunc;
++ struct function_hash fn_hash_data;
+
-+ gcc_assert(TREE_CODE(var) == SSA_NAME);
++ fn_hash_data.fndecl = DECL_ORIGIN(func);
++ fn_hash_data.tree_codes_len = 0;
+
-+ type = TREE_TYPE(var);
-+ switch (TREE_CODE(type)) {
-+ case INTEGER_TYPE:
-+ case ENUMERAL_TYPE:
-+ return false;
-+ case BOOLEAN_TYPE:
-+ return is_bool(var);
-+ default:
-+ break;
-+ }
-+
-+ gcc_assert(TREE_CODE(type) == POINTER_TYPE);
++ loc = DECL_SOURCE_LOCATION(fn_hash_data.fndecl);
++ curfunc = ASM_NAME(fn_hash_data.fndecl);
+
-+ type = TREE_TYPE(type);
-+ gcc_assert(type != NULL_TREE);
-+ switch (TREE_CODE(type)) {
-+ case RECORD_TYPE:
-+ case POINTER_TYPE:
-+ case ARRAY_TYPE:
-+ return true;
-+ case VOID_TYPE:
-+ case INTEGER_TYPE:
-+ case UNION_TYPE:
-+ return false;
-+ default:
-+ break;
-+ }
++ set_function_codes(&fn_hash_data);
++ set_hash(curfunc, &fn_hash_data);
+
-+ debug_tree((tree)var);
-+ gcc_unreachable();
++ inform(loc, "Function %s is missing from the size_overflow hash table +%s+%u+%u+", curfunc, curfunc, argnum, fn_hash_data.hash);
+}
+
-+static unsigned int find_arg_number(const_tree arg, tree func)
++static unsigned int find_arg_number_tree(const_tree arg, const_tree func)
+{
+ tree var;
+ unsigned int argnum = 1;
@@ -109420,7 +111229,7 @@ index 0000000..03d0c84
+ return argnum;
+ }
+
-+ return 0;
++ return CANNOT_FIND_ARG;
+}
+
+static tree create_new_var(tree type)
@@ -109442,7 +111251,7 @@ index 0000000..03d0c84
+
+ gcc_assert(types_compatible_p(type, TREE_TYPE(rhs2)));
+ assign = gimple_build_assign_with_ops(code, lhs, rhs1, rhs2);
-+ gimple_set_lhs(assign, make_ssa_name(lhs, assign));
++ gimple_assign_set_lhs(assign, make_ssa_name(lhs, assign));
+
+ gsi_insert_before(&gsi, assign, GSI_NEW_STMT);
+ update_stmt(assign);
@@ -109463,11 +111272,10 @@ index 0000000..03d0c84
+{
+ switch (gimple_code(stmt)) {
+ case GIMPLE_ASSIGN:
++ case GIMPLE_CALL:
+ return gimple_get_lhs(stmt);
+ case GIMPLE_PHI:
+ return gimple_phi_result(stmt);
-+ case GIMPLE_CALL:
-+ return gimple_call_lhs(stmt);
+ default:
+ return NULL_TREE;
+ }
@@ -109505,7 +111313,7 @@ index 0000000..03d0c84
+ gcc_unreachable();
+
+ def_stmt = get_def_stmt(rhs);
-+ if (skip_cast(dst_type, rhs, force) && gimple_plf(def_stmt, MY_STMT))
++ if (def_stmt && gimple_code(def_stmt) != GIMPLE_NOP && skip_cast(dst_type, rhs, force) && gimple_plf(def_stmt, MY_STMT))
+ return def_stmt;
+
+ if (lhs == CREATE_NEW_VAR)
@@ -109518,15 +111326,13 @@ index 0000000..03d0c84
+ gimple_set_location(assign, loc);
+ }
+
-+ gimple_set_lhs(assign, make_ssa_name(lhs, assign));
++ gimple_assign_set_lhs(assign, make_ssa_name(lhs, assign));
+
+ if (before)
+ gsi_insert_before(gsi, assign, GSI_NEW_STMT);
+ else
+ gsi_insert_after(gsi, assign, GSI_NEW_STMT);
+ update_stmt(assign);
-+ gimple_set_plf(assign, MY_STMT, true);
-+
+ return assign;
+}
+
@@ -109534,13 +111340,14 @@ index 0000000..03d0c84
+{
+ gimple_stmt_iterator gsi;
+ tree lhs;
-+ const_gimple new_stmt;
++ gimple new_stmt;
+
+ if (rhs == NULL_TREE)
+ return NULL_TREE;
+
+ gsi = gsi_for_stmt(stmt);
+ new_stmt = build_cast_stmt(size_overflow_type, rhs, CREATE_NEW_VAR, &gsi, before, false);
++ gimple_set_plf(new_stmt, MY_STMT, true);
+
+ lhs = get_lhs(new_stmt);
+ gcc_assert(lhs != NULL_TREE);
@@ -109558,25 +111365,8 @@ index 0000000..03d0c84
+
+ gsi = gsi_for_stmt(stmt);
+ cast_stmt = build_cast_stmt(intTI_type_node, node, CREATE_NEW_VAR, &gsi, BEFORE_STMT, false);
-+ return gimple_get_lhs(cast_stmt);
-+}
-+
-+static void check_function_hash(const_gimple stmt)
-+{
-+ tree func;
-+ const struct size_overflow_hash *hash;
-+
-+ if (gimple_code(stmt) != GIMPLE_CALL)
-+ return;
-+
-+ func = gimple_call_fndecl(stmt);
-+ //fs/xattr.c D.34222_15 = D.34219_14 (dentry_3(D), name_7(D), 0B, 0);
-+ if (func == NULL_TREE)
-+ return;
-+
-+ hash = get_function_hash(func);
-+ if (!hash)
-+ print_missing_msg(func, 0);
++ gimple_set_plf(cast_stmt, MY_STMT, true);
++ return gimple_assign_lhs(cast_stmt);
+}
+
+static tree create_assign(struct pointer_set_t *visited, gimple oldstmt, tree rhs1, bool before)
@@ -109595,8 +111385,6 @@ index 0000000..03d0c84
+ lhs = rhs1;
+ break;
+ case GIMPLE_CALL:
-+ lhs = gimple_call_lhs(oldstmt);
-+ break;
+ case GIMPLE_ASSIGN:
+ lhs = gimple_get_lhs(oldstmt);
+ break;
@@ -109637,7 +111425,7 @@ index 0000000..03d0c84
+{
+ gimple stmt;
+ gimple_stmt_iterator gsi;
-+ tree size_overflow_type, new_var, lhs = gimple_get_lhs(oldstmt);
++ tree size_overflow_type, new_var, lhs = gimple_assign_lhs(oldstmt);
+
+ if (gimple_plf(oldstmt, MY_STMT))
+ return lhs;
@@ -109662,7 +111450,7 @@ index 0000000..03d0c84
+
+ new_var = create_new_var(size_overflow_type);
+ new_var = make_ssa_name(new_var, stmt);
-+ gimple_set_lhs(stmt, new_var);
++ gimple_assign_set_lhs(stmt, new_var);
+
+ if (rhs1 != NULL_TREE)
+ gimple_assign_set_rhs1(stmt, rhs1);
@@ -109680,79 +111468,101 @@ index 0000000..03d0c84
+ gsi_insert_after(&gsi, stmt, GSI_SAME_STMT);
+ update_stmt(stmt);
+ pointer_set_insert(visited, oldstmt);
-+ return gimple_get_lhs(stmt);
++ return gimple_assign_lhs(stmt);
+}
+
-+static tree cast_parm_decl(tree phi_ssa_name, tree arg, tree size_overflow_type)
++static tree cast_parm_decl(tree phi_ssa_name, tree arg, tree size_overflow_type, basic_block bb)
+{
-+ basic_block first_bb;
+ gimple assign;
+ gimple_stmt_iterator gsi;
++ basic_block first_bb;
+
-+ first_bb = split_block_after_labels(ENTRY_BLOCK_PTR)->dest;
-+ gcc_assert(dom_info_available_p(CDI_DOMINATORS));
-+ set_immediate_dominator(CDI_DOMINATORS, first_bb, ENTRY_BLOCK_PTR);
++ gcc_assert(SSA_NAME_IS_DEFAULT_DEF(arg));
++
++ if (bb->index == 0) {
++ first_bb = split_block_after_labels(ENTRY_BLOCK_PTR)->dest;
++ gcc_assert(dom_info_available_p(CDI_DOMINATORS));
++ set_immediate_dominator(CDI_DOMINATORS, first_bb, ENTRY_BLOCK_PTR);
++ bb = first_bb;
++ }
+
-+ gsi = gsi_start_bb(first_bb);
++ gsi = gsi_after_labels(bb);
+ assign = build_cast_stmt(size_overflow_type, arg, phi_ssa_name, &gsi, BEFORE_STMT, false);
-+ return gimple_get_lhs(assign);
++ gimple_set_plf(assign, MY_STMT, true);
++
++ return gimple_assign_lhs(assign);
+}
+
-+static tree use_phi_ssa_name(tree phi_ssa_name, tree new_arg)
++static tree use_phi_ssa_name(tree ssa_name_var, tree new_arg)
+{
+ gimple_stmt_iterator gsi;
-+ const_gimple assign;
-+ gimple def_stmt = get_def_stmt(new_arg);
++ gimple assign, def_stmt = get_def_stmt(new_arg);
+
+ if (gimple_code(def_stmt) == GIMPLE_PHI) {
+ gsi = gsi_after_labels(gimple_bb(def_stmt));
-+ assign = build_cast_stmt(TREE_TYPE(new_arg), new_arg, phi_ssa_name, &gsi, BEFORE_STMT, true);
++ assign = build_cast_stmt(TREE_TYPE(new_arg), new_arg, ssa_name_var, &gsi, BEFORE_STMT, true);
+ } else {
+ gsi = gsi_for_stmt(def_stmt);
-+ assign = build_cast_stmt(TREE_TYPE(new_arg), new_arg, phi_ssa_name, &gsi, AFTER_STMT, true);
++ assign = build_cast_stmt(TREE_TYPE(new_arg), new_arg, ssa_name_var, &gsi, AFTER_STMT, true);
+ }
+
-+ return gimple_get_lhs(assign);
++ gimple_set_plf(assign, MY_STMT, true);
++ return gimple_assign_lhs(assign);
+}
+
-+static tree cast_visited_phi_arg(tree phi_ssa_name, tree arg, tree size_overflow_type)
++static tree cast_visited_phi_arg(tree ssa_name_var, tree arg, tree size_overflow_type)
+{
+ basic_block bb;
+ gimple_stmt_iterator gsi;
-+ const_gimple assign, def_stmt;
++ const_gimple def_stmt;
++ gimple assign;
+
+ def_stmt = get_def_stmt(arg);
+ bb = gimple_bb(def_stmt);
+ gcc_assert(bb->index != 0);
+ gsi = gsi_after_labels(bb);
+
-+ assign = build_cast_stmt(size_overflow_type, arg, phi_ssa_name, &gsi, BEFORE_STMT, false);
-+ return gimple_get_lhs(assign);
++ assign = build_cast_stmt(size_overflow_type, arg, ssa_name_var, &gsi, BEFORE_STMT, false);
++ gimple_set_plf(assign, MY_STMT, true);
++ return gimple_assign_lhs(assign);
+}
+
-+static tree create_new_phi_arg(tree phi_ssa_name, tree new_arg, tree arg, gimple oldstmt)
++static tree create_new_phi_arg(tree ssa_name_var, tree new_arg, gimple oldstmt, unsigned int i)
+{
+ tree size_overflow_type;
-+ const_gimple def_stmt = get_def_stmt(arg);
++ tree arg;
++ const_gimple def_stmt;
+
-+ if (phi_ssa_name != NULL_TREE)
-+ phi_ssa_name = SSA_NAME_VAR(phi_ssa_name);
++ if (new_arg != NULL_TREE && is_gimple_constant(new_arg))
++ return new_arg;
+
++ arg = gimple_phi_arg_def(oldstmt, i);
++ def_stmt = get_def_stmt(arg);
++ gcc_assert(def_stmt != NULL);
+ size_overflow_type = get_size_overflow_type(oldstmt, arg);
+
-+ if (new_arg != NULL_TREE) {
-+ gcc_assert(types_compatible_p(TREE_TYPE(new_arg), size_overflow_type));
-+ return use_phi_ssa_name(phi_ssa_name, new_arg);
++ switch (gimple_code(def_stmt)) {
++ case GIMPLE_PHI:
++ return cast_visited_phi_arg(ssa_name_var, arg, size_overflow_type);
++ case GIMPLE_NOP: {
++ basic_block bb;
++
++ bb = gimple_phi_arg_edge(oldstmt, i)->src;
++ return cast_parm_decl(ssa_name_var, arg, size_overflow_type, bb);
+ }
++ case GIMPLE_ASM: {
++ gimple_stmt_iterator gsi;
++ gimple assign, stmt = get_def_stmt(arg);
+
-+ switch(gimple_code(def_stmt)) {
-+ case GIMPLE_PHI:
-+ return cast_visited_phi_arg(phi_ssa_name, arg, size_overflow_type);
-+ case GIMPLE_NOP:
-+ return cast_parm_decl(phi_ssa_name, arg, size_overflow_type);
++ gsi = gsi_for_stmt(stmt);
++ assign = build_cast_stmt(size_overflow_type, arg, ssa_name_var, &gsi, AFTER_STMT, false);
++ gimple_set_plf(assign, MY_STMT, true);
++ return gimple_assign_lhs(assign);
++ }
+ default:
-+ debug_gimple_stmt((gimple)def_stmt);
-+ gcc_unreachable();
++ gcc_assert(new_arg != NULL_TREE);
++ gcc_assert(types_compatible_p(TREE_TYPE(new_arg), size_overflow_type));
++ return use_phi_ssa_name(ssa_name_var, new_arg);
+ }
+}
+
@@ -109765,6 +111575,13 @@ index 0000000..03d0c84
+
+ bb = gsi_bb(gsi);
+
++ if (result == NULL_TREE) {
++ tree old_result = gimple_phi_result(oldstmt);
++ tree size_overflow_type = get_size_overflow_type(oldstmt, old_result);
++
++ result = create_new_var(size_overflow_type);
++ }
++
+ phi = create_phi_node(result, bb);
+ gimple_phi_set_result(phi, make_ssa_name(result, phi));
+ seq = phi_nodes(bb);
@@ -109778,45 +111595,102 @@ index 0000000..03d0c84
+ return phi;
+}
+
-+static tree handle_phi(struct pointer_set_t *visited, tree orig_result)
++#if BUILDING_GCC_VERSION <= 4007
++static tree create_new_phi_node(VEC(tree, gc) *args, tree ssa_name_var, gimple oldstmt)
++#else
++static tree create_new_phi_node(vec<tree, va_gc> *args, tree ssa_name_var, gimple oldstmt)
++#endif
+{
-+ gimple new_phi = NULL;
-+ gimple oldstmt = get_def_stmt(orig_result);
-+ tree phi_ssa_name = NULL_TREE;
++ gimple new_phi;
+ unsigned int i;
++ tree arg, result;
++ location_t loc = gimple_location(oldstmt);
++
++#if BUILDING_GCC_VERSION <= 4007
++ gcc_assert(!VEC_empty(tree, args));
++#else
++ gcc_assert(!args->is_empty());
++#endif
++
++ new_phi = overflow_create_phi_node(oldstmt, ssa_name_var);
++ result = gimple_phi_result(new_phi);
++ ssa_name_var = SSA_NAME_VAR(result);
++
++
++#if BUILDING_GCC_VERSION == 4005
++ for (i = 0; i < VEC_length(tree, args); i++) {
++ arg = VEC_index(tree, args, i);
++#elif BUILDING_GCC_VERSION <= 4007
++ FOR_EACH_VEC_ELT(tree, args, i, arg) {
++#else
++ FOR_EACH_VEC_ELT(*args, i, arg) {
++#endif
++ arg = create_new_phi_arg(ssa_name_var, arg, oldstmt, i);
++ add_phi_arg(new_phi, arg, gimple_phi_arg_edge(oldstmt, i), loc);
++ }
++
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_free(tree, gc, args);
++#else
++ vec_free(args);
++#endif
++ update_stmt(new_phi);
++ return result;
++}
++
++static tree handle_phi(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree orig_result)
++{
++ tree ssa_name_var = NULL_TREE;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC(tree, gc) *args;
++#else
++ vec<tree, va_gc> *args;
++#endif
++ gimple oldstmt = get_def_stmt(orig_result);
++ unsigned int i, len = gimple_phi_num_args(oldstmt);
+
+ pointer_set_insert(visited, oldstmt);
-+ for (i = 0; i < gimple_phi_num_args(oldstmt); i++) {
++#if BUILDING_GCC_VERSION <= 4007
++ args = VEC_alloc(tree, gc, len);
++#else
++ vec_alloc(args, len);
++#endif
++ for (i = 0; i < len; i++) {
+ tree arg, new_arg;
+
+ arg = gimple_phi_arg_def(oldstmt, i);
++ new_arg = expand(visited, caller_node, arg);
++
++ if (ssa_name_var == NULL_TREE && new_arg != NULL_TREE)
++ ssa_name_var = SSA_NAME_VAR(new_arg);
++
++ if (is_gimple_constant(arg)) {
++ tree size_overflow_type = get_size_overflow_type(oldstmt, arg);
+
-+ new_arg = expand(visited, arg);
-+ new_arg = create_new_phi_arg(phi_ssa_name, new_arg, arg, oldstmt);
-+ if (i == 0) {
-+ phi_ssa_name = new_arg;
-+ new_phi = overflow_create_phi_node(oldstmt, SSA_NAME_VAR(phi_ssa_name));
++ new_arg = cast_a_tree(size_overflow_type, arg);
+ }
+
-+ gcc_assert(new_phi != NULL);
-+ add_phi_arg(new_phi, new_arg, gimple_phi_arg_edge(oldstmt, i), gimple_location(oldstmt));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, args, new_arg);
++#else
++ vec_safe_push(args, new_arg);
++#endif
+ }
+
-+ gcc_assert(new_phi != NULL);
-+ update_stmt(new_phi);
-+ return gimple_phi_result(new_phi);
++ return create_new_phi_node(args, ssa_name_var, oldstmt);
+}
+
+static tree change_assign_rhs(gimple stmt, const_tree orig_rhs, tree new_rhs)
+{
-+ const_gimple assign;
++ gimple assign;
+ gimple_stmt_iterator gsi = gsi_for_stmt(stmt);
+ tree origtype = TREE_TYPE(orig_rhs);
+
-+ gcc_assert(gimple_code(stmt) == GIMPLE_ASSIGN);
++ gcc_assert(is_gimple_assign(stmt));
+
+ assign = build_cast_stmt(origtype, new_rhs, CREATE_NEW_VAR, &gsi, BEFORE_STMT, false);
-+ return gimple_get_lhs(assign);
++ gimple_set_plf(assign, MY_STMT, true);
++ return gimple_assign_lhs(assign);
+}
+
+static bool is_a_cast_and_const_overflow(const_tree no_const_rhs)
@@ -109825,11 +111699,11 @@ index 0000000..03d0c84
+ enum machine_mode lhs_mode, rhs_mode;
+ gimple def_stmt = get_def_stmt(no_const_rhs);
+
-+ if (!gimple_assign_cast_p(def_stmt))
++ if (!def_stmt || !gimple_assign_cast_p(def_stmt))
+ return false;
+
+ rhs1 = gimple_assign_rhs1(def_stmt);
-+ lhs = gimple_get_lhs(def_stmt);
++ lhs = gimple_assign_lhs(def_stmt);
+ rhs1_type = TREE_TYPE(rhs1);
+ lhs_type = TREE_TYPE(lhs);
+ rhs_mode = TYPE_MODE(rhs1_type);
@@ -109843,7 +111717,7 @@ index 0000000..03d0c84
+static tree create_cast_assign(struct pointer_set_t *visited, gimple stmt)
+{
+ tree rhs1 = gimple_assign_rhs1(stmt);
-+ tree lhs = gimple_get_lhs(stmt);
++ tree lhs = gimple_assign_lhs(stmt);
+ const_tree rhs1_type = TREE_TYPE(rhs1);
+ const_tree lhs_type = TREE_TYPE(lhs);
+
@@ -109860,12 +111734,11 @@ index 0000000..03d0c84
+
+ FOR_EACH_IMM_USE_FAST(use_p, imm_iter, node) {
+ const_gimple use_stmt = USE_STMT(use_p);
++
+ if (use_stmt == NULL)
+ return true;
+ if (is_gimple_debug(use_stmt))
+ continue;
-+ if (!(gimple_bb(use_stmt)->flags & BB_REACHABLE))
-+ continue;
+ return false;
+ }
+ return true;
@@ -109889,7 +111762,7 @@ index 0000000..03d0c84
+ return false;
+
+ def_stmt = get_def_stmt(rhs1);
-+ if (!def_stmt || gimple_code(def_stmt) != GIMPLE_ASSIGN || gimple_num_ops(def_stmt) != 3)
++ if (!def_stmt || !is_gimple_assign(def_stmt) || gimple_num_ops(def_stmt) != 3)
+ return false;
+
+ if (gimple_assign_rhs_code(def_stmt) != PLUS_EXPR)
@@ -109923,10 +111796,10 @@ index 0000000..03d0c84
+ return false;
+}
+
-+static tree create_cast_overflow_check(struct pointer_set_t *visited, tree new_rhs1, gimple stmt)
++static tree create_cast_overflow_check(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree new_rhs1, gimple stmt)
+{
+ bool cast_lhs, cast_rhs;
-+ tree lhs = gimple_get_lhs(stmt);
++ tree lhs = gimple_assign_lhs(stmt);
+ tree rhs = gimple_assign_rhs1(stmt);
+ const_tree lhs_type = TREE_TYPE(lhs);
+ const_tree rhs_type = TREE_TYPE(rhs);
@@ -109968,17 +111841,17 @@ index 0000000..03d0c84
+ return dup_assign(visited, stmt, lhs, new_rhs1, NULL_TREE, NULL_TREE);
+
+ if (cast_lhs && !skip_lhs_cast_check(stmt))
-+ check_size_overflow(stmt, TREE_TYPE(new_rhs1), new_rhs1, lhs, BEFORE_STMT);
++ check_size_overflow(caller_node, stmt, TREE_TYPE(new_rhs1), new_rhs1, lhs, BEFORE_STMT);
+
+ if (cast_rhs)
-+ check_size_overflow(stmt, TREE_TYPE(new_rhs1), new_rhs1, rhs, BEFORE_STMT);
++ check_size_overflow(caller_node, stmt, TREE_TYPE(new_rhs1), new_rhs1, rhs, BEFORE_STMT);
+
+ return dup_assign(visited, stmt, lhs, new_rhs1, NULL_TREE, NULL_TREE);
+}
+
-+static tree handle_unary_rhs(struct pointer_set_t *visited, gimple stmt)
++static tree handle_unary_rhs(struct pointer_set_t *visited, struct cgraph_node *caller_node, gimple stmt)
+{
-+ tree rhs1, new_rhs1, lhs = gimple_get_lhs(stmt);
++ tree rhs1, new_rhs1, lhs = gimple_assign_lhs(stmt);
+
+ if (gimple_plf(stmt, MY_STMT))
+ return lhs;
@@ -109987,7 +111860,7 @@ index 0000000..03d0c84
+ if (TREE_CODE(TREE_TYPE(rhs1)) == POINTER_TYPE)
+ return create_assign(visited, stmt, lhs, AFTER_STMT);
+
-+ new_rhs1 = expand(visited, rhs1);
++ new_rhs1 = expand(visited, caller_node, rhs1);
+
+ if (new_rhs1 == NULL_TREE)
+ return create_cast_assign(visited, stmt);
@@ -109999,19 +111872,19 @@ index 0000000..03d0c84
+ tree size_overflow_type = get_size_overflow_type(stmt, rhs1);
+
+ new_rhs1 = cast_to_new_size_overflow_type(stmt, new_rhs1, size_overflow_type, BEFORE_STMT);
-+ check_size_overflow(stmt, size_overflow_type, new_rhs1, rhs1, BEFORE_STMT);
++ check_size_overflow(caller_node, stmt, size_overflow_type, new_rhs1, rhs1, BEFORE_STMT);
+ return create_assign(visited, stmt, lhs, AFTER_STMT);
+ }
+
+ if (!gimple_assign_cast_p(stmt))
+ return dup_assign(visited, stmt, lhs, new_rhs1, NULL_TREE, NULL_TREE);
+
-+ return create_cast_overflow_check(visited, new_rhs1, stmt);
++ return create_cast_overflow_check(visited, caller_node, new_rhs1, stmt);
+}
+
-+static tree handle_unary_ops(struct pointer_set_t *visited, gimple stmt)
++static tree handle_unary_ops(struct pointer_set_t *visited, struct cgraph_node *caller_node, gimple stmt)
+{
-+ tree rhs1, lhs = gimple_get_lhs(stmt);
++ tree rhs1, lhs = gimple_assign_lhs(stmt);
+ gimple def_stmt = get_def_stmt(lhs);
+
+ gcc_assert(gimple_code(def_stmt) != GIMPLE_NOP);
@@ -110022,7 +111895,7 @@ index 0000000..03d0c84
+
+ switch (TREE_CODE(rhs1)) {
+ case SSA_NAME:
-+ return handle_unary_rhs(visited, def_stmt);
++ return handle_unary_rhs(visited, caller_node, def_stmt);
+ case ARRAY_REF:
+ case BIT_FIELD_REF:
+ case ADDR_EXPR:
@@ -110032,6 +111905,7 @@ index 0000000..03d0c84
+ case MEM_REF:
+#endif
+ case TARGET_MEM_REF:
++ case VIEW_CONVERT_EXPR:
+ return create_assign(visited, def_stmt, lhs, AFTER_STMT);
+ case PARM_DECL:
+ case VAR_DECL:
@@ -110071,7 +111945,21 @@ index 0000000..03d0c84
+ return build1(ADDR_EXPR, ptr_type_node, string);
+}
+
-+static void insert_cond_result(basic_block bb_true, const_gimple stmt, const_tree arg, bool min)
++#if BUILDING_GCC_VERSION <= 4006
++struct cgraph_node *cgraph_get_create_node(tree decl);
++
++struct cgraph_node *cgraph_get_create_node(tree decl)
++{
++ struct cgraph_node *node;
++
++ node = cgraph_get_node(decl);
++ if (node)
++ return node;
++ return cgraph_node(decl);
++}
++#endif
++
++static void insert_cond_result(struct cgraph_node *caller_node, basic_block bb_true, const_gimple stmt, const_tree arg, bool min)
+{
+ gimple func_stmt;
+ const_gimple def_stmt;
@@ -110080,6 +111968,9 @@ index 0000000..03d0c84
+ expanded_location xloc;
+ char *ssa_name_buf;
+ int len;
++ struct cgraph_edge *edge;
++ struct cgraph_node *callee_node;
++ int frequency;
+ gimple_stmt_iterator gsi = gsi_start_bb(bb_true);
+
+ def_stmt = get_def_stmt(arg);
@@ -110109,8 +112000,17 @@ index 0000000..03d0c84
+
+ // void report_size_overflow(const char *file, unsigned int line, const char *func, const char *ssa_name)
+ func_stmt = gimple_build_call(report_size_overflow_decl, 4, loc_file, loc_line, current_func, ssa_name);
-+
+ gsi_insert_after(&gsi, func_stmt, GSI_CONTINUE_LINKING);
++
++ callee_node = cgraph_get_create_node(report_size_overflow_decl);
++ frequency = compute_call_stmt_bb_frequency(current_function_decl, bb_true);
++
++#if BUILDING_GCC_VERSION <= 4006
++ edge = cgraph_create_edge(caller_node, callee_node, func_stmt, bb_true->count, frequency, bb_true->loop_depth);
++#else
++ edge = cgraph_create_edge(caller_node, callee_node, func_stmt, bb_true->count, frequency);
++#endif
++ gcc_assert(edge != NULL);
+}
+
+static void __unused print_the_code_insertions(const_gimple stmt)
@@ -110120,7 +112020,7 @@ index 0000000..03d0c84
+ inform(loc, "Integer size_overflow check applied here.");
+}
+
-+static void insert_check_size_overflow(gimple stmt, enum tree_code cond_code, tree arg, tree type_value, bool before, bool min)
++static void insert_check_size_overflow(struct cgraph_node *caller_node, gimple stmt, enum tree_code cond_code, tree arg, tree type_value, bool before, bool min)
+{
+ basic_block cond_bb, join_bb, bb_true;
+ edge e;
@@ -110153,12 +112053,12 @@ index 0000000..03d0c84
+ }
+
+ insert_cond(cond_bb, arg, cond_code, type_value);
-+ insert_cond_result(bb_true, stmt, arg, min);
++ insert_cond_result(caller_node, bb_true, stmt, arg, min);
+
+// print_the_code_insertions(stmt);
+}
+
-+static void check_size_overflow(gimple stmt, tree size_overflow_type, tree cast_rhs, tree rhs, bool before)
++static void check_size_overflow(struct cgraph_node *caller_node, gimple stmt, tree size_overflow_type, tree cast_rhs, tree rhs, bool before)
+{
+ const_tree rhs_type = TREE_TYPE(rhs);
+ tree cast_rhs_type, type_max_type, type_min_type, type_max, type_min;
@@ -110185,8 +112085,8 @@ index 0000000..03d0c84
+ gcc_assert(types_compatible_p(cast_rhs_type, type_max_type));
+ gcc_assert(types_compatible_p(type_max_type, type_min_type));
+
-+ insert_check_size_overflow(stmt, GT_EXPR, cast_rhs, type_max, before, false);
-+ insert_check_size_overflow(stmt, LT_EXPR, cast_rhs, type_min, before, true);
++ insert_check_size_overflow(caller_node, stmt, GT_EXPR, cast_rhs, type_max, before, MAX_CHECK);
++ insert_check_size_overflow(caller_node, stmt, LT_EXPR, cast_rhs, type_min, before, MIN_CHECK);
+}
+
+static bool is_a_constant_overflow(const_gimple stmt, const_tree rhs)
@@ -110204,6 +112104,8 @@ index 0000000..03d0c84
+ gimple rhs1_def_stmt, def_stmt_rhs1_def_stmt, def_stmt;
+
+ def_stmt = get_def_stmt(var);
++ if (!gimple_assign_cast_p(def_stmt))
++ return NULL_TREE;
+ gcc_assert(gimple_code(def_stmt) != GIMPLE_NOP && gimple_plf(def_stmt, MY_STMT) && gimple_assign_cast_p(def_stmt));
+
+ rhs1 = gimple_assign_rhs1(def_stmt);
@@ -110228,13 +112130,13 @@ index 0000000..03d0c84
+ }
+}
+
-+static tree handle_intentional_overflow(struct pointer_set_t *visited, bool check_overflow, gimple stmt, tree change_rhs, tree new_rhs2)
++static tree handle_intentional_overflow(struct pointer_set_t *visited, struct cgraph_node *caller_node, bool check_overflow, gimple stmt, tree change_rhs, tree new_rhs2)
+{
+ tree new_rhs, orig_rhs;
+ void (*gimple_assign_set_rhs)(gimple, tree);
+ tree rhs1 = gimple_assign_rhs1(stmt);
+ tree rhs2 = gimple_assign_rhs2(stmt);
-+ tree lhs = gimple_get_lhs(stmt);
++ tree lhs = gimple_assign_lhs(stmt);
+
+ if (!check_overflow)
+ return create_assign(visited, stmt, lhs, AFTER_STMT);
@@ -110250,7 +112152,7 @@ index 0000000..03d0c84
+ gimple_assign_set_rhs = &gimple_assign_set_rhs2;
+ }
+
-+ check_size_overflow(stmt, TREE_TYPE(change_rhs), change_rhs, orig_rhs, BEFORE_STMT);
++ check_size_overflow(caller_node, stmt, TREE_TYPE(change_rhs), change_rhs, orig_rhs, BEFORE_STMT);
+
+ new_rhs = change_assign_rhs(stmt, orig_rhs, change_rhs);
+ gimple_assign_set_rhs(stmt, new_rhs);
@@ -110282,8 +112184,8 @@ index 0000000..03d0c84
+
+ rhs1_def_stmt_rhs1 = gimple_assign_rhs1(rhs1_def_stmt);
+ rhs2_def_stmt_rhs1 = gimple_assign_rhs1(rhs2_def_stmt);
-+ rhs1_def_stmt_lhs = gimple_get_lhs(rhs1_def_stmt);
-+ rhs2_def_stmt_lhs = gimple_get_lhs(rhs2_def_stmt);
++ rhs1_def_stmt_lhs = gimple_assign_lhs(rhs1_def_stmt);
++ rhs2_def_stmt_lhs = gimple_assign_lhs(rhs2_def_stmt);
+ rhs1_def_stmt_rhs1_mode = TYPE_MODE(TREE_TYPE(rhs1_def_stmt_rhs1));
+ rhs2_def_stmt_rhs1_mode = TYPE_MODE(TREE_TYPE(rhs2_def_stmt_rhs1));
+ rhs1_def_stmt_lhs_mode = TYPE_MODE(TREE_TYPE(rhs1_def_stmt_lhs));
@@ -110298,7 +112200,7 @@ index 0000000..03d0c84
+ return true;
+}
+
-+static tree handle_integer_truncation(struct pointer_set_t *visited, const_tree lhs)
++static tree handle_integer_truncation(struct pointer_set_t *visited, struct cgraph_node *caller_node, const_tree lhs)
+{
+ tree new_rhs1, new_rhs2;
+ tree new_rhs1_def_stmt_rhs1, new_rhs2_def_stmt_rhs1, new_lhs;
@@ -110309,20 +112211,23 @@ index 0000000..03d0c84
+ if (!is_subtraction_special(stmt))
+ return NULL_TREE;
+
-+ new_rhs1 = expand(visited, rhs1);
-+ new_rhs2 = expand(visited, rhs2);
++ new_rhs1 = expand(visited, caller_node, rhs1);
++ new_rhs2 = expand(visited, caller_node, rhs2);
+
+ new_rhs1_def_stmt_rhs1 = get_def_stmt_rhs(new_rhs1);
+ new_rhs2_def_stmt_rhs1 = get_def_stmt_rhs(new_rhs2);
+
++ if (new_rhs1_def_stmt_rhs1 == NULL_TREE || new_rhs2_def_stmt_rhs1 == NULL_TREE)
++ return NULL_TREE;
++
+ if (!types_compatible_p(TREE_TYPE(new_rhs1_def_stmt_rhs1), TREE_TYPE(new_rhs2_def_stmt_rhs1))) {
+ new_rhs1_def_stmt_rhs1 = cast_to_TI_type(stmt, new_rhs1_def_stmt_rhs1);
+ new_rhs2_def_stmt_rhs1 = cast_to_TI_type(stmt, new_rhs2_def_stmt_rhs1);
+ }
+
+ assign = create_binary_assign(MINUS_EXPR, stmt, new_rhs1_def_stmt_rhs1, new_rhs2_def_stmt_rhs1);
-+ new_lhs = gimple_get_lhs(assign);
-+ check_size_overflow(assign, TREE_TYPE(new_lhs), new_lhs, rhs1, AFTER_STMT);
++ new_lhs = gimple_assign_lhs(assign);
++ check_size_overflow(caller_node, assign, TREE_TYPE(new_lhs), new_lhs, rhs1, AFTER_STMT);
+
+ return dup_assign(visited, stmt, lhs, new_rhs1, new_rhs2, NULL_TREE);
+}
@@ -110338,13 +112243,13 @@ index 0000000..03d0c84
+ return false;
+
+ def_stmt = get_def_stmt(rhs);
-+ if (gimple_code(def_stmt) != GIMPLE_ASSIGN || gimple_assign_rhs_code(def_stmt) != BIT_NOT_EXPR)
++ if (!is_gimple_assign(def_stmt) || gimple_assign_rhs_code(def_stmt) != BIT_NOT_EXPR)
+ return false;
+
+ return true;
+}
+
-+static tree handle_binary_ops(struct pointer_set_t *visited, tree lhs)
++static tree handle_binary_ops(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree lhs)
+{
+ tree rhs1, rhs2, new_lhs;
+ gimple def_stmt = get_def_stmt(lhs);
@@ -110373,40 +112278,40 @@ index 0000000..03d0c84
+ break;
+ }
+
-+ new_lhs = handle_integer_truncation(visited, lhs);
++ new_lhs = handle_integer_truncation(visited, caller_node, lhs);
+ if (new_lhs != NULL_TREE)
+ return new_lhs;
+
+ if (TREE_CODE(rhs1) == SSA_NAME)
-+ new_rhs1 = expand(visited, rhs1);
++ new_rhs1 = expand(visited, caller_node, rhs1);
+ if (TREE_CODE(rhs2) == SSA_NAME)
-+ new_rhs2 = expand(visited, rhs2);
++ new_rhs2 = expand(visited, caller_node, rhs2);
+
+ if (is_a_neg_overflow(def_stmt, rhs2))
-+ return handle_intentional_overflow(visited, true, def_stmt, new_rhs1, NULL_TREE);
++ return handle_intentional_overflow(visited, caller_node, true, def_stmt, new_rhs1, NULL_TREE);
+ if (is_a_neg_overflow(def_stmt, rhs1))
-+ return handle_intentional_overflow(visited, true, def_stmt, new_rhs2, new_rhs2);
++ return handle_intentional_overflow(visited, caller_node, true, def_stmt, new_rhs2, new_rhs2);
+
+
+ if (is_a_constant_overflow(def_stmt, rhs2))
-+ return handle_intentional_overflow(visited, !is_a_cast_and_const_overflow(rhs1), def_stmt, new_rhs1, NULL_TREE);
++ return handle_intentional_overflow(visited, caller_node, !is_a_cast_and_const_overflow(rhs1), def_stmt, new_rhs1, NULL_TREE);
+ if (is_a_constant_overflow(def_stmt, rhs1))
-+ return handle_intentional_overflow(visited, !is_a_cast_and_const_overflow(rhs2), def_stmt, new_rhs2, new_rhs2);
++ return handle_intentional_overflow(visited, caller_node, !is_a_cast_and_const_overflow(rhs2), def_stmt, new_rhs2, new_rhs2);
+
+ return dup_assign(visited, def_stmt, lhs, new_rhs1, new_rhs2, NULL_TREE);
+}
+
+#if BUILDING_GCC_VERSION >= 4007
-+static tree get_new_rhs(struct pointer_set_t *visited, tree size_overflow_type, tree rhs)
++static tree get_new_rhs(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree size_overflow_type, tree rhs)
+{
+ if (is_gimple_constant(rhs))
+ return cast_a_tree(size_overflow_type, rhs);
+ if (TREE_CODE(rhs) != SSA_NAME)
+ return NULL_TREE;
-+ return expand(visited, rhs);
++ return expand(visited, caller_node, rhs);
+}
+
-+static tree handle_ternary_ops(struct pointer_set_t *visited, tree lhs)
++static tree handle_ternary_ops(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree lhs)
+{
+ tree rhs1, rhs2, rhs3, new_rhs1, new_rhs2, new_rhs3, size_overflow_type;
+ gimple def_stmt = get_def_stmt(lhs);
@@ -110416,9 +112321,9 @@ index 0000000..03d0c84
+ rhs1 = gimple_assign_rhs1(def_stmt);
+ rhs2 = gimple_assign_rhs2(def_stmt);
+ rhs3 = gimple_assign_rhs3(def_stmt);
-+ new_rhs1 = get_new_rhs(visited, size_overflow_type, rhs1);
-+ new_rhs2 = get_new_rhs(visited, size_overflow_type, rhs2);
-+ new_rhs3 = get_new_rhs(visited, size_overflow_type, rhs3);
++ new_rhs1 = get_new_rhs(visited, caller_node, size_overflow_type, rhs1);
++ new_rhs2 = get_new_rhs(visited, caller_node, size_overflow_type, rhs2);
++ new_rhs3 = get_new_rhs(visited, caller_node, size_overflow_type, rhs3);
+
+ return dup_assign(visited, def_stmt, lhs, new_rhs1, new_rhs2, new_rhs3);
+}
@@ -110452,9 +112357,13 @@ index 0000000..03d0c84
+ else
+ new_type = intTI_type_node;
+ break;
++ case TImode:
++ gcc_assert(!TYPE_UNSIGNED(type));
++ new_type = intTI_type_node;
++ break;
+ default:
+ debug_tree((tree)node);
-+ error("%s: unsupported gcc configuration.", __func__);
++ error("%s: unsupported gcc configuration (%qE).", __func__, current_function_decl);
+ gcc_unreachable();
+ }
+
@@ -110487,13 +112396,10 @@ index 0000000..03d0c84
+ return get_lhs(next_stmt);
+}
+
-+static tree expand(struct pointer_set_t *visited, tree lhs)
++static tree expand(struct pointer_set_t *visited, struct cgraph_node *caller_node, tree lhs)
+{
+ gimple def_stmt;
+
-+ if (skip_types(lhs))
-+ return NULL_TREE;
-+
+ def_stmt = get_def_stmt(lhs);
+
+ if (!def_stmt || gimple_code(def_stmt) == GIMPLE_NOP)
@@ -110507,19 +112413,19 @@ index 0000000..03d0c84
+
+ switch (gimple_code(def_stmt)) {
+ case GIMPLE_PHI:
-+ return handle_phi(visited, lhs);
++ return handle_phi(visited, caller_node, lhs);
+ case GIMPLE_CALL:
+ case GIMPLE_ASM:
+ return create_assign(visited, def_stmt, lhs, AFTER_STMT);
+ case GIMPLE_ASSIGN:
+ switch (gimple_num_ops(def_stmt)) {
+ case 2:
-+ return handle_unary_ops(visited, def_stmt);
++ return handle_unary_ops(visited, caller_node, def_stmt);
+ case 3:
-+ return handle_binary_ops(visited, lhs);
++ return handle_binary_ops(visited, caller_node, lhs);
+#if BUILDING_GCC_VERSION >= 4007
+ case 4:
-+ return handle_ternary_ops(visited, lhs);
++ return handle_ternary_ops(visited, caller_node, lhs);
+#endif
+ }
+ default:
@@ -110529,107 +112435,404 @@ index 0000000..03d0c84
+ }
+}
+
-+static tree get_new_tree(gimple stmt, const_tree orig_node, tree new_node)
++static tree cast_to_orig_type(gimple stmt, const_tree orig_node, tree new_node)
+{
+ const_gimple assign;
+ tree orig_type = TREE_TYPE(orig_node);
+ gimple_stmt_iterator gsi = gsi_for_stmt(stmt);
+
+ assign = build_cast_stmt(orig_type, new_node, CREATE_NEW_VAR, &gsi, BEFORE_STMT, false);
-+ return gimple_get_lhs(assign);
++ return gimple_assign_lhs(assign);
+}
+
-+static void change_function_arg(gimple stmt, const_tree orig_arg, unsigned int argnum, tree new_arg)
++static void change_orig_node(struct interesting_node *cur_node, tree new_node)
+{
-+ gimple_call_set_arg(stmt, argnum, get_new_tree(stmt, orig_arg, new_arg));
-+ update_stmt(stmt);
-+}
++ void (*set_rhs)(gimple, tree);
++ gimple stmt = cur_node->first_stmt;
++ const_tree orig_node = cur_node->node;
++
++ switch (gimple_code(stmt)) {
++ case GIMPLE_RETURN:
++ gimple_return_set_retval(stmt, cast_to_orig_type(stmt, orig_node, new_node));
++ break;
++ case GIMPLE_CALL:
++ gimple_call_set_arg(stmt, cur_node->num - 1, cast_to_orig_type(stmt, orig_node, new_node));
++ break;
++ case GIMPLE_ASSIGN:
++ switch (cur_node->num) {
++ case 1:
++ set_rhs = &gimple_assign_set_rhs1;
++ break;
++ case 2:
++ set_rhs = &gimple_assign_set_rhs2;
++ break;
++#if BUILDING_GCC_VERSION > 4005
++ case 3:
++ set_rhs = &gimple_assign_set_rhs3;
++ break;
++#endif
++ default:
++ gcc_unreachable();
++ }
++
++ set_rhs(stmt, cast_to_orig_type(stmt, orig_node, new_node));
++ break;
++ default:
++ debug_gimple_stmt(stmt);
++ gcc_unreachable();
++ }
+
-+static void change_function_return(gimple stmt, const_tree orig_ret, tree new_ret)
-+{
-+ gimple_return_set_retval(stmt, get_new_tree(stmt, orig_ret, new_ret));
+ update_stmt(stmt);
+}
+
-+static bool get_function_arg(unsigned int* argnum, const_tree fndecl)
++static unsigned int get_correct_arg_count(unsigned int argnum, tree fndecl)
+{
++ const struct size_overflow_hash *hash;
++ unsigned int new_argnum;
+ tree arg;
+ const_tree origarg;
+
-+ if (!DECL_ABSTRACT_ORIGIN(fndecl))
-+ return true;
++ if (argnum == 0)
++ return argnum;
+
-+ origarg = DECL_ARGUMENTS(DECL_ABSTRACT_ORIGIN(fndecl));
-+ while (origarg && *argnum) {
-+ (*argnum)--;
-+ origarg = TREE_CHAIN(origarg);
-+ }
++ hash = get_function_hash(fndecl);
++ if (hash && hash->param & (1U << argnum))
++ return argnum;
+
-+ gcc_assert(*argnum == 0);
++ if (DECL_EXTERNAL(fndecl))
++ return argnum;
+
++ origarg = DECL_ARGUMENTS(DECL_ORIGIN(fndecl));
++ argnum--;
++ while (origarg && argnum) {
++ origarg = TREE_CHAIN(origarg);
++ argnum--;
++ }
++ gcc_assert(argnum == 0);
+ gcc_assert(origarg != NULL_TREE);
-+ *argnum = 0;
-+ for (arg = DECL_ARGUMENTS(fndecl); arg; arg = TREE_CHAIN(arg), (*argnum)++)
++
++ for (arg = DECL_ARGUMENTS(fndecl), new_argnum = 1; arg; arg = TREE_CHAIN(arg), new_argnum++)
+ if (operand_equal_p(origarg, arg, 0) || !strcmp(NAME(origarg), NAME(arg)))
++ return new_argnum;
++
++ return CANNOT_FIND_ARG;
++}
++
++// Don't want to duplicate entries in next_cgraph_node
++static bool is_in_next_cgraph_node(struct next_cgraph_node *head, struct cgraph_node *node, const_tree fndecl, unsigned int num)
++{
++ const_tree new_callee_fndecl;
++ struct next_cgraph_node *cur_node;
++
++ if (fndecl == RET_CHECK)
++#if BUILDING_GCC_VERSION <= 4007
++ new_callee_fndecl = node->decl;
++#else
++ new_callee_fndecl = node->symbol.decl;
++#endif
++ else
++ new_callee_fndecl = fndecl;
++
++ for (cur_node = head; cur_node; cur_node = cur_node->next) {
++#if BUILDING_GCC_VERSION <= 4007
++ if (!operand_equal_p(cur_node->current_function->decl, node->decl, 0))
++#else
++ if (!operand_equal_p(cur_node->current_function->symbol.decl, node->symbol.decl, 0))
++#endif
++ continue;
++ if (!operand_equal_p(cur_node->callee_fndecl, new_callee_fndecl, 0))
++ continue;
++ if (num == cur_node->num)
+ return true;
++ }
++ return false;
++}
++
++/* Add a next_cgraph_node into the list for handle_function().
++ * handle_function() iterates over all the next cgraph nodes and
++ * starts the overflow check insertion process.
++ */
++static struct next_cgraph_node *create_new_next_cgraph_node(struct next_cgraph_node *head, struct cgraph_node *node, tree fndecl, unsigned int num)
++{
++ struct next_cgraph_node *new_node;
++
++ if (is_in_next_cgraph_node(head, node, fndecl, num))
++ return head;
++
++ new_node = (struct next_cgraph_node *)xmalloc(sizeof(*new_node));
++ new_node->current_function = node;
++ new_node->next = NULL;
++ new_node->num = num;
++ if (fndecl == RET_CHECK)
++#if BUILDING_GCC_VERSION <= 4007
++ new_node->callee_fndecl = node->decl;
++#else
++ new_node->callee_fndecl = node->symbol.decl;
++#endif
++ else
++ new_node->callee_fndecl = fndecl;
++
++ if (!head)
++ return new_node;
++
++ new_node->next = head;
++ return new_node;
++}
++
++static struct next_cgraph_node *create_new_next_cgraph_nodes(struct next_cgraph_node *head, struct cgraph_node *node, unsigned int num)
++{
++ struct cgraph_edge *e;
++
++ if (num == 0)
++ return create_new_next_cgraph_node(head, node, RET_CHECK, num);
++
++ for (e = node->callers; e; e = e->next_caller) {
++ tree fndecl = gimple_call_fndecl(e->call_stmt);
++
++ gcc_assert(fndecl != NULL_TREE);
++ head = create_new_next_cgraph_node(head, e->caller, fndecl, num);
++ }
++
++ return head;
++}
++
++static bool is_a_return_check(const_tree node)
++{
++ if (TREE_CODE(node) == FUNCTION_DECL)
++ return true;
++
++ gcc_assert(TREE_CODE(node) == PARM_DECL);
++ return false;
++}
++
++static bool is_in_hash_table(tree fndecl, unsigned int num)
++{
++ const struct size_overflow_hash *hash;
++
++ hash = get_function_hash(fndecl);
++ if (hash && (hash->param & (1U << num)))
++ return true;
+ return false;
+}
+
-+static enum mark walk_phi(struct pointer_set_t *visited, bool *search_err_code, const_tree result)
++struct missing_functions {
++ struct missing_functions *next;
++ const_tree node;
++ tree fndecl;
++};
++
++static struct missing_functions *create_new_missing_function(struct missing_functions *missing_fn_head, tree node)
++{
++ struct missing_functions *new_function;
++
++ new_function = (struct missing_functions *)xmalloc(sizeof(*new_function));
++ new_function->node = node;
++ new_function->next = NULL;
++
++ if (TREE_CODE(node) == FUNCTION_DECL)
++ new_function->fndecl = node;
++ else
++ new_function->fndecl = current_function_decl;
++ gcc_assert(new_function->fndecl);
++
++ if (!missing_fn_head)
++ return new_function;
++
++ new_function->next = missing_fn_head;
++ return new_function;
++}
++
++/* Check if the function has a size_overflow attribute or it is in the size_overflow hash table.
++ * If the function is missing everywhere then print the missing message into stderr.
++ */
++static bool is_missing_function(tree orig_fndecl, unsigned int num)
++{
++ switch (DECL_FUNCTION_CODE(orig_fndecl)) {
++#if BUILDING_GCC_VERSION >= 4008
++ case BUILT_IN_BSWAP16:
++#endif
++ case BUILT_IN_BSWAP32:
++ case BUILT_IN_BSWAP64:
++ case BUILT_IN_EXPECT:
++ case BUILT_IN_MEMCMP:
++ return false;
++ default:
++ break;
++ }
++
++ // skip test.c
++ if (strcmp(NAME(current_function_decl), "coolmalloc")) {
++ if (lookup_attribute("size_overflow", DECL_ATTRIBUTES(orig_fndecl)))
++ warning(0, "unnecessary size_overflow attribute on: %s\n", NAME(orig_fndecl));
++ }
++
++ if (is_in_hash_table(orig_fndecl, num))
++ return false;
++
++ print_missing_msg(orig_fndecl, num);
++ return true;
++}
++
++// Get the argnum of a function decl, if node is a return then the argnum is 0
++static unsigned int get_function_num(const_tree node, const_tree orig_fndecl)
++{
++ if (is_a_return_check(node))
++ return 0;
++ else
++ return find_arg_number_tree(node, orig_fndecl);
++}
++
++/* If the function is missing from the hash table and it is a static function
++ * then create a next_cgraph_node from it for handle_function()
++ */
++static struct next_cgraph_node *check_missing_overflow_attribute_and_create_next_node(struct next_cgraph_node *cnodes, struct missing_functions *missing_fn_head)
++{
++ unsigned int num;
++ tree orig_fndecl;
++ struct cgraph_node *next_node = NULL;
++
++ orig_fndecl = DECL_ORIGIN(missing_fn_head->fndecl);
++
++ num = get_function_num(missing_fn_head->node, orig_fndecl);
++ if (num == CANNOT_FIND_ARG)
++ return cnodes;
++
++ if (!is_missing_function(orig_fndecl, num))
++ return cnodes;
++
++ next_node = cgraph_get_node(missing_fn_head->fndecl);
++ if (next_node && next_node->local.local)
++ cnodes = create_new_next_cgraph_nodes(cnodes, next_node, num);
++ return cnodes;
++}
++
++/* Search for missing size_overflow attributes on the last nodes in ipa and collect them
++ * into the next_cgraph_node list. They will be the next interesting returns or callees.
++ */
++static struct next_cgraph_node *search_overflow_attribute(struct next_cgraph_node *cnodes, struct interesting_node *cur_node)
++{
++ unsigned int i;
++ tree node;
++ struct missing_functions *cur, *missing_fn_head = NULL;
++
++#if BUILDING_GCC_VERSION == 4005
++ for (i = 0; i < VEC_length(tree, cur_node->last_nodes); i++) {
++ node = VEC_index(tree, cur_node->last_nodes, i);
++#elif BUILDING_GCC_VERSION <= 4007
++ FOR_EACH_VEC_ELT(tree, cur_node->last_nodes, i, node) {
++#else
++ FOR_EACH_VEC_ELT(*cur_node->last_nodes, i, node) {
++#endif
++ switch (TREE_CODE(node)) {
++ case PARM_DECL:
++ if (TREE_CODE(TREE_TYPE(node)) != INTEGER_TYPE)
++ break;
++ case FUNCTION_DECL:
++ missing_fn_head = create_new_missing_function(missing_fn_head, node);
++ break;
++ default:
++ break;
++ }
++ }
++
++ while (missing_fn_head) {
++ cnodes = check_missing_overflow_attribute_and_create_next_node(cnodes, missing_fn_head);
++
++ cur = missing_fn_head->next;
++ free(missing_fn_head);
++ missing_fn_head = cur;
++ }
++
++ return cnodes;
++}
++
++static void walk_phi_set_conditions(struct pointer_set_t *visited, bool *interesting_conditions, const_tree result)
+{
+ gimple phi = get_def_stmt(result);
+ unsigned int i, n = gimple_phi_num_args(phi);
+
-+ if (!phi)
-+ return MARK_NO;
-+
+ pointer_set_insert(visited, phi);
+ for (i = 0; i < n; i++) {
-+ enum mark marked;
+ const_tree arg = gimple_phi_arg_def(phi, i);
-+ marked = pre_expand(visited, search_err_code, arg);
-+ if (marked != MARK_NO)
-+ return marked;
++
++ set_conditions(visited, interesting_conditions, arg);
+ }
-+ return MARK_NO;
+}
+
-+static enum mark walk_unary_ops(struct pointer_set_t *visited, bool *search_err_code, const_tree lhs)
++enum conditions {
++ FROM_CONST, NOT_UNARY, CAST
++};
++
++// Search for constants, cast assignments and binary/ternary assignments
++static void set_conditions(struct pointer_set_t *visited, bool *interesting_conditions, const_tree lhs)
+{
+ gimple def_stmt = get_def_stmt(lhs);
-+ const_tree rhs;
++
++ if (is_gimple_constant(lhs)) {
++ interesting_conditions[FROM_CONST] = true;
++ return;
++ }
+
+ if (!def_stmt)
-+ return MARK_NO;
++ return;
+
-+ rhs = gimple_assign_rhs1(def_stmt);
++ if (pointer_set_contains(visited, def_stmt))
++ return;
+
-+ def_stmt = get_def_stmt(rhs);
-+ if (is_gimple_constant(rhs))
-+ search_err_code[FROM_CONST] = true;
++ switch (gimple_code(def_stmt)) {
++ case GIMPLE_NOP:
++ case GIMPLE_CALL:
++ case GIMPLE_ASM:
++ return;
++ case GIMPLE_PHI:
++ return walk_phi_set_conditions(visited, interesting_conditions, lhs);
++ case GIMPLE_ASSIGN:
++ if (gimple_num_ops(def_stmt) == 2) {
++ const_tree rhs = gimple_assign_rhs1(def_stmt);
++
++ if (gimple_assign_cast_p(def_stmt))
++ interesting_conditions[CAST] = true;
+
-+ return pre_expand(visited, search_err_code, rhs);
++ return set_conditions(visited, interesting_conditions, rhs);
++ } else {
++ interesting_conditions[NOT_UNARY] = true;
++ return;
++ }
++ default:
++ debug_gimple_stmt(def_stmt);
++ gcc_unreachable();
++ }
+}
+
-+static enum mark walk_binary_ops(struct pointer_set_t *visited, bool *search_err_code, const_tree lhs)
++// determine whether duplication will be necessary or not.
++static void search_interesting_conditions(const_tree arg, bool *interesting_conditions)
+{
-+ gimple def_stmt = get_def_stmt(lhs);
-+ const_tree rhs1, rhs2;
-+ enum mark marked;
++ struct pointer_set_t *visited;
+
-+ if (!def_stmt)
-+ return MARK_NO;
++ visited = pointer_set_create();
++ set_conditions(visited, interesting_conditions, arg);
++ pointer_set_destroy(visited);
++}
+
-+ search_err_code[CAST_ONLY] = false;
++// Remove the size_overflow asm stmt and create an assignment from the input and output of the asm
++static void replace_size_overflow_asm_with_assign(gimple asm_stmt, tree lhs, tree rhs)
++{
++ gimple assign;
++ gimple_stmt_iterator gsi;
+
-+ rhs1 = gimple_assign_rhs1(def_stmt);
-+ rhs2 = gimple_assign_rhs2(def_stmt);
-+ marked = pre_expand(visited, search_err_code, rhs1);
-+ if (marked != MARK_NO)
-+ return marked;
-+ return pre_expand(visited, search_err_code, rhs2);
++ // already removed
++ if (gimple_bb(asm_stmt) == NULL)
++ return;
++ gsi = gsi_for_stmt(asm_stmt);
++
++ assign = gimple_build_assign(lhs, rhs);
++ gsi_insert_before(&gsi, assign, GSI_SAME_STMT);
++ SSA_NAME_DEF_STMT(lhs) = assign;
++
++ gsi_remove(&gsi, true);
+}
+
++// Get the field decl of a component ref for intentional_overflow checking
+static const_tree search_field_decl(const_tree comp_ref)
+{
+ const_tree field = NULL_TREE;
@@ -110644,142 +112847,397 @@ index 0000000..03d0c84
+ return field;
+}
+
-+static enum mark mark_status(const_tree fndecl, unsigned int argnum)
++/* Get the fndecl of an interesting stmt, the fndecl is the caller function if the interesting
++ * stmt is a return otherwise it is the callee function.
++ */
++static const_tree get_interesting_orig_fndecl(const_gimple stmt, unsigned int argnum)
+{
-+ const_tree attr, p;
++ const_tree fndecl;
++
++ if (argnum == 0)
++ fndecl = current_function_decl;
++ else
++ fndecl = gimple_call_fndecl(stmt);
+
-+ // mm/filemap.c D.35286_51 = D.35283_46 (file_10(D), mapping_11, pos_1, D.35273_50, D.35285_49, page.14_48, fsdata.15_47);
+ if (fndecl == NULL_TREE)
-+ return MARK_NO;
++ return NULL_TREE;
++
++ return DECL_ORIGIN(fndecl);
++}
++
++/* Get the param of the intentional_overflow attribute.
++ * * 0: MARK_NOT_INTENTIONAL
++ * * 1..MAX_PARAM: MARK_YES
++ * * -1: MARK_TURN_OFF
++ */
++static tree get_attribute_param(const_tree decl)
++{
++ const_tree attr;
++
++ if (decl == NULL_TREE)
++ return NULL_TREE;
+
-+ attr = lookup_attribute("intentional_overflow", DECL_ATTRIBUTES(fndecl));
++ attr = lookup_attribute("intentional_overflow", DECL_ATTRIBUTES(decl));
+ if (!attr || !TREE_VALUE(attr))
-+ return MARK_NO;
++ return NULL_TREE;
++
++ return TREE_VALUE(attr);
++}
++
++// MARK_TURN_OFF
++static bool is_turn_off_intentional_attr(const_tree decl)
++{
++ const_tree param_head;
++
++ param_head = get_attribute_param(decl);
++ if (param_head == NULL_TREE)
++ return false;
+
-+ p = TREE_VALUE(attr);
-+ if (TREE_INT_CST_HIGH(TREE_VALUE(p)) == -1)
-+ return MARK_TURN_OFF;
-+ if (!TREE_INT_CST_LOW(TREE_VALUE(p)))
-+ return MARK_NOT_INTENTIONAL;
-+ if (argnum == 0) {
-+ gcc_assert(current_function_decl == fndecl);
++ if (TREE_INT_CST_HIGH(TREE_VALUE(param_head)) == -1)
++ return true;
++ return false;
++}
++
++// MARK_NOT_INTENTIONAL
++static bool is_end_intentional_intentional_attr(const_tree decl, unsigned int argnum)
++{
++ const_tree param_head;
++
++ if (argnum == 0)
++ return false;
++
++ param_head = get_attribute_param(decl);
++ if (param_head == NULL_TREE)
++ return false;
++
++ if (!TREE_INT_CST_LOW(TREE_VALUE(param_head)))
++ return true;
++ return false;
++}
++
++// MARK_YES
++static bool is_yes_intentional_attr(const_tree decl, unsigned int argnum)
++{
++ tree param, param_head;
++
++ if (argnum == 0)
++ return false;
++
++ param_head = get_attribute_param(decl);
++ for (param = param_head; param; param = TREE_CHAIN(param))
++ if (argnum == TREE_INT_CST_LOW(TREE_VALUE(param)))
++ return true;
++ return false;
++}
++
++static bool is_size_overflow_intentional_asm_turn_off(const_gimple stmt)
++{
++ const char *str;
++
++ if (!stmt)
++ return false;
++
++ str = gimple_asm_string(stmt);
++ return !strcmp(str, "# size_overflow MARK_TURN_OFF\n\t");
++}
++
++static bool is_size_overflow_intentional_asm_yes(const_gimple stmt)
++{
++ const char *str;
++
++ if (!stmt)
++ return false;
++
++ str = gimple_asm_string(stmt);
++ return !strcmp(str, "# size_overflow MARK_YES\n\t");
++}
++
++static bool is_size_overflow_asm(const_gimple stmt)
++{
++ const char *str;
++
++ if (!stmt)
++ return false;
++
++ str = gimple_asm_string(stmt);
++ return !strncmp(str, "# size_overflow", 15);
++}
++
++static void print_missing_intentional(enum mark callee_attr, enum mark caller_attr, const_tree decl, unsigned int argnum)
++{
++ location_t loc;
++
++ if (caller_attr == MARK_NO || caller_attr == MARK_NOT_INTENTIONAL || caller_attr == MARK_TURN_OFF)
++ return;
++
++ if (callee_attr == MARK_NOT_INTENTIONAL || callee_attr == MARK_YES)
++ return;
++
++ loc = DECL_SOURCE_LOCATION(decl);
++ inform(loc, "The intentional_overflow attribute is missing from +%s+%u+", NAME(decl), argnum);
++}
++
++/* Get the type of the intentional_overflow attribute of a node
++ * * MARK_TURN_OFF
++ * * MARK_YES
++ * * MARK_NO
++ * * MARK_NOT_INTENTIONAL
++ */
++static enum mark get_intentional_attr_type(const_tree node)
++{
++ const_tree cur_decl;
++
++ if (node == NULL_TREE)
+ return MARK_NO;
-+ }
+
-+ do {
-+ if (argnum == TREE_INT_CST_LOW(TREE_VALUE(p)))
++ switch (TREE_CODE(node)) {
++ case COMPONENT_REF:
++ cur_decl = search_field_decl(node);
++ if (is_turn_off_intentional_attr(cur_decl))
++ return MARK_TURN_OFF;
++ if (is_end_intentional_intentional_attr(cur_decl, 1))
+ return MARK_YES;
-+ p = TREE_CHAIN(p);
-+ } while (p);
++ break;
++ case PARM_DECL: {
++ unsigned int argnum;
+
++ cur_decl = DECL_ORIGIN(current_function_decl);
++ argnum = find_arg_number_tree(node, cur_decl);
++ if (argnum == CANNOT_FIND_ARG)
++ return MARK_NO;
++ if (is_yes_intentional_attr(cur_decl, argnum))
++ return MARK_YES;
++ if (is_end_intentional_intentional_attr(cur_decl, argnum))
++ return MARK_NOT_INTENTIONAL;
++ break;
++ }
++ case FUNCTION_DECL:
++ if (is_turn_off_intentional_attr(DECL_ORIGIN(node)))
++ return MARK_TURN_OFF;
++ break;
++ default:
++ break;
++ }
+ return MARK_NO;
+}
+
-+static void print_missing_msg(tree func, unsigned int argnum)
++// Search for the intentional_overflow attribute on the last nodes
++static enum mark search_last_nodes_intentional(struct interesting_node *cur_node)
+{
-+ unsigned int new_hash;
-+ size_t len;
-+ unsigned char tree_codes[CODES_LIMIT];
-+ location_t loc;
-+ const char *curfunc;
++ unsigned int i;
++ tree last_node;
++ enum mark mark = MARK_NO;
+
-+ func = get_original_function_decl(func);
-+ loc = DECL_SOURCE_LOCATION(func);
-+ curfunc = get_asm_name(func);
++#if BUILDING_GCC_VERSION == 4005
++ for (i = 0; i < VEC_length(tree, cur_node->last_nodes); i++) {
++ last_node = VEC_index(tree, cur_node->last_nodes, i);
++#elif BUILDING_GCC_VERSION <= 4007
++ FOR_EACH_VEC_ELT(tree, cur_node->last_nodes, i, last_node) {
++#else
++ FOR_EACH_VEC_ELT(*cur_node->last_nodes, i, last_node) {
++#endif
++ mark = get_intentional_attr_type(last_node);
++ if (mark != MARK_NO)
++ break;
++ }
++ return mark;
++}
++
++/* Check the intentional kind of size_overflow asm stmt (created by the gimple pass) and
++ * set the appropriate intentional_overflow type. Delete the asm stmt in the end.
++ */
++static bool is_intentional_attribute_from_gimple(struct interesting_node *cur_node)
++{
++ const_tree input, output;
+
-+ len = get_function_decl(func, tree_codes);
-+ new_hash = get_hash_num(curfunc, (const char *) tree_codes, len, 0);
-+ inform(loc, "Function %s is missing from the size_overflow hash table +%s+%u+%u+", curfunc, curfunc, argnum, new_hash);
++ if (!cur_node->intentional_mark_from_gimple)
++ return false;
++
++ if (is_size_overflow_intentional_asm_yes(cur_node->intentional_mark_from_gimple))
++ cur_node->intentional_attr_cur_fndecl = MARK_YES;
++ else
++ cur_node->intentional_attr_cur_fndecl = MARK_TURN_OFF;
++
++ // skip param decls
++ if (gimple_asm_noutputs(cur_node->intentional_mark_from_gimple) == 0)
++ return true;
++ input = gimple_asm_input_op(cur_node->intentional_mark_from_gimple, 0);
++ output = gimple_asm_output_op(cur_node->intentional_mark_from_gimple, 0);
++
++ replace_size_overflow_asm_with_assign(cur_node->intentional_mark_from_gimple, TREE_VALUE(output), TREE_VALUE(input));
++ return true;
+}
+
-+static unsigned int search_missing_attribute(const_tree arg)
++/* Search intentional_overflow attribute on caller and on callee too.
++ * 0</MARK_YES: no dup, search size_overflow and intentional_overflow attributes
++ * 0/MARK_NOT_INTENTIONAL: no dup, search size_overflow attribute (int)
++ * -1/MARK_TURN_OFF: no dup, no search, current_function_decl -> no dup
++*/
++static void check_intentional_attribute_ipa(struct interesting_node *cur_node)
+{
-+ unsigned int argnum;
-+ const struct size_overflow_hash *hash;
-+ const_tree type = TREE_TYPE(arg);
-+ tree func = get_original_function_decl(current_function_decl);
++ const_tree fndecl;
+
-+ gcc_assert(TREE_CODE(arg) != COMPONENT_REF);
++ if (is_turn_off_intentional_attr(DECL_ORIGIN(current_function_decl))) {
++ cur_node->intentional_attr_cur_fndecl = MARK_TURN_OFF;
++ return;
++ }
+
-+ if (TREE_CODE(type) == POINTER_TYPE)
-+ return 0;
++ if (gimple_code(cur_node->first_stmt) == GIMPLE_ASM) {
++ cur_node->intentional_attr_cur_fndecl = MARK_NOT_INTENTIONAL;
++ return;
++ }
+
-+ argnum = find_arg_number(arg, func);
-+ if (argnum == 0)
-+ return 0;
++ if (gimple_code(cur_node->first_stmt) == GIMPLE_ASSIGN)
++ return;
+
-+ if (lookup_attribute("size_overflow", DECL_ATTRIBUTES(func)))
-+ return argnum;
++ fndecl = get_interesting_orig_fndecl(cur_node->first_stmt, cur_node->num);
++ if (is_turn_off_intentional_attr(fndecl)) {
++ cur_node->intentional_attr_decl = MARK_TURN_OFF;
++ return;
++ }
+
-+ hash = get_function_hash(func);
-+ if (!hash || !(hash->param & (1U << argnum))) {
-+ print_missing_msg(func, argnum);
-+ return 0;
++ if (is_end_intentional_intentional_attr(fndecl, cur_node->num))
++ cur_node->intentional_attr_decl = MARK_NOT_INTENTIONAL;
++ else if (is_yes_intentional_attr(fndecl, cur_node->num))
++ cur_node->intentional_attr_decl = MARK_YES;
++
++ if (is_intentional_attribute_from_gimple(cur_node))
++ return;
++
++ cur_node->intentional_attr_cur_fndecl = search_last_nodes_intentional(cur_node);
++ print_missing_intentional(cur_node->intentional_attr_decl, cur_node->intentional_attr_cur_fndecl, cur_node->fndecl, cur_node->num);
++}
++
++// e.g., 3.8.2, 64, arch/x86/ia32/ia32_signal.c copy_siginfo_from_user32(): compat_ptr() u32 max
++static bool skip_asm(const_tree arg)
++{
++ gimple def_stmt = get_def_stmt(arg);
++
++ if (!def_stmt || !gimple_assign_cast_p(def_stmt))
++ return false;
++
++ def_stmt = get_def_stmt(gimple_assign_rhs1(def_stmt));
++ return def_stmt && gimple_code(def_stmt) == GIMPLE_ASM;
++}
++
++static void walk_use_def_phi(struct pointer_set_t *visited, struct interesting_node *cur_node, tree result)
++{
++ gimple phi = get_def_stmt(result);
++ unsigned int i, n = gimple_phi_num_args(phi);
++
++ pointer_set_insert(visited, phi);
++ for (i = 0; i < n; i++) {
++ tree arg = gimple_phi_arg_def(phi, i);
++
++ walk_use_def(visited, cur_node, arg);
+ }
-+ return argnum;
+}
+
-+static enum mark is_already_marked(const_tree lhs)
++static void walk_use_def_binary(struct pointer_set_t *visited, struct interesting_node *cur_node, tree lhs)
+{
-+ unsigned int argnum;
-+ const_tree fndecl;
++ gimple def_stmt = get_def_stmt(lhs);
++ tree rhs1, rhs2;
+
-+ argnum = search_missing_attribute(lhs);
-+ fndecl = get_original_function_decl(current_function_decl);
-+ if (argnum && mark_status(fndecl, argnum) == MARK_YES)
-+ return MARK_YES;
-+ return MARK_NO;
++ rhs1 = gimple_assign_rhs1(def_stmt);
++ rhs2 = gimple_assign_rhs2(def_stmt);
++
++ walk_use_def(visited, cur_node, rhs1);
++ walk_use_def(visited, cur_node, rhs2);
+}
+
-+static enum mark pre_expand(struct pointer_set_t *visited, bool *search_err_code, const_tree lhs)
++static void insert_last_node(struct interesting_node *cur_node, tree node)
+{
-+ const_gimple def_stmt;
++ unsigned int i;
++ tree element;
++ enum tree_code code;
+
-+ if (skip_types(lhs))
-+ return MARK_NO;
++ gcc_assert(node != NULL_TREE);
+
-+ if (TREE_CODE(lhs) == PARM_DECL)
-+ return is_already_marked(lhs);
++ if (is_gimple_constant(node))
++ return;
+
-+ if (TREE_CODE(lhs) == COMPONENT_REF) {
-+ const_tree field, attr;
++ code = TREE_CODE(node);
++ if (code == VAR_DECL) {
++ node = DECL_ORIGIN(node);
++ code = TREE_CODE(node);
++ }
+
-+ field = search_field_decl(lhs);
-+ attr = lookup_attribute("intentional_overflow", DECL_ATTRIBUTES(field));
-+ if (!attr || !TREE_VALUE(attr))
-+ return MARK_NO;
-+ return MARK_YES;
++ if (code != PARM_DECL && code != FUNCTION_DECL && code != COMPONENT_REF)
++ return;
++
++#if BUILDING_GCC_VERSION == 4005
++ for (i = 0; i < VEC_length(tree, cur_node->last_nodes); i++) {
++ element = VEC_index(tree, cur_node->last_nodes, i);
++#elif BUILDING_GCC_VERSION <= 4007
++ FOR_EACH_VEC_ELT(tree, cur_node->last_nodes, i, element) {
++#else
++ FOR_EACH_VEC_ELT(*cur_node->last_nodes, i, element) {
++#endif
++ if (operand_equal_p(node, element, 0))
++ return;
+ }
+
-+ def_stmt = get_def_stmt(lhs);
++#if BUILDING_GCC_VERSION <= 4007
++ gcc_assert(VEC_length(tree, cur_node->last_nodes) < VEC_LEN);
++ VEC_safe_push(tree, gc, cur_node->last_nodes, node);
++#else
++ gcc_assert(cur_node->last_nodes->length() < VEC_LEN);
++ vec_safe_push(cur_node->last_nodes, node);
++#endif
++}
+
++// a size_overflow asm stmt in the control flow doesn't stop the recursion
++static void handle_asm_stmt(struct pointer_set_t *visited, struct interesting_node *cur_node, tree lhs, const_gimple stmt)
++{
++ const_tree asm_lhs;
++
++ if (!is_size_overflow_asm(stmt))
++ return walk_use_def(visited, cur_node, SSA_NAME_VAR(lhs));
++
++ asm_lhs = gimple_asm_input_op(stmt, 0);
++ walk_use_def(visited, cur_node, TREE_VALUE(asm_lhs));
++}
++
++/* collect the parm_decls and fndecls (for checking a missing size_overflow attribute (ret or arg) or intentional_overflow)
++ * and component refs (for checking the intentional_overflow attribute).
++ */
++static void walk_use_def(struct pointer_set_t *visited, struct interesting_node *cur_node, tree lhs)
++{
++ const_gimple def_stmt;
++
++ if (TREE_CODE(lhs) != SSA_NAME) {
++ insert_last_node(cur_node, lhs);
++ return;
++ }
++
++ def_stmt = get_def_stmt(lhs);
+ if (!def_stmt)
-+ return MARK_NO;
++ return;
+
-+ if (pointer_set_contains(visited, def_stmt))
-+ return MARK_NO;
++ if (pointer_set_insert(visited, def_stmt))
++ return;
+
+ switch (gimple_code(def_stmt)) {
+ case GIMPLE_NOP:
-+ if (TREE_CODE(SSA_NAME_VAR(lhs)) == PARM_DECL)
-+ return is_already_marked(lhs);
-+ return MARK_NO;
-+ case GIMPLE_PHI:
-+ return walk_phi(visited, search_err_code, lhs);
-+ case GIMPLE_CALL:
-+ if (mark_status((gimple_call_fndecl(def_stmt)), 0) == MARK_TURN_OFF)
-+ return MARK_TURN_OFF;
-+ check_function_hash(def_stmt);
-+ return MARK_NO;
++ return walk_use_def(visited, cur_node, SSA_NAME_VAR(lhs));
+ case GIMPLE_ASM:
-+ search_err_code[CAST_ONLY] = false;
-+ return MARK_NO;
++ return handle_asm_stmt(visited, cur_node, lhs, def_stmt);
++ case GIMPLE_CALL: {
++ tree fndecl = gimple_call_fndecl(def_stmt);
++
++ if (fndecl == NULL_TREE)
++ return;
++ insert_last_node(cur_node, fndecl);
++ return;
++ }
++ case GIMPLE_PHI:
++ return walk_use_def_phi(visited, cur_node, lhs);
+ case GIMPLE_ASSIGN:
+ switch (gimple_num_ops(def_stmt)) {
+ case 2:
-+ return walk_unary_ops(visited, search_err_code, lhs);
++ return walk_use_def(visited, cur_node, gimple_assign_rhs1(def_stmt));
+ case 3:
-+ return walk_binary_ops(visited, search_err_code, lhs);
++ return walk_use_def_binary(visited, cur_node, lhs);
+ }
+ default:
+ debug_gimple_stmt((gimple)def_stmt);
@@ -110788,220 +113246,1175 @@ index 0000000..03d0c84
+ }
+}
+
-+// e.g., 3.8.2, 64, arch/x86/ia32/ia32_signal.c copy_siginfo_from_user32(): compat_ptr() u32 max
-+static bool skip_asm(const_tree arg)
++// Collect all the last nodes for checking the intentional_overflow and size_overflow attributes
++static void set_last_nodes(struct interesting_node *cur_node)
+{
-+ gimple def_stmt = get_def_stmt(arg);
++ struct pointer_set_t *visited;
+
-+ if (!def_stmt || !gimple_assign_cast_p(def_stmt))
-+ return false;
++ visited = pointer_set_create();
++ walk_use_def(visited, cur_node, cur_node->node);
++ pointer_set_destroy(visited);
++}
+
-+ def_stmt = get_def_stmt(gimple_assign_rhs1(def_stmt));
-+ return def_stmt && gimple_code(def_stmt) == GIMPLE_ASM;
++/* This function calls the main recursion function (expand) that duplicates the stmts. Before that it checks the intentional_overflow attribute and asm stmts,
++ * it decides whether the duplication is necessary or not and it searches for missing size_overflow attributes. After expand() it changes the orig node to the duplicated node
++ * in the original stmt (first stmt) and it inserts the overflow check for the arg of the callee or for the return value.
++ * If there is a mark_turn_off intentional attribute on the caller or the callee then there is no duplication and missing size_overflow attribute check anywhere.
++ * There is only missing size_overflow attribute checking if the intentional_overflow attribute is the mark_no type.
++ * Stmt duplication is unnecessary if there are no binary/ternary assignements or if the unary assignment isn't a cast.
++ * It skips the possible error codes too. If the def_stmts trace back to a constant and there are no binary/ternary assigments then we assume that it is some kind of error code.
++ */
++static struct next_cgraph_node *handle_interesting_stmt(struct next_cgraph_node *cnodes, struct interesting_node *cur_node, struct cgraph_node *caller_node)
++{
++ struct pointer_set_t *visited;
++ bool interesting_conditions[3] = {false, false, false};
++ tree new_node, orig_node = cur_node->node;
++
++ set_last_nodes(cur_node);
++
++ check_intentional_attribute_ipa(cur_node);
++ if (cur_node->intentional_attr_decl == MARK_TURN_OFF || cur_node->intentional_attr_cur_fndecl == MARK_TURN_OFF)
++ return cnodes;
++
++ search_interesting_conditions(orig_node, interesting_conditions);
++
++ // error code
++ if (interesting_conditions[CAST] && interesting_conditions[FROM_CONST] && !interesting_conditions[NOT_UNARY])
++ return cnodes;
++
++ cnodes = search_overflow_attribute(cnodes, cur_node);
++
++ if (cur_node->intentional_attr_cur_fndecl != MARK_NO)
++ return cnodes;
++
++ // unnecessary overflow check
++ if (!interesting_conditions[CAST] && !interesting_conditions[NOT_UNARY])
++ return cnodes;
++
++ visited = pointer_set_create();
++ new_node = expand(visited, caller_node, orig_node);
++ pointer_set_destroy(visited);
++
++ if (new_node == NULL_TREE)
++ return cnodes;
++
++ change_orig_node(cur_node, new_node);
++ check_size_overflow(caller_node, cur_node->first_stmt, TREE_TYPE(new_node), new_node, orig_node, BEFORE_STMT);
++
++ return cnodes;
+}
+
-+/*
-+0</MARK_YES: no dup, search attributes (so, int)
-+0/MARK_NOT_INTENTIONAL: no dup, search attribute (int)
-+-1/MARK_TURN_OFF: no dup, no search, current_function_decl -> no dup
-+*/
++// Check visited interesting nodes.
++static bool is_in_interesting_node(struct interesting_node *head, const_gimple first_stmt, const_tree node, unsigned int num)
++{
++ struct interesting_node *cur;
++
++ for (cur = head; cur; cur = cur->next) {
++ if (!operand_equal_p(node, cur->node, 0))
++ continue;
++ if (num != cur->num)
++ continue;
++ if (first_stmt == cur->first_stmt)
++ return true;
++ }
++ return false;
++}
++
++/* Create an interesting node. The ipa pass starts to duplicate from these stmts.
++ first_stmt: it is the call or assignment or ret stmt, change_orig_node() will change the original node (retval, or function arg) in this
++ last_nodes: they are the last stmts in the recursion (they haven't a def_stmt). They are useful in the missing size_overflow attribute check and
++ the intentional_overflow attribute check. They are collected by set_last_nodes().
++ num: arg count of a call stmt or 0 when it is a ret
++ node: the recursion starts from here, it is a call arg or a return value
++ fndecl: the fndecl of the interesting node when the node is an arg. it is the fndecl of the callee function otherwise it is the fndecl of the caller (current_function_fndecl) function.
++ intentional_attr_decl: intentional_overflow attribute of the callee function
++ intentional_attr_cur_fndecl: intentional_overflow attribute of the caller function
++ intentional_mark_from_gimple: the intentional overflow type of size_overflow asm stmt from gimple if it exists
++ */
++static struct interesting_node *create_new_interesting_node(struct interesting_node *head, gimple first_stmt, tree node, unsigned int num, gimple asm_stmt)
++{
++ struct interesting_node *new_node;
++ tree fndecl;
++ enum gimple_code code;
++
++ gcc_assert(node != NULL_TREE);
++ code = gimple_code(first_stmt);
++ gcc_assert(code == GIMPLE_CALL || code == GIMPLE_ASM || code == GIMPLE_ASSIGN || code == GIMPLE_RETURN);
++
++ if (num == CANNOT_FIND_ARG)
++ return head;
++
++ if (skip_types(node))
++ return head;
++
++ if (skip_asm(node))
++ return head;
++
++ if (is_gimple_call(first_stmt))
++ fndecl = gimple_call_fndecl(first_stmt);
++ else
++ fndecl = current_function_decl;
++
++ if (fndecl == NULL_TREE)
++ return head;
++
++ if (is_in_interesting_node(head, first_stmt, node, num))
++ return head;
++
++ new_node = (struct interesting_node *)xmalloc(sizeof(*new_node));
++
++ new_node->next = NULL;
++ new_node->first_stmt = first_stmt;
++#if BUILDING_GCC_VERSION <= 4007
++ new_node->last_nodes = VEC_alloc(tree, gc, VEC_LEN);
++#else
++ vec_alloc(new_node->last_nodes, VEC_LEN);
++#endif
++ new_node->num = num;
++ new_node->node = node;
++ new_node->fndecl = fndecl;
++ new_node->intentional_attr_decl = MARK_NO;
++ new_node->intentional_attr_cur_fndecl = MARK_NO;
++ new_node->intentional_mark_from_gimple = asm_stmt;
++
++ if (!head)
++ return new_node;
++
++ new_node->next = head;
++ return new_node;
++}
++
++/* Check the ret stmts in the functions on the next cgraph node list (these functions will be in the hash table and they are reachable from ipa).
++ * If the ret stmt is in the next cgraph node list then it's an interesting ret.
++ */
++static struct interesting_node *handle_stmt_by_cgraph_nodes_ret(struct interesting_node *head, gimple stmt, struct next_cgraph_node *next_node)
++{
++ struct next_cgraph_node *cur_node;
++ tree ret = gimple_return_retval(stmt);
++
++ if (ret == NULL_TREE)
++ return head;
++
++ for (cur_node = next_node; cur_node; cur_node = cur_node->next) {
++ if (!operand_equal_p(cur_node->callee_fndecl, DECL_ORIGIN(current_function_decl), 0))
++ continue;
++ if (cur_node->num == 0)
++ head = create_new_interesting_node(head, stmt, ret, 0, NOT_INTENTIONAL_ASM);
++ }
++
++ return head;
++}
+
-+static bool search_attributes(tree fndecl, const_tree arg, unsigned int argnum, bool where)
++/* Check the call stmts in the functions on the next cgraph node list (these functions will be in the hash table and they are reachable from ipa).
++ * If the call stmt is in the next cgraph node list then it's an interesting call.
++ */
++static struct interesting_node *handle_stmt_by_cgraph_nodes_call(struct interesting_node *head, gimple stmt, struct next_cgraph_node *next_node)
++{
++ unsigned int argnum;
++ tree fndecl, arg;
++ struct next_cgraph_node *cur_node;
++
++ fndecl = gimple_call_fndecl(stmt);
++ if (fndecl == NULL_TREE)
++ return head;
++
++ for (cur_node = next_node; cur_node; cur_node = cur_node->next) {
++ if (!operand_equal_p(cur_node->callee_fndecl, fndecl, 0))
++ continue;
++ argnum = get_correct_arg_count(cur_node->num, fndecl);
++ gcc_assert(argnum != CANNOT_FIND_ARG);
++ if (argnum == 0)
++ continue;
++
++ arg = gimple_call_arg(stmt, argnum - 1);
++ head = create_new_interesting_node(head, stmt, arg, argnum, NOT_INTENTIONAL_ASM);
++ }
++
++ return head;
++}
++
++static unsigned int check_ops(const_tree orig_node, const_tree node, unsigned int ret_count)
++{
++ if (!operand_equal_p(orig_node, node, 0))
++ return WRONG_NODE;
++ if (skip_types(node))
++ return WRONG_NODE;
++ return ret_count;
++}
++
++// Get the index of the rhs node in an assignment
++static unsigned int get_assign_ops_count(const_gimple stmt, tree node)
++{
++ const_tree rhs1, rhs2;
++ unsigned int ret;
++
++ gcc_assert(stmt);
++ gcc_assert(is_gimple_assign(stmt));
++
++ rhs1 = gimple_assign_rhs1(stmt);
++ gcc_assert(rhs1 != NULL_TREE);
++
++ switch (gimple_num_ops(stmt)) {
++ case 2:
++ return check_ops(node, rhs1, 1);
++ case 3:
++ ret = check_ops(node, rhs1, 1);
++ if (ret != WRONG_NODE)
++ return ret;
++
++ rhs2 = gimple_assign_rhs2(stmt);
++ gcc_assert(rhs2 != NULL_TREE);
++ return check_ops(node, rhs2, 2);
++ default:
++ gcc_unreachable();
++ }
++}
++
++// Find the correct arg number of a call stmt. It is needed when the interesting function is a cloned function.
++static unsigned int find_arg_number_gimple(const_tree arg, const_gimple stmt)
++{
++ unsigned int i;
++
++ if (gimple_call_fndecl(stmt) == NULL_TREE)
++ return CANNOT_FIND_ARG;
++
++ for (i = 0; i < gimple_call_num_args(stmt); i++) {
++ tree node;
++
++ node = gimple_call_arg(stmt, i);
++ if (!operand_equal_p(arg, node, 0))
++ continue;
++ if (!skip_types(node))
++ return i + 1;
++ }
++
++ return CANNOT_FIND_ARG;
++}
++
++/* starting from the size_overflow asm stmt collect interesting stmts. They can be
++ * any of return, call or assignment stmts (because of inlining).
++ */
++static struct interesting_node *get_interesting_ret_or_call(struct pointer_set_t *visited, struct interesting_node *head, tree node, gimple intentional_asm)
+{
++ use_operand_p use_p;
++ imm_use_iterator imm_iter;
++ unsigned int argnum;
++
++ if (is_size_overflow_intentional_asm_turn_off(intentional_asm))
++ return head;
++
++ gcc_assert(TREE_CODE(node) == SSA_NAME);
++
++ if (pointer_set_insert(visited, node))
++ return head;
++
++ FOR_EACH_IMM_USE_FAST(use_p, imm_iter, node) {
++ gimple stmt = USE_STMT(use_p);
++
++ if (stmt == NULL)
++ return head;
++ if (is_gimple_debug(stmt))
++ continue;
++
++ switch (gimple_code(stmt)) {
++ case GIMPLE_CALL:
++ argnum = find_arg_number_gimple(node, stmt);
++ head = create_new_interesting_node(head, stmt, node, argnum, intentional_asm);
++ break;
++ case GIMPLE_RETURN:
++ head = create_new_interesting_node(head, stmt, node, 0, intentional_asm);
++ break;
++ case GIMPLE_ASSIGN:
++ argnum = get_assign_ops_count(stmt, node);
++ head = create_new_interesting_node(head, stmt, node, argnum, intentional_asm);
++ break;
++ case GIMPLE_PHI: {
++ tree result = gimple_phi_result(stmt);
++ head = get_interesting_ret_or_call(visited, head, result, intentional_asm);
++ break;
++ }
++ case GIMPLE_ASM:
++ if (gimple_asm_noutputs(stmt) != 0)
++ break;
++ if (!is_size_overflow_asm(stmt))
++ break;
++ head = create_new_interesting_node(head, stmt, node, 1, intentional_asm);
++ break;
++ case GIMPLE_COND:
++ case GIMPLE_SWITCH:
++ break;
++ default:
++ debug_gimple_stmt(stmt);
++ gcc_unreachable();
++ break;
++ }
++ }
++ return head;
++}
++
++static void remove_size_overflow_asm(gimple stmt)
++{
++ gimple_stmt_iterator gsi;
++
++ gcc_assert(gimple_code(stmt) == GIMPLE_ASM);
++ gsi = gsi_for_stmt(stmt);
++ gsi_remove(&gsi, true);
++}
++
++/* handle the size_overflow asm stmts from the gimple pass and collect the interesting stmts.
++ * If the asm stmt is a parm_decl kind (noutputs == 0) then remove it.
++ * If it is a simple asm stmt then replace it with an assignment from the asm input to the asm output.
++ */
++static struct interesting_node *handle_stmt_by_size_overflow_asm(gimple stmt, struct interesting_node *head)
++{
++ const_tree output, input;
+ struct pointer_set_t *visited;
-+ enum mark is_marked, is_found;
-+ location_t loc;
-+ bool search_err_code[2] = {true, false};
++ gimple intentional_asm = NOT_INTENTIONAL_ASM;
+
-+ is_marked = mark_status(current_function_decl, 0);
-+ if (is_marked == MARK_TURN_OFF)
-+ return true;
++ if (!is_size_overflow_asm(stmt))
++ return head;
+
-+ is_marked = mark_status(fndecl, argnum + 1);
-+ if (is_marked == MARK_TURN_OFF || is_marked == MARK_NOT_INTENTIONAL)
-+ return true;
++ if (is_size_overflow_intentional_asm_yes(stmt) || is_size_overflow_intentional_asm_turn_off(stmt))
++ intentional_asm = stmt;
++
++ gcc_assert(gimple_asm_ninputs(stmt) == 1);
++ input = gimple_asm_input_op(stmt, 0);
++
++ if (gimple_asm_noutputs(stmt) == 0) {
++ remove_size_overflow_asm(stmt);
++ if (is_gimple_constant(TREE_VALUE(input)))
++ return head;
++
++ visited = pointer_set_create();
++ head = get_interesting_ret_or_call(visited, head, TREE_VALUE(input), intentional_asm);
++ pointer_set_destroy(visited);
++ return head;
++ }
++
++ output = gimple_asm_output_op(stmt, 0);
++
++ if (!is_size_overflow_intentional_asm_yes(stmt) && !is_size_overflow_intentional_asm_turn_off(stmt))
++ replace_size_overflow_asm_with_assign(stmt, TREE_VALUE(output), TREE_VALUE(input));
+
+ visited = pointer_set_create();
-+ is_found = pre_expand(visited, search_err_code, arg);
++ head = get_interesting_ret_or_call(visited, head, TREE_VALUE(output), intentional_asm);
+ pointer_set_destroy(visited);
++ return head;
++}
+
-+ if (where == FROM_RET && search_err_code[CAST_ONLY] && search_err_code[FROM_CONST])
-+ return true;
++/* Iterate over all the stmts of a function and look for the size_overflow asm stmts (they were created in the gimple pass)
++ * or a call stmt or a return stmt and store them in the interesting_node list
++ */
++static struct interesting_node *collect_interesting_stmts(struct next_cgraph_node *next_node)
++{
++ basic_block bb;
++ struct interesting_node *head = NULL;
+
-+ if (where == FROM_ARG && skip_asm(arg))
-+ return true;
++ FOR_ALL_BB(bb) {
++ gimple_stmt_iterator gsi;
+
-+ if (is_found == MARK_TURN_OFF)
-+ return true;
++ for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi)) {
++ enum gimple_code code;
++ gimple stmt = gsi_stmt(gsi);
+
-+ if ((is_found == MARK_YES && is_marked == MARK_YES))
-+ return true;
++ code = gimple_code(stmt);
+
-+ if (is_found == MARK_YES) {
-+ loc = DECL_SOURCE_LOCATION(fndecl);
-+ inform(loc, "The intentional_overflow attribute is missing from +%s+%u+", get_asm_name(fndecl), argnum + 1);
-+ return true;
++ if (code == GIMPLE_ASM)
++ head = handle_stmt_by_size_overflow_asm(stmt, head);
++
++ if (!next_node)
++ continue;
++ if (code == GIMPLE_CALL)
++ head = handle_stmt_by_cgraph_nodes_call(head, stmt, next_node);
++ if (code == GIMPLE_RETURN)
++ head = handle_stmt_by_cgraph_nodes_ret(head, stmt, next_node);
++ }
++ }
++ return head;
++}
++
++static void set_current_function_decl(tree fndecl)
++{
++ gcc_assert(fndecl != NULL_TREE);
++
++ push_cfun(DECL_STRUCT_FUNCTION(fndecl));
++ calculate_dominance_info(CDI_DOMINATORS);
++ current_function_decl = fndecl;
++}
++
++static void unset_current_function_decl(void)
++{
++ free_dominance_info(CDI_DOMINATORS);
++ pop_cfun();
++ current_function_decl = NULL_TREE;
++}
++
++static void free_interesting_node(struct interesting_node *head)
++{
++ struct interesting_node *cur;
++
++ while (head) {
++ cur = head->next;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_free(tree, gc, head->last_nodes);
++#else
++ vec_free(head->last_nodes);
++#endif
++ free(head);
++ head = cur;
++ }
++}
++
++static struct visited *insert_visited_function(struct visited *head, struct interesting_node *cur_node)
++{
++ struct visited *new_visited;
++
++ new_visited = (struct visited *)xmalloc(sizeof(*new_visited));
++ new_visited->fndecl = cur_node->fndecl;
++ new_visited->num = cur_node->num;
++ new_visited->first_stmt = cur_node->first_stmt;
++ new_visited->next = NULL;
++
++ if (!head)
++ return new_visited;
++
++ new_visited->next = head;
++ return new_visited;
++}
++
++/* Check whether the function was already visited. If the fndecl, the arg count of the fndecl and the first_stmt (call or return) are same then
++ * it is a visited function.
++ */
++static bool is_visited_function(struct visited *head, struct interesting_node *cur_node)
++{
++ struct visited *cur;
++
++ if (!head)
++ return false;
++
++ for (cur = head; cur; cur = cur->next) {
++ if (!operand_equal_p(cur_node->fndecl, cur->fndecl, 0))
++ continue;
++ if (cur_node->num != cur->num)
++ continue;
++ if (cur_node->first_stmt == cur->first_stmt)
++ return true;
+ }
+ return false;
+}
+
-+static void handle_function_arg(gimple stmt, tree fndecl, unsigned int argnum)
++static void free_next_cgraph_node(struct next_cgraph_node *head)
++{
++ struct next_cgraph_node *cur;
++
++ while (head) {
++ cur = head->next;
++ free(head);
++ head = cur;
++ }
++}
++
++/* Main recursive walk of the ipa pass: iterate over the collected interesting stmts in a function
++ * (they are interesting if they have an associated size_overflow asm stmt) and recursively walk
++ * the newly collected interesting functions (they are interesting if there is control flow between
++ * the interesting stmts and them).
++ */
++static struct visited *handle_function(struct cgraph_node *node, struct next_cgraph_node *next_node, struct visited *visited)
++{
++ struct interesting_node *head, *cur_node;
++ struct next_cgraph_node *cur_cnodes, *cnodes_head = NULL;
++
++#if BUILDING_GCC_VERSION <= 4007
++ set_current_function_decl(node->decl);
++#else
++ set_current_function_decl(node->symbol.decl);
++#endif
++ call_count = 0;
++
++ head = collect_interesting_stmts(next_node);
++ for (cur_node = head; cur_node; cur_node = cur_node->next) {
++ if (is_visited_function(visited, cur_node))
++ continue;
++ cnodes_head = handle_interesting_stmt(cnodes_head, cur_node, node);
++ visited = insert_visited_function(visited, cur_node);
++ }
++
++ free_interesting_node(head);
++ unset_current_function_decl();
++
++ for (cur_cnodes = cnodes_head; cur_cnodes; cur_cnodes = cur_cnodes->next)
++ visited = handle_function(cur_cnodes->current_function, cur_cnodes, visited);
++
++ free_next_cgraph_node(cnodes_head);
++ return visited;
++}
++
++static void free_visited(struct visited *head)
++{
++ struct visited *cur;
++
++ while (head) {
++ cur = head->next;
++ free(head);
++ head = cur;
++ }
++}
++
++// erase the local flag
++static void set_plf_false(void)
+{
++ basic_block bb;
++
++ FOR_ALL_BB(bb) {
++ gimple_stmt_iterator si;
++
++ for (si = gsi_start_bb(bb); !gsi_end_p(si); gsi_next(&si))
++ gimple_set_plf(gsi_stmt(si), MY_STMT, false);
++ for (si = gsi_start_phis(bb); !gsi_end_p(si); gsi_next(&si))
++ gimple_set_plf(gsi_stmt(si), MY_STMT, false);
++ }
++}
++
++#if BUILDING_GCC_VERSION <= 4006
++static bool cgraph_function_with_gimple_body_p(struct cgraph_node *node)
++{
++ return node->analyzed && !node->thunk.thunk_p && !node->alias;
++}
++
++static struct cgraph_node *cgraph_first_function_with_gimple_body(void)
++{
++ struct cgraph_node *node;
++
++ for (node = cgraph_nodes; node; node = node->next) {
++ if (cgraph_function_with_gimple_body_p(node))
++ return node;
++ }
++ return NULL;
++}
++
++static inline struct cgraph_node *cgraph_next_function_with_gimple_body(struct cgraph_node *node)
++{
++ for (node = node->next; node; node = node->next) {
++ if (cgraph_function_with_gimple_body_p(node))
++ return node;
++ }
++ return NULL;
++}
++
++#define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
++ for ((node) = cgraph_first_function_with_gimple_body (); (node); \
++ (node) = cgraph_next_function_with_gimple_body (node))
++
++#endif
++
++// Main entry point of the ipa pass: erases the plf flag of all stmts and iterates over all the functions
++static unsigned int search_function(void)
++{
++ struct cgraph_node *node;
++ struct visited *visited = NULL;
++
++ FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) {
++#if BUILDING_GCC_VERSION <= 4007
++ set_current_function_decl(node->decl);
++#else
++ set_current_function_decl(node->symbol.decl);
++#endif
++ set_plf_false();
++ unset_current_function_decl();
++ }
++
++ FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) {
++ gcc_assert(cgraph_function_flags_ready);
++#if BUILDING_GCC_VERSION <= 4007
++ gcc_assert(node->reachable);
++#endif
++
++ visited = handle_function(node, NULL, visited);
++ }
++
++ free_visited(visited);
++ return 0;
++}
++
++static struct ipa_opt_pass_d pass_ipa = {
++ .pass = {
++ .type = SIMPLE_IPA_PASS,
++ .name = "size_overflow",
++#if BUILDING_GCC_VERSION >= 4008
++ .optinfo_flags = OPTGROUP_NONE,
++#endif
++ .gate = NULL,
++ .execute = search_function,
++ .sub = NULL,
++ .next = NULL,
++ .static_pass_number = 0,
++ .tv_id = TV_NONE,
++ .properties_required = 0,
++ .properties_provided = 0,
++ .properties_destroyed = 0,
++ .todo_flags_start = 0,
++ .todo_flags_finish = TODO_verify_ssa | TODO_verify_stmts | TODO_remove_unused_locals | TODO_ggc_collect | TODO_verify_flow | TODO_dump_cgraph | TODO_dump_func | TODO_update_ssa_no_phi,
++ },
++ .generate_summary = NULL,
++ .write_summary = NULL,
++ .read_summary = NULL,
++#if BUILDING_GCC_VERSION >= 4006
++ .write_optimization_summary = NULL,
++ .read_optimization_summary = NULL,
++#endif
++ .stmt_fixup = NULL,
++ .function_transform_todo_flags_start = 0,
++ .function_transform = NULL,
++ .variable_transform = NULL,
++};
++
++// data for the size_overflow asm stmt
++struct asm_data {
++ gimple def_stmt;
++ tree input;
++ tree output;
++};
++
++#if BUILDING_GCC_VERSION <= 4007
++static VEC(tree, gc) *create_asm_io_list(tree string, tree io)
++#else
++static vec<tree, va_gc> *create_asm_io_list(tree string, tree io)
++#endif
++{
++ tree list;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC(tree, gc) *vec_list = NULL;
++#else
++ vec<tree, va_gc> *vec_list = NULL;
++#endif
++
++ list = build_tree_list(NULL_TREE, string);
++ list = chainon(NULL_TREE, build_tree_list(list, io));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, vec_list, list);
++#else
++ vec_safe_push(vec_list, list);
++#endif
++ return vec_list;
++}
++
++static void create_asm_stmt(const char *str, tree str_input, tree str_output, struct asm_data *asm_data)
++{
++ gimple asm_stmt;
++ gimple_stmt_iterator gsi;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC(tree, gc) *input, *output = NULL;
++#else
++ vec<tree, va_gc> *input, *output = NULL;
++#endif
++
++ input = create_asm_io_list(str_input, asm_data->input);
++
++ if (asm_data->output)
++ output = create_asm_io_list(str_output, asm_data->output);
++
++ asm_stmt = gimple_build_asm_vec(str, input, output, NULL, NULL);
++ gsi = gsi_for_stmt(asm_data->def_stmt);
++ gsi_insert_after(&gsi, asm_stmt, GSI_NEW_STMT);
++
++ if (asm_data->output)
++ SSA_NAME_DEF_STMT(asm_data->output) = asm_stmt;
++}
++
++static void replace_call_lhs(const struct asm_data *asm_data)
++{
++ gimple_set_lhs(asm_data->def_stmt, asm_data->input);
++ update_stmt(asm_data->def_stmt);
++ SSA_NAME_DEF_STMT(asm_data->input) = asm_data->def_stmt;
++}
++
++static enum mark search_intentional_phi(struct pointer_set_t *visited, const_tree result)
++{
++ enum mark cur_fndecl_attr;
++ gimple phi = get_def_stmt(result);
++ unsigned int i, n = gimple_phi_num_args(phi);
++
++ pointer_set_insert(visited, phi);
++ for (i = 0; i < n; i++) {
++ tree arg = gimple_phi_arg_def(phi, i);
++
++ cur_fndecl_attr = search_intentional(visited, arg);
++ if (cur_fndecl_attr != MARK_NO)
++ return cur_fndecl_attr;
++ }
++ return MARK_NO;
++}
++
++static enum mark search_intentional_binary(struct pointer_set_t *visited, const_tree lhs)
++{
++ enum mark cur_fndecl_attr;
++ const_tree rhs1, rhs2;
++ gimple def_stmt = get_def_stmt(lhs);
++
++ rhs1 = gimple_assign_rhs1(def_stmt);
++ rhs2 = gimple_assign_rhs2(def_stmt);
++
++ cur_fndecl_attr = search_intentional(visited, rhs1);
++ if (cur_fndecl_attr != MARK_NO)
++ return cur_fndecl_attr;
++ return search_intentional(visited, rhs2);
++}
++
++// Look up the intentional_overflow attribute on the caller and the callee functions.
++static enum mark search_intentional(struct pointer_set_t *visited, const_tree lhs)
++{
++ const_gimple def_stmt;
++
++ if (TREE_CODE(lhs) != SSA_NAME)
++ return get_intentional_attr_type(lhs);
++
++ def_stmt = get_def_stmt(lhs);
++ if (!def_stmt)
++ return MARK_NO;
++
++ if (pointer_set_contains(visited, def_stmt))
++ return MARK_NO;
++
++ switch (gimple_code(def_stmt)) {
++ case GIMPLE_NOP:
++ return search_intentional(visited, SSA_NAME_VAR(lhs));
++ case GIMPLE_ASM:
++ case GIMPLE_CALL:
++ return MARK_NO;
++ case GIMPLE_PHI:
++ return search_intentional_phi(visited, lhs);
++ case GIMPLE_ASSIGN:
++ switch (gimple_num_ops(def_stmt)) {
++ case 2:
++ return search_intentional(visited, gimple_assign_rhs1(def_stmt));
++ case 3:
++ return search_intentional_binary(visited, lhs);
++ }
++ case GIMPLE_RETURN:
++ return MARK_NO;
++ default:
++ debug_gimple_stmt((gimple)def_stmt);
++ error("%s: unknown gimple code", __func__);
++ gcc_unreachable();
++ }
++}
++
++// Check the intentional_overflow attribute and create the asm comment string for the size_overflow asm stmt.
++static const char *check_intentional_attribute_gimple(const_tree arg, const_gimple stmt, unsigned int argnum)
++{
++ const_tree fndecl;
++ const char *asm_str;
+ struct pointer_set_t *visited;
-+ tree arg, new_arg;
-+ bool match;
++ enum mark cur_fndecl_attr, decl_attr = MARK_NO;
+
-+ if (argnum == 0)
++ fndecl = get_interesting_orig_fndecl(stmt, argnum);
++ if (is_end_intentional_intentional_attr(fndecl, argnum))
++ decl_attr = MARK_NOT_INTENTIONAL;
++ else if (is_yes_intentional_attr(fndecl, argnum))
++ decl_attr = MARK_YES;
++ else if (is_turn_off_intentional_attr(fndecl) || is_turn_off_intentional_attr(DECL_ORIGIN(current_function_decl))) {
++ return "# size_overflow MARK_TURN_OFF\n\t";
++ }
++
++ visited = pointer_set_create();
++ cur_fndecl_attr = search_intentional(visited, arg);
++ pointer_set_destroy(visited);
++
++ switch (cur_fndecl_attr) {
++ case MARK_NO:
++ asm_str = "# size_overflow\n\t";
++ break;
++ case MARK_TURN_OFF:
++ asm_str = "# size_overflow MARK_TURN_OFF\n\t";
++ break;
++ default:
++ asm_str = "# size_overflow MARK_YES\n\t";
++ print_missing_intentional(decl_attr, cur_fndecl_attr, fndecl, argnum);
++ break;
++ }
++
++ return asm_str;
++}
++
++static void check_missing_size_overflow_attribute(tree var)
++{
++ tree orig_fndecl;
++ unsigned int num;
++
++ if (is_a_return_check(var))
++ orig_fndecl = DECL_ORIGIN(var);
++ else
++ orig_fndecl = DECL_ORIGIN(current_function_decl);
++
++ num = get_function_num(var, orig_fndecl);
++ if (num == CANNOT_FIND_ARG)
+ return;
+
-+ argnum--;
++ is_missing_function(orig_fndecl, num);
++}
++
++static void search_size_overflow_attribute_phi(struct pointer_set_t *visited, const_tree result)
++{
++ gimple phi = get_def_stmt(result);
++ unsigned int i, n = gimple_phi_num_args(phi);
++
++ pointer_set_insert(visited, phi);
++ for (i = 0; i < n; i++) {
++ tree arg = gimple_phi_arg_def(phi, i);
+
-+ match = get_function_arg(&argnum, fndecl);
-+ if (!match)
++ search_size_overflow_attribute(visited, arg);
++ }
++}
++
++static void search_size_overflow_attribute_binary(struct pointer_set_t *visited, const_tree lhs)
++{
++ const_gimple def_stmt = get_def_stmt(lhs);
++ tree rhs1, rhs2;
++
++ rhs1 = gimple_assign_rhs1(def_stmt);
++ rhs2 = gimple_assign_rhs2(def_stmt);
++
++ search_size_overflow_attribute(visited, rhs1);
++ search_size_overflow_attribute(visited, rhs2);
++}
++
++static void search_size_overflow_attribute(struct pointer_set_t *visited, tree lhs)
++{
++ const_gimple def_stmt;
++
++ if (TREE_CODE(lhs) == PARM_DECL) {
++ check_missing_size_overflow_attribute(lhs);
+ return;
-+ gcc_assert(gimple_call_num_args(stmt) > argnum);
-+ arg = gimple_call_arg(stmt, argnum);
-+ if (arg == NULL_TREE)
++ }
++
++ def_stmt = get_def_stmt(lhs);
++ if (!def_stmt)
+ return;
+
-+ if (skip_types(arg))
++ if (pointer_set_insert(visited, def_stmt))
+ return;
+
-+ if (search_attributes(fndecl, arg, argnum, FROM_ARG))
++ switch (gimple_code(def_stmt)) {
++ case GIMPLE_NOP:
++ return search_size_overflow_attribute(visited, SSA_NAME_VAR(lhs));
++ case GIMPLE_ASM:
++ return;
++ case GIMPLE_CALL: {
++ tree fndecl = gimple_call_fndecl(def_stmt);
++
++ if (fndecl == NULL_TREE)
++ return;
++ check_missing_size_overflow_attribute(fndecl);
++ return;
++ }
++ case GIMPLE_PHI:
++ return search_size_overflow_attribute_phi(visited, lhs);
++ case GIMPLE_ASSIGN:
++ switch (gimple_num_ops(def_stmt)) {
++ case 2:
++ return search_size_overflow_attribute(visited, gimple_assign_rhs1(def_stmt));
++ case 3:
++ return search_size_overflow_attribute_binary(visited, lhs);
++ }
++ default:
++ debug_gimple_stmt((gimple)def_stmt);
++ error("%s: unknown gimple code", __func__);
++ gcc_unreachable();
++ }
++}
++
++// Search missing entries in the hash table (invoked from the gimple pass)
++static void search_missing_size_overflow_attribute_gimple(const_gimple stmt, unsigned int num)
++{
++ tree fndecl = NULL_TREE;
++ tree lhs;
++ struct pointer_set_t *visited;
++
++ if (is_turn_off_intentional_attr(DECL_ORIGIN(current_function_decl)))
++ return;
++
++ if (num == 0) {
++ gcc_assert(gimple_code(stmt) == GIMPLE_RETURN);
++ lhs = gimple_return_retval(stmt);
++ } else {
++ gcc_assert(is_gimple_call(stmt));
++ lhs = gimple_call_arg(stmt, num - 1);
++ fndecl = gimple_call_fndecl(stmt);
++ }
++
++ if (fndecl != NULL_TREE && is_turn_off_intentional_attr(DECL_ORIGIN(fndecl)))
+ return;
+
+ visited = pointer_set_create();
-+ new_arg = expand(visited, arg);
++ search_size_overflow_attribute(visited, lhs);
+ pointer_set_destroy(visited);
++}
++
++static void create_output_from_phi(gimple stmt, unsigned int argnum, struct asm_data *asm_data)
++{
++ gimple_stmt_iterator gsi;
++ gimple assign;
++
++ assign = gimple_build_assign(asm_data->input, asm_data->output);
++ gsi = gsi_for_stmt(stmt);
++ gsi_insert_before(&gsi, assign, GSI_NEW_STMT);
++ asm_data->def_stmt = assign;
++
++ asm_data->output = create_new_var(TREE_TYPE(asm_data->output));
++ asm_data->output = make_ssa_name(asm_data->output, stmt);
++ if (gimple_code(stmt) == GIMPLE_RETURN)
++ gimple_return_set_retval(stmt, asm_data->output);
++ else
++ gimple_call_set_arg(stmt, argnum - 1, asm_data->output);
++ update_stmt(stmt);
++}
+
-+ if (new_arg == NULL_TREE)
++/* Create the input of the size_overflow asm stmt.
++ * When the arg of the callee function is a parm_decl it creates this kind of size_overflow asm stmt:
++ * __asm__("# size_overflow MARK_YES" : : "rm" size_1(D));
++ * The input field in asm_data will be empty if there is no need for further size_overflow asm stmt insertion.
++ * otherwise create the input (for a phi stmt the output too) of the asm stmt.
++ */
++static void create_asm_input(gimple stmt, unsigned int argnum, struct asm_data *asm_data)
++{
++ if (!asm_data->def_stmt) {
++ asm_data->input = NULL_TREE;
+ return;
++ }
++
++ asm_data->input = create_new_var(TREE_TYPE(asm_data->output));
++ asm_data->input = make_ssa_name(asm_data->input, asm_data->def_stmt);
++
++ switch (gimple_code(asm_data->def_stmt)) {
++ case GIMPLE_ASSIGN:
++ case GIMPLE_CALL:
++ replace_call_lhs(asm_data);
++ break;
++ case GIMPLE_PHI:
++ create_output_from_phi(stmt, argnum, asm_data);
++ break;
++ case GIMPLE_NOP: {
++ const char *str = check_intentional_attribute_gimple(asm_data->output, stmt, argnum);
++
++ asm_data->input = asm_data->output;
++ asm_data->output = NULL;
++ asm_data->def_stmt = stmt;
+
-+ change_function_arg(stmt, arg, argnum, new_arg);
-+ check_size_overflow(stmt, TREE_TYPE(new_arg), new_arg, arg, BEFORE_STMT);
++ create_asm_stmt(str, build_string(2, "rm"), NULL, asm_data);
++ asm_data->input = NULL_TREE;
++ break;
++ }
++ case GIMPLE_ASM:
++ if (is_size_overflow_asm(asm_data->def_stmt)) {
++ asm_data->input = NULL_TREE;
++ break;
++ }
++ default:
++ debug_gimple_stmt(asm_data->def_stmt);
++ gcc_unreachable();
++ }
+}
+
-+static void handle_function_by_attribute(gimple stmt, const_tree attr, tree fndecl)
++/* This is the gimple part of searching for a missing size_overflow attribute. If the intentional_overflow attribute type
++ * is of the right kind create the appropriate size_overflow asm stmts:
++ * __asm__("# size_overflow" : =rm" D.3344_8 : "0" cicus.4_16);
++ * __asm__("# size_overflow MARK_YES" : : "rm" size_1(D));
++ */
++static void create_size_overflow_asm(gimple stmt, tree output_node, unsigned int argnum)
+{
-+ tree p = TREE_VALUE(attr);
-+ do {
-+ handle_function_arg(stmt, fndecl, TREE_INT_CST_LOW(TREE_VALUE(p)));
-+ p = TREE_CHAIN(p);
-+ } while (p);
++ struct asm_data asm_data;
++ const char *str;
++
++ if (is_gimple_constant(output_node))
++ return;
++
++ search_missing_size_overflow_attribute_gimple(stmt, argnum);
++
++ asm_data.output = output_node;
++ asm_data.def_stmt = get_def_stmt(asm_data.output);
++ create_asm_input(stmt, argnum, &asm_data);
++ if (asm_data.input == NULL_TREE)
++ return;
++
++ str = check_intentional_attribute_gimple(asm_data.output, stmt, argnum);
++ create_asm_stmt(str, build_string(1, "0"), build_string(3, "=rm"), &asm_data);
++}
++
++// Determine the return value and insert the asm stmt to mark the return stmt.
++static void insert_asm_ret(gimple stmt)
++{
++ tree ret;
++
++ ret = gimple_return_retval(stmt);
++ create_size_overflow_asm(stmt, ret, 0);
++}
++
++// Determine the correct arg index and arg and insert the asm stmt to mark the stmt.
++static void insert_asm_arg(gimple stmt, unsigned int orig_argnum)
++{
++ tree arg;
++ unsigned int argnum;
++
++ argnum = get_correct_arg_count(orig_argnum, gimple_call_fndecl(stmt));
++ gcc_assert(argnum != 0);
++ if (argnum == CANNOT_FIND_ARG)
++ return;
++
++ arg = gimple_call_arg(stmt, argnum - 1);
++ gcc_assert(arg != NULL_TREE);
++ create_size_overflow_asm(stmt, arg, argnum);
++}
++
++// If a function arg or the return value is marked by the size_overflow attribute then set its index in the array.
++static void set_argnum_attribute(const_tree attr, bool *argnums)
++{
++ unsigned int argnum;
++ tree attr_value;
++
++ for (attr_value = TREE_VALUE(attr); attr_value; attr_value = TREE_CHAIN(attr_value)) {
++ argnum = TREE_INT_CST_LOW(TREE_VALUE(attr_value));
++ argnums[argnum] = true;
++ }
+}
+
-+static void handle_function_by_hash(gimple stmt, tree fndecl)
++// If a function arg or the return value is in the hash table then set its index in the array.
++static void set_argnum_hash(tree fndecl, bool *argnums)
+{
+ unsigned int num;
+ const struct size_overflow_hash *hash;
+
-+ hash = get_function_hash(fndecl);
++ hash = get_function_hash(DECL_ORIGIN(fndecl));
+ if (!hash)
+ return;
+
-+ for (num = 0; num <= MAX_PARAM; num++)
-+ if (hash->param & (1U << num))
-+ handle_function_arg(stmt, fndecl, num);
++ for (num = 0; num <= MAX_PARAM; num++) {
++ if (!(hash->param & (1U << num)))
++ continue;
++
++ argnums[num] = true;
++ }
+}
+
-+static bool check_return_value(void)
++static bool is_all_the_argnums_empty(bool *argnums)
+{
-+ const struct size_overflow_hash *hash;
-+
-+ hash = get_function_hash(current_function_decl);
-+ if (!hash || !(hash->param & 1U << 0))
-+ return false;
++ unsigned int i;
+
++ for (i = 0; i <= MAX_PARAM; i++)
++ if (argnums[i])
++ return false;
+ return true;
+}
+
-+static void handle_return_value(gimple ret_stmt)
++// Check whether the arguments or the return value of the function are in the hash table or are marked by the size_overflow attribute.
++static void search_interesting_args(tree fndecl, bool *argnums)
+{
-+ struct pointer_set_t *visited;
-+ tree ret, new_ret;
++ const_tree attr;
+
-+ if (gimple_code(ret_stmt) != GIMPLE_RETURN)
++ set_argnum_hash(fndecl, argnums);
++ if (!is_all_the_argnums_empty(argnums))
+ return;
+
-+ ret = gimple_return_retval(ret_stmt);
++ attr = lookup_attribute("size_overflow", DECL_ATTRIBUTES(fndecl));
++ if (attr && TREE_VALUE(attr))
++ set_argnum_attribute(attr, argnums);
++}
+
-+ if (skip_types(ret))
-+ return;
++/*
++ * Look up the intentional_overflow attribute that turns off ipa based duplication
++ * on the callee function, if found insert an asm stmt with "MARK_TURN_OFF".
++ */
++static bool create_mark_turn_off_asm(gimple stmt)
++{
++ enum mark mark;
++ struct asm_data asm_data;
++ const_tree fndecl = gimple_call_fndecl(stmt);
+
-+ if (search_attributes(current_function_decl, ret, 0, FROM_RET))
-+ return;
++ mark = get_intentional_attr_type(DECL_ORIGIN(fndecl));
++ if (mark != MARK_TURN_OFF)
++ return false;
+
-+ visited = pointer_set_create();
-+ new_ret = expand(visited, ret);
-+ pointer_set_destroy(visited);
++ asm_data.input = gimple_call_lhs(stmt);
++ if (asm_data.input == NULL_TREE) {
++ asm_data.input = gimple_call_arg(stmt, 0);
++ if (is_gimple_constant(asm_data.input))
++ return false;
++ }
+
-+ change_function_return(ret_stmt, ret, new_ret);
-+ check_size_overflow(ret_stmt, TREE_TYPE(new_ret), new_ret, ret, BEFORE_STMT);
++ asm_data.output = NULL;
++ asm_data.def_stmt = stmt;
++ create_asm_stmt("# size_overflow MARK_TURN_OFF\n\t", build_string(2, "rm"), NULL, &asm_data);
++ return true;
+}
+
-+static void set_plf_false(void)
++// If the argument(s) of the callee function is/are in the hash table or are marked by an attribute then mark the call stmt with an asm stmt
++static void handle_interesting_function(gimple stmt)
+{
-+ basic_block bb;
++ unsigned int argnum;
++ tree fndecl;
++ bool orig_argnums[MAX_PARAM + 1] = {false};
+
-+ FOR_ALL_BB(bb) {
-+ gimple_stmt_iterator si;
++ if (gimple_call_num_args(stmt) == 0)
++ return;
++ fndecl = gimple_call_fndecl(stmt);
++ if (fndecl == NULL_TREE)
++ return;
++ fndecl = DECL_ORIGIN(fndecl);
+
-+ for (si = gsi_start_bb(bb); !gsi_end_p(si); gsi_next(&si))
-+ gimple_set_plf(gsi_stmt(si), MY_STMT, false);
-+ for (si = gsi_start_phis(bb); !gsi_end_p(si); gsi_next(&si))
-+ gimple_set_plf(gsi_stmt(si), MY_STMT, false);
-+ }
++ if (create_mark_turn_off_asm(stmt))
++ return;
++
++ search_interesting_args(fndecl, orig_argnums);
++
++ for (argnum = 1; argnum < MAX_PARAM; argnum++)
++ if (orig_argnums[argnum])
++ insert_asm_arg(stmt, argnum);
+}
+
-+static unsigned int handle_function(void)
++// If the return value of the caller function is in hash table (its index is 0) then mark the return stmt with an asm stmt
++static void handle_interesting_ret(gimple stmt)
+{
-+ basic_block next, bb = ENTRY_BLOCK_PTR->next_bb;
-+ bool check_ret;
++ bool orig_argnums[MAX_PARAM + 1] = {false};
+
-+ set_plf_false();
++ search_interesting_args(current_function_decl, orig_argnums);
+
-+ check_ret = check_return_value();
++ if (orig_argnums[0])
++ insert_asm_ret(stmt);
++}
+
-+ do {
++// Iterate over all the stmts and search for call and return stmts and mark them if they're in the hash table
++static unsigned int search_interesting_functions(void)
++{
++ basic_block bb;
++
++ FOR_ALL_BB(bb) {
+ gimple_stmt_iterator gsi;
-+ next = bb->next_bb;
+
+ for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi)) {
-+ tree fndecl, attr;
+ gimple stmt = gsi_stmt(gsi);
+
-+ if (check_ret)
-+ handle_return_value(stmt);
-+
-+ if (!(is_gimple_call(stmt)))
-+ continue;
-+ fndecl = gimple_call_fndecl(stmt);
-+ if (fndecl == NULL_TREE)
-+ continue;
-+ if (gimple_call_num_args(stmt) == 0)
-+ continue;
-+ attr = lookup_attribute("size_overflow", DECL_ATTRIBUTES(fndecl));
-+ if (!attr || !TREE_VALUE(attr))
-+ handle_function_by_hash(stmt, fndecl);
-+ else
-+ handle_function_by_attribute(stmt, attr, fndecl);
-+ gsi = gsi_for_stmt(stmt);
-+ next = gimple_bb(stmt)->next_bb;
++ if (is_gimple_call(stmt))
++ handle_interesting_function(stmt);
++ else if (gimple_code(stmt) == GIMPLE_RETURN)
++ handle_interesting_ret(stmt);
+ }
-+ bb = next;
-+ } while (bb);
++ }
+ return 0;
+}
+
-+static struct gimple_opt_pass size_overflow_pass = {
++/*
++ * A lot of functions get inlined before the ipa passes so after the build_ssa gimple pass
++ * this pass inserts asm stmts to mark the interesting args
++ * that the ipa pass will detect and insert the size overflow checks for.
++ */
++static struct gimple_opt_pass insert_size_overflow_asm_pass = {
+ .pass = {
+ .type = GIMPLE_PASS,
-+ .name = "size_overflow",
++ .name = "insert_size_overflow_asm",
+#if BUILDING_GCC_VERSION >= 4008
+ .optinfo_flags = OPTGROUP_NONE,
+#endif
+ .gate = NULL,
-+ .execute = handle_function,
++ .execute = search_interesting_functions,
+ .sub = NULL,
+ .next = NULL,
+ .static_pass_number = 0,
@@ -111014,6 +114427,7 @@ index 0000000..03d0c84
+ }
+};
+
++// Create the noreturn report_size_overflow() function decl.
+static void start_unit_callback(void __unused *gcc_data, void __unused *user_data)
+{
+ tree fntype;
@@ -111036,6 +114450,77 @@ index 0000000..03d0c84
+ TREE_THIS_VOLATILE(report_size_overflow_decl) = 1;
+}
+
++static unsigned int dump_functions(void)
++{
++ struct cgraph_node *node;
++
++ FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) {
++ basic_block bb;
++
++#if BUILDING_GCC_VERSION <= 4007
++ push_cfun(DECL_STRUCT_FUNCTION(node->decl));
++ current_function_decl = node->decl;
++#else
++ push_cfun(DECL_STRUCT_FUNCTION(node->symbol.decl));
++ current_function_decl = node->symbol.decl;
++#endif
++
++ fprintf(stderr, "-----------------------------------------\n%s\n-----------------------------------------\n", NAME(current_function_decl));
++
++ FOR_ALL_BB(bb) {
++ gimple_stmt_iterator si;
++
++ fprintf(stderr, "<bb %u>:\n", bb->index);
++ for (si = gsi_start_phis(bb); !gsi_end_p(si); gsi_next(&si))
++ debug_gimple_stmt(gsi_stmt(si));
++ for (si = gsi_start_bb(bb); !gsi_end_p(si); gsi_next(&si))
++ debug_gimple_stmt(gsi_stmt(si));
++ fprintf(stderr, "\n");
++ }
++
++ fprintf(stderr, "-------------------------------------------------------------------------\n");
++
++ pop_cfun();
++ current_function_decl = NULL_TREE;
++ }
++
++ fprintf(stderr, "###############################################################################\n");
++
++ return 0;
++}
++
++static struct ipa_opt_pass_d pass_dump = {
++ .pass = {
++ .type = SIMPLE_IPA_PASS,
++ .name = "dump",
++#if BUILDING_GCC_VERSION >= 4008
++ .optinfo_flags = OPTGROUP_NONE,
++#endif
++ .gate = NULL,
++ .execute = dump_functions,
++ .sub = NULL,
++ .next = NULL,
++ .static_pass_number = 0,
++ .tv_id = TV_NONE,
++ .properties_required = 0,
++ .properties_provided = 0,
++ .properties_destroyed = 0,
++ .todo_flags_start = 0,
++ .todo_flags_finish = 0,
++ },
++ .generate_summary = NULL,
++ .write_summary = NULL,
++ .read_summary = NULL,
++#if BUILDING_GCC_VERSION >= 4006
++ .write_optimization_summary = NULL,
++ .read_optimization_summary = NULL,
++#endif
++ .stmt_fixup = NULL,
++ .function_transform_todo_flags_start = 0,
++ .function_transform = NULL,
++ .variable_transform = NULL,
++};
++
+int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version)
+{
+ int i;
@@ -111044,13 +114529,34 @@ index 0000000..03d0c84
+ const struct plugin_argument * const argv = plugin_info->argv;
+ bool enable = true;
+
-+ struct register_pass_info size_overflow_pass_info = {
-+ .pass = &size_overflow_pass.pass,
++ struct register_pass_info insert_size_overflow_asm_pass_info = {
++ .pass = &insert_size_overflow_asm_pass.pass,
+ .reference_pass_name = "ssa",
+ .ref_pass_instance_number = 1,
+ .pos_op = PASS_POS_INSERT_AFTER
+ };
+
++ struct register_pass_info __unused dump_before_pass_info = {
++ .pass = &pass_dump.pass,
++ .reference_pass_name = "increase_alignment",
++ .ref_pass_instance_number = 1,
++ .pos_op = PASS_POS_INSERT_BEFORE
++ };
++
++ struct register_pass_info ipa_pass_info = {
++ .pass = &pass_ipa.pass,
++ .reference_pass_name = "increase_alignment",
++ .ref_pass_instance_number = 1,
++ .pos_op = PASS_POS_INSERT_BEFORE
++ };
++
++ struct register_pass_info __unused dump_after_pass_info = {
++ .pass = &pass_dump.pass,
++ .reference_pass_name = "increase_alignment",
++ .ref_pass_instance_number = 1,
++ .pos_op = PASS_POS_INSERT_BEFORE
++ };
++
+ if (!plugin_default_version_check(version, &gcc_version)) {
+ error(G_("incompatible gcc/plugin versions"));
+ return 1;
@@ -111067,7 +114573,10 @@ index 0000000..03d0c84
+ register_callback(plugin_name, PLUGIN_INFO, NULL, &size_overflow_plugin_info);
+ if (enable) {
+ register_callback("start_unit", PLUGIN_START_UNIT, &start_unit_callback, NULL);
-+ register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &size_overflow_pass_info);
++ register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &insert_size_overflow_asm_pass_info);
++// register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &dump_before_pass_info);
++ register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &ipa_pass_info);
++// register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &dump_after_pass_info);
+ }
+ register_callback(plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL);
+