1 #include <linux/kernel.h>
4 #include <linux/string.h>
5 #include <linux/random.h>
6 #include <linux/module.h>
8 #include <linux/errno.h>
14 #include <asm/unistd.h>
33 static long kptr_obfuscate(
long v,
int type)
35 return (v ^ cookies[type][0]) * cookies[
type][1];
48 ret = kptr_obfuscate((
long)v1, type) - kptr_obfuscate((
long)v2, type);
50 return (ret < 0) | ((ret > 0) << 1);
63 file = fcheck_files(task->
files, idx);
71 static void kcmp_unlock(
struct mutex *m1,
struct mutex *m2)
78 static int kcmp_lock(
struct mutex *m1,
struct mutex *m2)
86 if (!err &&
likely(m1 != m2)) {
96 unsigned long, idx1,
unsigned long, idx2)
108 if (!task1 || !task2)
119 ret = kcmp_lock(&task1->
signal->cred_guard_mutex,
120 &task2->
signal->cred_guard_mutex);
131 struct file *filp1, *filp2;
133 filp1 = get_file_raw_ptr(task1, idx1);
134 filp2 = get_file_raw_ptr(task2, idx2);
158 #ifdef CONFIG_SYSVIPC
159 ret = kcmp_ptr(task1->sysvsem.undo_list,
160 task2->sysvsem.undo_list,
172 kcmp_unlock(&task1->
signal->cred_guard_mutex,
173 &task2->
signal->cred_guard_mutex);
175 put_task_struct(task1);
176 put_task_struct(task2);
185 static __init int kcmp_cookies_init(
void)
192 cookies[i][1] |= (~(~0
UL >> 1) | 1);