Author: archaic
Date: 2005-05-31 08:56:56 -0600 (Tue, 31 May 2005)
New Revision: 960

Added:
   trunk/hlfs/linux-2.6.11.11-pseudo_random-1.patch
   trunk/linux/linux-2.6.11.11-pseudo_random-1.patch
Removed:
   trunk/hlfs/linux-2.6.11.8-pseudo_random-1.patch
   trunk/linux/linux-2.6.11.8-pseudo_random-1.patch
Log:
Updated linux pseudo random patch to 2.6.11.11. (hlfs)

Copied: trunk/hlfs/linux-2.6.11.11-pseudo_random-1.patch (from rev 958, 
trunk/hlfs/linux-2.6.11.8-pseudo_random-1.patch)

Deleted: trunk/hlfs/linux-2.6.11.8-pseudo_random-1.patch
===================================================================
--- trunk/hlfs/linux-2.6.11.8-pseudo_random-1.patch     2005-05-31 14:54:41 UTC 
(rev 959)
+++ trunk/hlfs/linux-2.6.11.8-pseudo_random-1.patch     2005-05-31 14:56:56 UTC 
(rev 960)
@@ -1,617 +0,0 @@
-Submitted By: Robert Connolly <robert at linuxfromscratch dot org> (ashes)
-Date: 2005-03-04
-Initial Package Version: 2.6.11
-Upstream Status: Not submitted
-Origin: http://frandom.sourceforge.net/
-Description: This patch adds the he frandom, and erandom devices, and a
-sysctl interface for urandom. Udev's permissions need modifications to add
-/dev/frandom and /dev/erandom.
-
-Also see:
-http://www.linuxfromscratch.org/hlfs/
-http://www.linuxfromscratch.org/hints/downloads/files/entropy.txt
-
-diff -Naur linux-2.6.11.orig/drivers/char/Kconfig 
linux-2.6.11/drivers/char/Kconfig
---- linux-2.6.11.orig/drivers/char/Kconfig     2005-03-04 21:15:42.519856480 
+0000
-+++ linux-2.6.11/drivers/char/Kconfig  2005-03-04 21:15:47.952030664 +0000
-@@ -57,6 +57,19 @@
- 
-         If unsure, say Y.
- 
-+config FRANDOM
-+      tristate "Fast random data generator suite (/dev/frandom and 
/dev/erandom)"
-+      default y
-+      ---help---
-+      Fast random data/number generator support in kernel. This random
-+      generator is 10-50 times faster than /dev/urandom, and saves kernel
-+      entropy.
-+
-+      If unsure, say Y unless you're tight on kernel size. This module is
-+      small and harmless otherwise.
-+
-+      If you choose M, the sysctl interface will be disabled.
-+
- config HW_CONSOLE
-       bool
-       depends on VT && !S390 && !USERMODE
-diff -Naur linux-2.6.11.orig/drivers/char/Makefile 
linux-2.6.11/drivers/char/Makefile
---- linux-2.6.11.orig/drivers/char/Makefile    2005-03-04 21:15:42.529854960 
+0000
-+++ linux-2.6.11/drivers/char/Makefile 2005-03-04 21:15:47.952030664 +0000
-@@ -9,6 +9,8 @@
- 
- obj-y  += mem.o random.o tty_io.o n_tty.o tty_ioctl.o
- 
-+obj-$(CONFIG_FRANDOM)         += frandom.o
-+
- obj-$(CONFIG_LEGACY_PTYS)     += pty.o
- obj-$(CONFIG_UNIX98_PTYS)     += pty.o
- obj-y                         += misc.o
-diff -Naur linux-2.6.11.orig/drivers/char/frandom.c 
linux-2.6.11/drivers/char/frandom.c
---- linux-2.6.11.orig/drivers/char/frandom.c   1970-01-01 00:00:00.000000000 
+0000
-+++ linux-2.6.11/drivers/char/frandom.c        2005-03-04 21:15:47.953030512 
+0000
-@@ -0,0 +1,387 @@
-+/*
-+** frandom.c
-+**      Fast pseudo-random generator 
-+**
-+**      (c) Copyright 2003 Eli Billauer
-+**      http://www.billauer.co.il
-+**
-+** This program is free software; you can redistribute it and/or modify
-+** it under the terms of the GNU General Public License as published by
-+** the Free Software Foundation; either version 2 of the License, or
-+** (at your option) any later version.
-+**
-+** Usage: mknod /dev/frandom c 235 11
-+**        mknod /dev/erandom c 235 12
-+**        insmod frandom
-+**
-+** This code is highly based upon the examples given in the book "Linux
-+** Device Drivers" by Alessandro Rubini and Jonathan Corbet, published
-+** by O'Reilly & Associates.
-+** O'Reilly's release of this book on the web for free is highly
-+** appreciated.
-+**
-+*/
-+
-+#include <linux/version.h>
-+#include <linux/config.h>
-+#include <linux/module.h>
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/slab.h> 
-+#include <linux/fs.h> 
-+#include <linux/errno.h>
-+#include <linux/types.h> 
-+#include <linux/random.h>
-+
-+#include <linux/devfs_fs_kernel.h>
-+#include <linux/device.h>
-+
-+#include <asm/uaccess.h>
-+
-+#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,0))
-+#include <linux/moduleparam.h>
-+#endif
-+
-+#define INTERNAL_SEED 0
-+#define EXTERNAL_SEED 1
-+
-+#define FRANDOM_MAJOR 235
-+#define FRANDOM_MINOR 11 
-+#define ERANDOM_MINOR 12 
-+
-+static struct file_operations frandom_fops; /* Values assigned below */
-+
-+static int erandom_seeded = 0; /* Internal flag */
-+
-+static int frandom_major = FRANDOM_MAJOR;
-+static int frandom_minor = FRANDOM_MINOR;
-+static int erandom_minor = ERANDOM_MINOR;
-+static int frandom_bufsize = 256;
-+static int frandom_chunklimit = 0; /* =0 means unlimited */
-+
-+MODULE_DESCRIPTION("Fast pseudo-random number generator");
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Eli Billauer");
-+MODULE_PARM(frandom_major,"i");
-+MODULE_PARM_DESC(frandom_major,"Major number of /dev/frandom and 
/dev/erandom");
-+MODULE_PARM(frandom_minor,"i");
-+MODULE_PARM_DESC(frandom_minor,"Minor number of /dev/frandom");
-+MODULE_PARM(erandom_minor,"i");
-+MODULE_PARM_DESC(erandom_minor,"Minor number of /dev/erandom");
-+MODULE_PARM(frandom_bufsize,"i");
-+MODULE_PARM_DESC(frandom_bufsize,"Internal buffer size in bytes. Default is 
256. Must be >= 256");
-+MODULE_PARM(frandom_chunklimit,"i");
-+MODULE_PARM_DESC(frandom_chunklimit,"Limit for read() blocks size. 0 
(default) is unlimited, otherwise must be >= 256");
-+
-+struct frandom_state
-+{
-+      struct semaphore sem; /* Semaphore on the state structure */
-+
-+      u8 S[256]; /* The state array */
-+      u8 i;        
-+      u8 j;
-+
-+      char *buf;
-+};
-+
-+static struct frandom_state *erandom_state;
-+
-+static inline void swap_byte(u8 *a, u8 *b)
-+{
-+      u8 swapByte; 
-+  
-+      swapByte = *a; 
-+      *a = *b;      
-+      *b = swapByte;
-+}
-+
-+static void init_rand_state(struct frandom_state *state, int seedflag);
-+
-+void erandom_get_random_bytes(char *buf, size_t count)
-+{
-+      struct frandom_state *state = erandom_state;
-+      int k;
-+
-+      unsigned int i;
-+      unsigned int j;
-+      u8 *S;
-+  
-+      /* If we fail to get the semaphore, we revert to external random data.
-+         Since semaphore blocking is expected to be very rare, and interrupts
-+         during these rare and very short periods of time even less frequent,
-+         we take the better-safe-than-sorry approach, and fill the buffer
-+         some expensive random data, in case the caller wasn't aware of this
-+         possibility, and expects random data anyhow.
-+      */
-+
-+      if (down_interruptible(&state->sem)) {
-+              get_random_bytes(buf, count);
-+              return;
-+      }
-+
-+      /* We seed erandom as late as possible, hoping that the kernel's main
-+         RNG is already restored in the boot sequence (not critical, but
-+         better.
-+      */
-+      
-+      if (!erandom_seeded) {
-+              erandom_seeded = 1;
-+              init_rand_state(state, EXTERNAL_SEED);
-+              printk(KERN_INFO "frandom: Seeded global generator now (used by 
erandom)\n");
-+      }
-+
-+      i = state->i;     
-+      j = state->j;
-+      S = state->S;  
-+
-+      for (k=0; k<count; k++) {
-+              i = (i + 1) & 0xff;
-+              j = (j + S[i]) & 0xff;
-+              swap_byte(&S[i], &S[j]);
-+              *buf++ = S[(S[i] + S[j]) & 0xff];
-+      }
-+ 
-+      state->i = i;     
-+      state->j = j;
-+
-+      up(&state->sem);
-+}
-+
-+static void init_rand_state(struct frandom_state *state, int seedflag)
-+{
-+      unsigned int i, j, k;
-+      u8 *S;
-+      u8 *seed = state->buf;
-+
-+      if (seedflag == INTERNAL_SEED)
-+              erandom_get_random_bytes(seed, 256);
-+      else
-+              get_random_bytes(seed, 256);
-+
-+      S = state->S;
-+      for (i=0; i<256; i++)
-+              *S++=i;
-+
-+      j=0;
-+      S = state->S;
-+
-+      for (i=0; i<256; i++) {
-+              j = (j + S[i] + *seed++) & 0xff;
-+              swap_byte(&S[i], &S[j]);
-+      }
-+
-+      /* It's considered good practice to discard the first 256 bytes
-+         generated. So we do it:
-+      */
-+
-+      i=0; j=0;
-+      for (k=0; k<256; k++) {
-+              i = (i + 1) & 0xff;
-+              j = (j + S[i]) & 0xff;
-+              swap_byte(&S[i], &S[j]);
-+      }
-+
-+      state->i = i; /* Save state */
-+      state->j = j;
-+}
-+
-+static int frandom_open(struct inode *inode, struct file *filp)
-+{
-+  
-+      struct frandom_state *state;
-+
-+      int num =MINOR(inode->i_rdev);
-+      if ((num != frandom_minor) && (num != erandom_minor)) return -ENODEV;
-+  
-+      state = kmalloc(sizeof(struct frandom_state), GFP_KERNEL);
-+      if (!state)
-+              return -ENOMEM;
-+
-+      state->buf = kmalloc(frandom_bufsize, GFP_KERNEL);
-+      if (!state->buf) {
-+              kfree(state);
-+              return -ENOMEM;
-+      }
-+
-+      sema_init(&state->sem, 1); /* Init semaphore as a mutex */
-+
-+      if (num == frandom_minor)
-+              init_rand_state(state, EXTERNAL_SEED);
-+      else
-+              init_rand_state(state, INTERNAL_SEED);
-+
-+      filp->private_data = state;
-+
-+#if (LINUX_VERSION_CODE<KERNEL_VERSION(2,4,0))
-+      MOD_INC_USE_COUNT; 
-+#endif
-+  
-+      return 0; /* Success */
-+}
-+
-+static int frandom_release(struct inode *inode, struct file *filp)
-+{
-+
-+      struct frandom_state *state = filp->private_data;
-+
-+      kfree(state->buf);
-+      kfree(state);
-+  
-+#if (LINUX_VERSION_CODE<KERNEL_VERSION(2,4,0))
-+      MOD_DEC_USE_COUNT;
-+#endif
-+
-+      return 0;
-+}
-+
-+static ssize_t frandom_read(struct file *filp, char *buf, size_t count,
-+                          loff_t *f_pos)
-+{
-+      struct frandom_state *state = filp->private_data;
-+      ssize_t ret;
-+      int dobytes, k;
-+      char *localbuf;
-+
-+      unsigned int i;
-+      unsigned int j;
-+      u8 *S;
-+  
-+      if (down_interruptible(&state->sem))
-+              return -ERESTARTSYS;
-+  
-+      if ((frandom_chunklimit > 0) && (count > frandom_chunklimit))
-+              count = frandom_chunklimit;
-+
-+      ret = count; /* It's either everything or an error... */
-+  
-+      i = state->i;     
-+      j = state->j;
-+      S = state->S;  
-+
-+      while (count) {
-+              if (count > frandom_bufsize)
-+                      dobytes = frandom_bufsize;
-+              else
-+                      dobytes = count;
-+
-+              localbuf = state->buf;
-+
-+              for (k=0; k<dobytes; k++) {
-+                      i = (i + 1) & 0xff;
-+                      j = (j + S[i]) & 0xff;
-+                      swap_byte(&S[i], &S[j]);
-+                      *localbuf++ = S[(S[i] + S[j]) & 0xff];
-+              }
-+ 
-+              if (copy_to_user(buf, state->buf, dobytes)) {
-+                      ret = -EFAULT;
-+                      goto out;
-+              }
-+
-+              buf += dobytes;
-+              count -= dobytes;
-+      }
-+
-+ out:
-+      state->i = i;     
-+      state->j = j;
-+
-+      up(&state->sem);
-+      return ret;
-+}
-+
-+static struct file_operations frandom_fops = {
-+      read:       frandom_read,
-+      open:       frandom_open,
-+      release:    frandom_release,
-+};
-+
-+static const struct {
-+      unsigned int            minor;
-+      char                    *name;
-+      umode_t                 mode;
-+      struct file_operations  *fops;
-+} devlist[] = {
-+      {11, "frandom", S_IRUGO | S_IWUSR,      &frandom_fops},
-+      /* Erandom doesn't have its own fop, it shares one with frandom. */
-+      {12, "erandom", S_IRUGO | S_IWUSR,      &frandom_fops},
-+};
-+
-+static struct class_simple *frandom_class;
-+
-+static void frandom_cleanup_module(void) {
-+      kfree(erandom_state->buf);
-+      kfree(erandom_state);
-+ 
-+      unregister_chrdev(frandom_major, "frandom");
-+}
-+
-+
-+static int frandom_init_module(void)
-+{
-+      int result, i=0;
-+
-+      /* The buffer size MUST be at least 256 bytes, because we assume that
-+         minimal length in init_rand_state().
-+      */       
-+      if (frandom_bufsize < 256) {
-+              printk(KERN_ERR "frandom: Refused to load because 
frandom_bufsize=%d < 256\n",frandom_bufsize);
-+              return -EINVAL;
-+      }
-+      if ((frandom_chunklimit != 0) && (frandom_chunklimit < 256)) {
-+              printk(KERN_ERR "frandom: Refused to load because 
frandom_chunklimit=%d < 256 and != 0\n",frandom_chunklimit);
-+              return -EINVAL;
-+      }
-+
-+      erandom_state = kmalloc(sizeof(struct frandom_state), GFP_KERNEL);
-+      if (!erandom_state)
-+              return -ENOMEM;
-+
-+      /* This specific buffer is only used for seeding, so we need
-+         256 bytes exactly */
-+      erandom_state->buf = kmalloc(256, GFP_KERNEL);
-+      if (!erandom_state->buf) {
-+              kfree(erandom_state);
-+              return -ENOMEM;
-+      }
-+
-+      sema_init(&erandom_state->sem, 1); /* Init semaphore as a mutex */
-+
-+      erandom_seeded = 0;
-+
-+#ifdef SET_MODULE_OWNER
-+      SET_MODULE_OWNER(&frandom_fops);
-+#endif
-+      /*
-+       * Register your major, and accept a dynamic number. This is the
-+       * first thing to do, in order to avoid releasing other module's
-+       * fops in frandom_cleanup_module()
-+       */
-+      result = register_chrdev(frandom_major, "frandom", &frandom_fops);
-+      if (result < 0) {
-+              printk(KERN_WARNING "frandom: can't get major 
%d\n",frandom_major);
-+
-+              kfree(erandom_state->buf);
-+              kfree(erandom_state);
-+      
-+              return result;
-+      }
-+      if (frandom_major == 0) frandom_major = result; /* dynamic */
-+
-+      frandom_class = class_simple_create(THIS_MODULE, "frandom");
-+      for (i = 0; i < ARRAY_SIZE(devlist); i++) {
-+              class_simple_device_add(frandom_class,
-+                                      MKDEV(FRANDOM_MAJOR, devlist[i].minor),
-+                                      NULL, devlist[i].name);
-+              devfs_mk_cdev(MKDEV(FRANDOM_MAJOR, devlist[i].minor),
-+                              S_IFCHR | devlist[i].mode, devlist[i].name);
-+      }
-+ 
-+      return 0; /* succeed */
-+}
-+
-+module_init(frandom_init_module);
-+module_exit(frandom_cleanup_module);
-+
-+EXPORT_SYMBOL(erandom_get_random_bytes);
-diff -Naur linux-2.6.11.orig/drivers/char/random.c 
linux-2.6.11/drivers/char/random.c
---- linux-2.6.11.orig/drivers/char/random.c    2005-03-04 21:15:42.519856480 
+0000
-+++ linux-2.6.11/drivers/char/random.c 2005-03-04 21:36:36.799177040 +0000
-@@ -1891,6 +1891,104 @@
-       return 1;
- }
- 
-+#ifdef CONFIG_SYSCTL_URANDOM
-+static int proc_do_urandom(ctl_table *table, int write, struct file *filp,
-+                      void *buffer, size_t *lenp, loff_t *ppos)
-+{
-+      ctl_table       fake_table;
-+      unsigned char   buf[64], random[16], *p;
-+      int i;
-+
-+      get_random_bytes(random, 16);
-+
-+      p=buf;
-+
-+      for (i=0; i<16; i++) {
-+              sprintf(p, "%02x", random[i]);
-+              p+=2;
-+      }
-+
-+      fake_table.data = buf;
-+      fake_table.maxlen = sizeof(buf);
-+
-+      return proc_dostring(&fake_table, write, filp, buffer, lenp, ppos);
-+}
-+
-+static int urandom_strategy(ctl_table *table, int *name, int nlen,
-+                      void *oldval, size_t *oldlenp,
-+                      void *newval, size_t newlen, void **context)
-+{
-+      unsigned char   random[16];
-+      unsigned int    len;
-+
-+      if (!oldval || !oldlenp)
-+              return 1;
-+
-+      get_random_bytes(random, 16);
-+
-+      if (get_user(len, oldlenp))
-+              return -EFAULT;
-+      if (len) {
-+              if (len > 16)
-+                      len = 16;
-+              if (copy_to_user(oldval, random, len) ||
-+              put_user(len, oldlenp))
-+                      return -EFAULT;
-+      }
-+      return 1;
-+}
-+#endif
-+
-+#ifdef CONFIG_FRANDOM
-+void erandom_get_random_bytes(char *buf, size_t count);
-+
-+static int proc_do_erandom(ctl_table *table, int write, struct file *filp,
-+                      void *buffer, size_t *lenp, loff_t *ppos)
-+{
-+      ctl_table       fake_table;
-+      unsigned char   buf[64], random[16], *p;
-+      int i;
-+
-+      erandom_get_random_bytes(random, 16);
-+
-+      p=buf;
-+
-+      for (i=0; i<16; i++) {
-+              sprintf(p, "%02x", random[i]);
-+              p+=2;
-+      }
-+
-+      fake_table.data = buf;
-+      fake_table.maxlen = sizeof(buf);
-+
-+      return proc_dostring(&fake_table, write, filp, buffer, lenp, ppos);
-+}
-+
-+static int erandom_strategy(ctl_table *table, int *name, int nlen,
-+                      void *oldval, size_t *oldlenp,
-+                      void *newval, size_t newlen, void **context)
-+{
-+      unsigned char   random[16];
-+      unsigned int    len;
-+
-+      if (!oldval || !oldlenp)
-+              return 1;
-+
-+      erandom_get_random_bytes(random, 16);
-+
-+      if (get_user(len, oldlenp))
-+              return -EFAULT;
-+      if (len) {
-+              if (len > 16)
-+                      len = 16;
-+              if (copy_to_user(oldval, random, len) ||
-+                  put_user(len, oldlenp))
-+                      return -EFAULT;
-+      }
-+      return 1;
-+}
-+#endif
-+
- static int sysctl_poolsize = DEFAULT_POOL_SIZE;
- ctl_table random_table[] = {
-       {
-@@ -1947,6 +2045,26 @@
-               .proc_handler   = &proc_do_uuid,
-               .strategy       = &uuid_strategy,
-       },
-+#ifdef CONFIG_SYSCTL_URANDOM
-+      {
-+              .ctl_name       = RANDOM_URANDOM,
-+              .procname       = "urandom",
-+              .maxlen         = 16,
-+              .mode           = 0444,
-+              .proc_handler   = &proc_do_urandom,
-+              .strategy       = &urandom_strategy,
-+      },
-+#endif
-+#ifdef CONFIG_FRANDOM
-+      {
-+              .ctl_name       = RANDOM_ERANDOM,
-+              .procname       = "erandom",
-+              .maxlen         = 16,
-+              .mode           = 0444,
-+              .proc_handler   = &proc_do_erandom,
-+              .strategy       = &erandom_strategy,
-+      },
-+#endif
-       { .ctl_name = 0 }
- };
- 
-diff -Naur linux-2.6.11.orig/include/linux/sysctl.h 
linux-2.6.11/include/linux/sysctl.h
---- linux-2.6.11.orig/include/linux/sysctl.h   2005-03-04 21:15:46.306280856 
+0000
-+++ linux-2.6.11/include/linux/sysctl.h        2005-03-04 21:15:47.957029904 
+0000
-@@ -195,6 +195,8 @@
- };
- 
- /* /proc/sys/kernel/random */
-+#define SYSCTL_URANDOM
-+#define SYSCTL_ERANDOM
- enum
- {
-       RANDOM_POOLSIZE=1,
-@@ -202,7 +204,9 @@
-       RANDOM_READ_THRESH=3,
-       RANDOM_WRITE_THRESH=4,
-       RANDOM_BOOT_ID=5,
--      RANDOM_UUID=6
-+      RANDOM_UUID=6,
-+      RANDOM_URANDOM=7,
-+      RANDOM_ERANDOM=8
- };
- 
- /* /proc/sys/kernel/pty */
-diff -Naur linux-2.6.11.orig/init/Kconfig linux-2.6.11/init/Kconfig
---- linux-2.6.11.orig/init/Kconfig     2005-03-04 21:15:47.933033552 +0000
-+++ linux-2.6.11/init/Kconfig  2005-03-04 21:15:47.957029904 +0000
-@@ -154,6 +154,16 @@
-         building a kernel for install/rescue disks or your system is very
-         limited in memory.
- 
-+config SYSCTL_URANDOM
-+      bool "Sysctl urandom support"
-+      depends on SYSCTL
-+      default y
-+      ---help---
-+        If you say Y here, hooks will be enabled to access get_random_bytes()
-+        from sysctl kernel.random.urandom. This is a non-blocking interface.
-+        The main advantage to this is to be able to access urandom through
-+        a chroot.
-+
- config AUDIT
-       bool "Auditing support"
-       default y if SECURITY_SELINUX

Added: trunk/linux/linux-2.6.11.11-pseudo_random-1.patch
===================================================================
--- trunk/linux/linux-2.6.11.11-pseudo_random-1.patch   2005-05-31 14:54:41 UTC 
(rev 959)
+++ trunk/linux/linux-2.6.11.11-pseudo_random-1.patch   2005-05-31 14:56:56 UTC 
(rev 960)
@@ -0,0 +1 @@
+link ../hlfs/linux-2.6.11.11-pseudo_random-1.patch
\ No newline at end of file


Property changes on: trunk/linux/linux-2.6.11.11-pseudo_random-1.patch
___________________________________________________________________
Name: svn:special
   + *

Deleted: trunk/linux/linux-2.6.11.8-pseudo_random-1.patch
===================================================================
--- trunk/linux/linux-2.6.11.8-pseudo_random-1.patch    2005-05-31 14:54:41 UTC 
(rev 959)
+++ trunk/linux/linux-2.6.11.8-pseudo_random-1.patch    2005-05-31 14:56:56 UTC 
(rev 960)
@@ -1 +0,0 @@
-link ../hlfs/linux-2.6.11.8-pseudo_random-1.patch
\ No newline at end of file

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to