All pastes #587371 Raw Edit

Anonymous

public text v1 · immutable
#587371 ·published 2007-06-24 15:06 UTC
rendered paste body
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: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);