diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2013-11-25 16:23:23 -0500 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2013-11-25 16:23:23 -0500 |
commit | ad78e98f9915054d3fd826482ebccc7021634c26 (patch) | |
tree | 364f478452ab3ed4ae0c0a75e774dc95c9647fe3 | |
parent | Grsec/PaX: 2.9.1-{3.2.52,3.11.9}-201311222137 (diff) | |
download | hardened-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_README | 2 | ||||
-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_README | 2 | ||||
-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", ¤t->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 = ©_gr_arg_wrapper_compat; -+ copy_gr_arg = ©_gr_arg_compat; -+ copy_acl_object_label = ©_acl_object_label_compat; -+ copy_acl_subject_label = ©_acl_subject_label_compat; -+ copy_acl_role_label = ©_acl_role_label_compat; -+ copy_acl_ip_label = ©_acl_ip_label_compat; -+ copy_role_allowed_ip = ©_role_allowed_ip_compat; -+ copy_role_transition = ©_role_transition_compat; -+ copy_sprole_pw = ©_sprole_pw_compat; -+ copy_gr_hash_struct = ©_gr_hash_struct_compat; -+ copy_pointer_from_array = ©_pointer_from_array_compat; -+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat; -+ } else { -+ copy_gr_arg_wrapper = ©_gr_arg_wrapper_normal; -+ copy_gr_arg = ©_gr_arg_normal; -+ copy_acl_object_label = ©_acl_object_label_normal; -+ copy_acl_subject_label = ©_acl_subject_label_normal; -+ copy_acl_role_label = ©_acl_role_label_normal; -+ copy_acl_ip_label = ©_acl_ip_label_normal; -+ copy_role_allowed_ip = ©_role_allowed_ip_normal; -+ copy_role_transition = ©_role_transition_normal; -+ copy_sprole_pw = ©_sprole_pw_normal; -+ copy_gr_hash_struct = ©_gr_hash_struct_normal; -+ copy_pointer_from_array = ©_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 = ©_gr_arg_wrapper_compat; ++ copy_gr_arg = ©_gr_arg_compat; ++ copy_acl_object_label = ©_acl_object_label_compat; ++ copy_acl_subject_label = ©_acl_subject_label_compat; ++ copy_acl_role_label = ©_acl_role_label_compat; ++ copy_acl_ip_label = ©_acl_ip_label_compat; ++ copy_role_allowed_ip = ©_role_allowed_ip_compat; ++ copy_role_transition = ©_role_transition_compat; ++ copy_sprole_pw = ©_sprole_pw_compat; ++ copy_gr_hash_struct = ©_gr_hash_struct_compat; ++ copy_pointer_from_array = ©_pointer_from_array_compat; ++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat; ++ } else { ++ copy_gr_arg_wrapper = ©_gr_arg_wrapper_normal; ++ copy_gr_arg = ©_gr_arg_normal; ++ copy_acl_object_label = ©_acl_object_label_normal; ++ copy_acl_subject_label = ©_acl_subject_label_normal; ++ copy_acl_role_label = ©_acl_role_label_normal; ++ copy_acl_ip_label = ©_acl_ip_label_normal; ++ copy_role_allowed_ip = ©_role_allowed_ip_normal; ++ copy_role_transition = ©_role_transition_normal; ++ copy_sprole_pw = ©_sprole_pw_normal; ++ copy_gr_hash_struct = ©_gr_hash_struct_normal; ++ copy_pointer_from_array = ©_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 = ©_gr_arg_wrapper_compat; -+ copy_gr_arg = ©_gr_arg_compat; -+ copy_acl_object_label = ©_acl_object_label_compat; -+ copy_acl_subject_label = ©_acl_subject_label_compat; -+ copy_acl_role_label = ©_acl_role_label_compat; -+ copy_acl_ip_label = ©_acl_ip_label_compat; -+ copy_role_allowed_ip = ©_role_allowed_ip_compat; -+ copy_role_transition = ©_role_transition_compat; -+ copy_sprole_pw = ©_sprole_pw_compat; -+ copy_gr_hash_struct = ©_gr_hash_struct_compat; -+ copy_pointer_from_array = ©_pointer_from_array_compat; -+ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat; -+ } else { -+ copy_gr_arg_wrapper = ©_gr_arg_wrapper_normal; -+ copy_gr_arg = ©_gr_arg_normal; -+ copy_acl_object_label = ©_acl_object_label_normal; -+ copy_acl_subject_label = ©_acl_subject_label_normal; -+ copy_acl_role_label = ©_acl_role_label_normal; -+ copy_acl_ip_label = ©_acl_ip_label_normal; -+ copy_role_allowed_ip = ©_role_allowed_ip_normal; -+ copy_role_transition = ©_role_transition_normal; -+ copy_sprole_pw = ©_sprole_pw_normal; -+ copy_gr_hash_struct = ©_gr_hash_struct_normal; -+ copy_pointer_from_array = ©_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 = ©_gr_arg_wrapper_compat; ++ copy_gr_arg = ©_gr_arg_compat; ++ copy_acl_object_label = ©_acl_object_label_compat; ++ copy_acl_subject_label = ©_acl_subject_label_compat; ++ copy_acl_role_label = ©_acl_role_label_compat; ++ copy_acl_ip_label = ©_acl_ip_label_compat; ++ copy_role_allowed_ip = ©_role_allowed_ip_compat; ++ copy_role_transition = ©_role_transition_compat; ++ copy_sprole_pw = ©_sprole_pw_compat; ++ copy_gr_hash_struct = ©_gr_hash_struct_compat; ++ copy_pointer_from_array = ©_pointer_from_array_compat; ++ get_gr_arg_wrapper_size = &get_gr_arg_wrapper_size_compat; ++ } else { ++ copy_gr_arg_wrapper = ©_gr_arg_wrapper_normal; ++ copy_gr_arg = ©_gr_arg_normal; ++ copy_acl_object_label = ©_acl_object_label_normal; ++ copy_acl_subject_label = ©_acl_subject_label_normal; ++ copy_acl_role_label = ©_acl_role_label_normal; ++ copy_acl_ip_label = ©_acl_ip_label_normal; ++ copy_role_allowed_ip = ©_role_allowed_ip_normal; ++ copy_role_transition = ©_role_transition_normal; ++ copy_sprole_pw = ©_sprole_pw_normal; ++ copy_gr_hash_struct = ©_gr_hash_struct_normal; ++ copy_pointer_from_array = ©_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(¤t->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(¤t->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 ©_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 ®_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 ®ister_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); + |