rendered paste bodydrivers/char/random.c:get_random_long(...)
before md4trans:entropycache_shared:e3cfd7f7:d0677364:47014d9d:9995eb5d:7ea55125:55bea2be:a429fcaf:4b744f91:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:811bf167:b8a0fcf3:c0a0c8a4:1818867a:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:e3cfd7f7:d0677364:47014d9d:9995eb5d:7ea55125:55bea2be:a429fcaf:4b744f91:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after md4trans:entropycache_pcpu:14fcab23:57482a5e:1c73f2b0:a8209604:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
drivers/char/random.c:get_random_long(...)
before md4trans:entropycache_shared:e3cfd7f7:d0677364:47014d9d:9995eb5d:7ea55125:55bea2be:a429fcaf:4b744f91:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:14fcab23:57482a5e:1c73f2b0:a8209604:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:e3cfd7f7:d0677364:47014d9d:9995eb5d:7ea55125:55bea2be:a429fcaf:4b744f91:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after md4trans:entropycache_pcpu:551ae9:efc689b9:272fc534:d356840d:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
drivers/char/random.c:rekey_seq_generator(...)
before randomize:entropycache_shared:e3cfd7f7:d0677364:47014d9d:9995eb5d:7ea55125:55bea2be:a429fcaf:4b744f91:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after randomize:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:551ae9:efc689b9:272fc534:d356840d:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_pcpu:e5550833:d3dce455:a5f920b:b84f5e72:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
drivers/char/random.c:get_random_long(...)
before md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:e5550833:d3dce455:a5f920b:b84f5e72:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after md4trans:entropycache_pcpu:65963e6b:645032ce:275108fc:445412a5:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
drivers/char/random.c:get_random_long(...)
before md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:65963e6b:645032ce:275108fc:445412a5:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after md4trans:entropycache_pcpu:f5b6b2f6:7279824c:de654c35:8eb4497b:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
drivers/char/random.c:get_random_long(...)
before md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
before md4trans:entropycache_pcpu:f5b6b2f6:7279824c:de654c35:8eb4497b:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
after md4trans:entropycache_shared:d9b39f2e:3cac980:23285652:37cd616f:31884f33:57186a6:3c684084:a3e92485:1:0:100:80:0:0:0:0:80:0:0:0:0:0:0:0:0:c04fc870:c04fb1c0:0:0:0:0:0
after md4trans:entropycache_pcpu:b7cf271:dca7dff2:546327c7:26997cb8:ffff0665:ffffffff:0:f99b:0:0:0:0:0:0:0:0
static void rekey_seq_generator(struct work_struct *work)
{
int i;
struct keydata *keyptr = &ip_keydata[1 ^ (ip_cnt & 1)];
get_random_bytes(keyptr->secret, sizeof(keyptr->secret));
printk(KERN_INFO "drivers/char/random.c:rekey_seq_generator(...)\n");
printk(KERN_INFO "before randomize:entropycache_shared");
for (i=0; i < sizeof(entropycache_shared); i++) {
printk(":%x", entropycache_shared[i]);
}
printk("\n");
get_random_bytes(entropycache_shared, sizeof(entropycache_shared));
printk(KERN_INFO "after randomize:entropycache_shared");
for (i=0; i < sizeof(entropycache_shared); i++) {
printk(":%x", entropycache_shared[i]);
}
printk("\n");
printk(KERN_INFO "before md4trans:entropycache_pcpu");
for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
}
printk("\n");
half_md4_transform((u32 *)__get_cpu_var(entropycache_pcpu), entropycache_shared);
printk(KERN_INFO "after md4trans:entropycache_pcpu");
for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
}
printk("\n");
printk(KERN_INFO "after md4trans:entropycache_shared");
for (i=0; i < sizeof(entropycache_shared); i++) {
printk(":%x", entropycache_shared[i]);
}
printk("\n");
keyptr->count = (ip_cnt & COUNT_MASK) << HASH_BITS;
smp_wmb();
ip_cnt++;
schedule_delayed_work(&rekey_work, REKEY_INTERVAL);
}
unsigned long get_random_long(void)
{
int i;
printk(KERN_INFO "drivers/char/random.c:get_random_long(...)\n");
printk(KERN_INFO "before md4trans:entropycache_shared");
for (i=0; i < sizeof(entropycache_shared); i++) {
printk(":%x", entropycache_shared[i]);
}
printk("\n");
printk(KERN_INFO "before md4trans:entropycache_pcpu");
for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
}
printk("\n");
half_md4_transform((u32 *)__get_cpu_var(entropycache_pcpu), entropycache_shared);
printk(KERN_INFO "after md4trans:entropycache_shared");
for (i=0; i < sizeof(entropycache_shared); i++) {
printk(":%x", entropycache_shared[i]);
}
printk("\n");
printk(KERN_INFO "after md4trans:entropycache_pcpu");
for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
}
printk("\n");
return __get_cpu_var(entropycache_pcpu)[0];
}
diff -Nru linux-2.6.21.5.ORIG/drivers/char/random.c linux-2.6.21.5/drivers/char/random.c
--- linux-2.6.21.5.ORIG/drivers/char/random.c 2007-06-11 20:37:06.000000000 +0200
+++ linux-2.6.21.5/drivers/char/random.c 2007-06-24 16:54:42.000000000 +0200
@@ -437,6 +437,9 @@
.pool = nonblocking_pool_data
};
+static u32 entropycache_shared[8] __read_mostly;
+static DEFINE_PER_CPU(unsigned long , entropycache_pcpu)[16 / sizeof(unsigned long)];
+
/*
* This function adds a byte into the entropy "pool". It does not
* update the entropy estimate. The caller should call
@@ -1449,9 +1452,46 @@
*/
static void rekey_seq_generator(struct work_struct *work)
{
+ int i;
struct keydata *keyptr = &ip_keydata[1 ^ (ip_cnt & 1)];
-
get_random_bytes(keyptr->secret, sizeof(keyptr->secret));
+
+ printk(KERN_INFO "drivers/char/random.c:rekey_seq_generator(...)\n");
+
+ printk(KERN_INFO "before randomize:entropycache_shared");
+ for (i=0; i < sizeof(entropycache_shared); i++) {
+ printk(":%x", entropycache_shared[i]);
+ }
+ printk("\n");
+
+ get_random_bytes(entropycache_shared, sizeof(entropycache_shared));
+
+ printk(KERN_INFO "after randomize:entropycache_shared");
+ for (i=0; i < sizeof(entropycache_shared); i++) {
+ printk(":%x", entropycache_shared[i]);
+ }
+ printk("\n");
+
+ printk(KERN_INFO "before md4trans:entropycache_pcpu");
+ for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
+ printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
+ }
+ printk("\n");
+
+ half_md4_transform((u32 *)__get_cpu_var(entropycache_pcpu), entropycache_shared);
+
+ printk(KERN_INFO "after md4trans:entropycache_pcpu");
+ for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
+ printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
+ }
+ printk("\n");
+
+ printk(KERN_INFO "after md4trans:entropycache_shared");
+ for (i=0; i < sizeof(entropycache_shared); i++) {
+ printk(":%x", entropycache_shared[i]);
+ }
+ printk("\n");
+
keyptr->count = (ip_cnt & COUNT_MASK) << HASH_BITS;
smp_wmb();
ip_cnt++;
@@ -1653,6 +1693,41 @@
return secure_ip_id((__force __be32)(current->pid + jiffies));
}
+unsigned long get_random_long(void)
+{
+ int i;
+
+ printk(KERN_INFO "drivers/char/random.c:get_random_long(...)\n");
+
+ printk(KERN_INFO "before md4trans:entropycache_shared");
+ for (i=0; i < sizeof(entropycache_shared); i++) {
+ printk(":%x", entropycache_shared[i]);
+ }
+ printk("\n");
+
+ printk(KERN_INFO "before md4trans:entropycache_pcpu");
+ for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
+ printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
+ }
+ printk("\n");
+
+ half_md4_transform((u32 *)__get_cpu_var(entropycache_pcpu), entropycache_shared);
+
+ printk(KERN_INFO "after md4trans:entropycache_shared");
+ for (i=0; i < sizeof(entropycache_shared); i++) {
+ printk(":%x", entropycache_shared[i]);
+ }
+ printk("\n");
+
+ printk(KERN_INFO "after md4trans:entropycache_pcpu");
+ for (i=0; i < sizeof(__get_cpu_var(entropycache_pcpu)); i++) {
+ printk(":%lx", __get_cpu_var(entropycache_pcpu)[i]);
+ }
+ printk("\n");
+
+ return __get_cpu_var(entropycache_pcpu)[0];
+}
+
/*
* randomize_range() returns a start address such that
*
diff -Nru linux-2.6.21.5.ORIG/fs/binfmt_elf.c linux-2.6.21.5/fs/binfmt_elf.c
--- linux-2.6.21.5.ORIG/fs/binfmt_elf.c 2007-06-11 20:37:06.000000000 +0200
+++ linux-2.6.21.5/fs/binfmt_elf.c 2007-06-24 14:26:26.000000000 +0200
@@ -201,6 +201,8 @@
NEW_AUX_ENT(AT_GID, tsk->gid);
NEW_AUX_ENT(AT_EGID, tsk->egid);
NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm));
+ NEW_AUX_ENT(AT_ENTRO1, get_random_long());
+ NEW_AUX_ENT(AT_ENTRO2, get_random_long());
if (k_platform) {
NEW_AUX_ENT(AT_PLATFORM,
(elf_addr_t)(unsigned long)u_platform);
diff -Nru linux-2.6.21.5.ORIG/fs/binfmt_elf.c linux-2.6.21.5/fs/binfmt_elf.c
--- linux-2.6.21.5.ORIG/fs/binfmt_elf.c 2007-06-11 20:37:06.000000000 +0200
+++ linux-2.6.21.5/fs/binfmt_elf.c 2007-06-24 14:26:26.000000000 +0200
@@ -201,6 +201,8 @@
NEW_AUX_ENT(AT_GID, tsk->gid);
NEW_AUX_ENT(AT_EGID, tsk->egid);
NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm));
+ NEW_AUX_ENT(AT_ENTRO1, get_random_long());
+ NEW_AUX_ENT(AT_ENTRO2, get_random_long());
if (k_platform) {
NEW_AUX_ENT(AT_PLATFORM,
(elf_addr_t)(unsigned long)u_platform);
diff -Nru linux-2.6.21.5.ORIG/include/linux/auxvec.h linux-2.6.21.5/include/linux/auxvec.h
--- linux-2.6.21.5.ORIG/include/linux/auxvec.h 2007-06-11 20:37:06.000000000 +0200
+++ linux-2.6.21.5/include/linux/auxvec.h 2007-06-24 14:25:52.000000000 +0200
@@ -26,6 +26,9 @@
#define AT_SECURE 23 /* secure mode boolean */
-#define AT_VECTOR_SIZE 44 /* Size of auxiliary table. */
+#define AT_ENTRO1 24
+#define AT_ENTRO2 25
+
+#define AT_VECTOR_SIZE 46 /* Size of auxiliary table. */
#endif /* _LINUX_AUXVEC_H */
diff -Nru linux-2.6.21.5.ORIG/include/linux/random.h linux-2.6.21.5/include/linux/random.h
--- linux-2.6.21.5.ORIG/include/linux/random.h 2007-06-11 20:37:06.000000000 +0200
+++ linux-2.6.21.5/include/linux/random.h 2007-06-24 14:25:29.000000000 +0200
@@ -67,6 +67,7 @@
#endif
unsigned int get_random_int(void);
+unsigned long get_random_long(void);
unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len);
u32 random32(void);