linux/drivers/char/random.c
<<
>>
Prefs
   1/*
   2 * random.c -- A strong random number generator
   3 *
   4 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
   5 *
   6 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999.  All
   7 * rights reserved.
   8 *
   9 * Redistribution and use in source and binary forms, with or without
  10 * modification, are permitted provided that the following conditions
  11 * are met:
  12 * 1. Redistributions of source code must retain the above copyright
  13 *    notice, and the entire permission notice in its entirety,
  14 *    including the disclaimer of warranties.
  15 * 2. Redistributions in binary form must reproduce the above copyright
  16 *    notice, this list of conditions and the following disclaimer in the
  17 *    documentation and/or other materials provided with the distribution.
  18 * 3. The name of the author may not be used to endorse or promote
  19 *    products derived from this software without specific prior
  20 *    written permission.
  21 *
  22 * ALTERNATIVELY, this product may be distributed under the terms of
  23 * the GNU General Public License, in which case the provisions of the GPL are
  24 * required INSTEAD OF the above restrictions.  (This clause is
  25 * necessary due to a potential bad interaction between the GPL and
  26 * the restrictions contained in a BSD-style copyright.)
  27 *
  28 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
  31 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
  32 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  33 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  34 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  35 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  38 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
  39 * DAMAGE.
  40 */
  41
  42/*
  43 * (now, with legal B.S. out of the way.....)
  44 *
  45 * This routine gathers environmental noise from device drivers, etc.,
  46 * and returns good random numbers, suitable for cryptographic use.
  47 * Besides the obvious cryptographic uses, these numbers are also good
  48 * for seeding TCP sequence numbers, and other places where it is
  49 * desirable to have numbers which are not only random, but hard to
  50 * predict by an attacker.
  51 *
  52 * Theory of operation
  53 * ===================
  54 *
  55 * Computers are very predictable devices.  Hence it is extremely hard
  56 * to produce truly random numbers on a computer --- as opposed to
  57 * pseudo-random numbers, which can easily generated by using a
  58 * algorithm.  Unfortunately, it is very easy for attackers to guess
  59 * the sequence of pseudo-random number generators, and for some
  60 * applications this is not acceptable.  So instead, we must try to
  61 * gather "environmental noise" from the computer's environment, which
  62 * must be hard for outside attackers to observe, and use that to
  63 * generate random numbers.  In a Unix environment, this is best done
  64 * from inside the kernel.
  65 *
  66 * Sources of randomness from the environment include inter-keyboard
  67 * timings, inter-interrupt timings from some interrupts, and other
  68 * events which are both (a) non-deterministic and (b) hard for an
  69 * outside observer to measure.  Randomness from these sources are
  70 * added to an "entropy pool", which is mixed using a CRC-like function.
  71 * This is not cryptographically strong, but it is adequate assuming
  72 * the randomness is not chosen maliciously, and it is fast enough that
  73 * the overhead of doing it on every interrupt is very reasonable.
  74 * As random bytes are mixed into the entropy pool, the routines keep
  75 * an *estimate* of how many bits of randomness have been stored into
  76 * the random number generator's internal state.
  77 *
  78 * When random bytes are desired, they are obtained by taking the SHA
  79 * hash of the contents of the "entropy pool".  The SHA hash avoids
  80 * exposing the internal state of the entropy pool.  It is believed to
  81 * be computationally infeasible to derive any useful information
  82 * about the input of SHA from its output.  Even if it is possible to
  83 * analyze SHA in some clever way, as long as the amount of data
  84 * returned from the generator is less than the inherent entropy in
  85 * the pool, the output data is totally unpredictable.  For this
  86 * reason, the routine decreases its internal estimate of how many
  87 * bits of "true randomness" are contained in the entropy pool as it
  88 * outputs random numbers.
  89 *
  90 * If this estimate goes to zero, the routine can still generate
  91 * random numbers; however, an attacker may (at least in theory) be
  92 * able to infer the future output of the generator from prior
  93 * outputs.  This requires successful cryptanalysis of SHA, which is
  94 * not believed to be feasible, but there is a remote possibility.
  95 * Nonetheless, these numbers should be useful for the vast majority
  96 * of purposes.
  97 *
  98 * Exported interfaces ---- output
  99 * ===============================
 100 *
 101 * There are three exported interfaces; the first is one designed to
 102 * be used from within the kernel:
 103 *
 104 *      void get_random_bytes(void *buf, int nbytes);
 105 *
 106 * This interface will return the requested number of random bytes,
 107 * and place it in the requested buffer.
 108 *
 109 * The two other interfaces are two character devices /dev/random and
 110 * /dev/urandom.  /dev/random is suitable for use when very high
 111 * quality randomness is desired (for example, for key generation or
 112 * one-time pads), as it will only return a maximum of the number of
 113 * bits of randomness (as estimated by the random number generator)
 114 * contained in the entropy pool.
 115 *
 116 * The /dev/urandom device does not have this limit, and will return
 117 * as many bytes as are requested.  As more and more random bytes are
 118 * requested without giving time for the entropy pool to recharge,
 119 * this will result in random numbers that are merely cryptographically
 120 * strong.  For many applications, however, this is acceptable.
 121 *
 122 * Exported interfaces ---- input
 123 * ==============================
 124 *
 125 * The current exported interfaces for gathering environmental noise
 126 * from the devices are:
 127 *
 128 *      void add_device_randomness(const void *buf, unsigned int size);
 129 *      void add_input_randomness(unsigned int type, unsigned int code,
 130 *                                unsigned int value);
 131 *      void add_interrupt_randomness(int irq, int irq_flags);
 132 *      void add_disk_randomness(struct gendisk *disk);
 133 *
 134 * add_device_randomness() is for adding data to the random pool that
 135 * is likely to differ between two devices (or possibly even per boot).
 136 * This would be things like MAC addresses or serial numbers, or the
 137 * read-out of the RTC. This does *not* add any actual entropy to the
 138 * pool, but it initializes the pool to different values for devices
 139 * that might otherwise be identical and have very little entropy
 140 * available to them (particularly common in the embedded world).
 141 *
 142 * add_input_randomness() uses the input layer interrupt timing, as well as
 143 * the event type information from the hardware.
 144 *
 145 * add_interrupt_randomness() uses the interrupt timing as random
 146 * inputs to the entropy pool. Using the cycle counters and the irq source
 147 * as inputs, it feeds the randomness roughly once a second.
 148 *
 149 * add_disk_randomness() uses what amounts to the seek time of block
 150 * layer request events, on a per-disk_devt basis, as input to the
 151 * entropy pool. Note that high-speed solid state drives with very low
 152 * seek times do not make for good sources of entropy, as their seek
 153 * times are usually fairly consistent.
 154 *
 155 * All of these routines try to estimate how many bits of randomness a
 156 * particular randomness source.  They do this by keeping track of the
 157 * first and second order deltas of the event timings.
 158 *
 159 * Ensuring unpredictability at system startup
 160 * ============================================
 161 *
 162 * When any operating system starts up, it will go through a sequence
 163 * of actions that are fairly predictable by an adversary, especially
 164 * if the start-up does not involve interaction with a human operator.
 165 * This reduces the actual number of bits of unpredictability in the
 166 * entropy pool below the value in entropy_count.  In order to
 167 * counteract this effect, it helps to carry information in the
 168 * entropy pool across shut-downs and start-ups.  To do this, put the
 169 * following lines an appropriate script which is run during the boot
 170 * sequence:
 171 *
 172 *      echo "Initializing random number generator..."
 173 *      random_seed=/var/run/random-seed
 174 *      # Carry a random seed from start-up to start-up
 175 *      # Load and then save the whole entropy pool
 176 *      if [ -f $random_seed ]; then
 177 *              cat $random_seed >/dev/urandom
 178 *      else
 179 *              touch $random_seed
 180 *      fi
 181 *      chmod 600 $random_seed
 182 *      dd if=/dev/urandom of=$random_seed count=1 bs=512
 183 *
 184 * and the following lines in an appropriate script which is run as
 185 * the system is shutdown:
 186 *
 187 *      # Carry a random seed from shut-down to start-up
 188 *      # Save the whole entropy pool
 189 *      echo "Saving random seed..."
 190 *      random_seed=/var/run/random-seed
 191 *      touch $random_seed
 192 *      chmod 600 $random_seed
 193 *      dd if=/dev/urandom of=$random_seed count=1 bs=512
 194 *
 195 * For example, on most modern systems using the System V init
 196 * scripts, such code fragments would be found in
 197 * /etc/rc.d/init.d/random.  On older Linux systems, the correct script
 198 * location might be in /etc/rcb.d/rc.local or /etc/rc.d/rc.0.
 199 *
 200 * Effectively, these commands cause the contents of the entropy pool
 201 * to be saved at shut-down time and reloaded into the entropy pool at
 202 * start-up.  (The 'dd' in the addition to the bootup script is to
 203 * make sure that /etc/random-seed is different for every start-up,
 204 * even if the system crashes without executing rc.0.)  Even with
 205 * complete knowledge of the start-up activities, predicting the state
 206 * of the entropy pool requires knowledge of the previous history of
 207 * the system.
 208 *
 209 * Configuring the /dev/random driver under Linux
 210 * ==============================================
 211 *
 212 * The /dev/random driver under Linux uses minor numbers 8 and 9 of
 213 * the /dev/mem major number (#1).  So if your system does not have
 214 * /dev/random and /dev/urandom created already, they can be created
 215 * by using the commands:
 216 *
 217 *      mknod /dev/random c 1 8
 218 *      mknod /dev/urandom c 1 9
 219 *
 220 * Acknowledgements:
 221 * =================
 222 *
 223 * Ideas for constructing this random number generator were derived
 224 * from Pretty Good Privacy's random number generator, and from private
 225 * discussions with Phil Karn.  Colin Plumb provided a faster random
 226 * number generator, which speed up the mixing function of the entropy
 227 * pool, taken from PGPfone.  Dale Worley has also contributed many
 228 * useful ideas and suggestions to improve this driver.
 229 *
 230 * Any flaws in the design are solely my responsibility, and should
 231 * not be attributed to the Phil, Colin, or any of authors of PGP.
 232 *
 233 * Further background information on this topic may be obtained from
 234 * RFC 1750, "Randomness Recommendations for Security", by Donald
 235 * Eastlake, Steve Crocker, and Jeff Schiller.
 236 */
 237
 238#include <linux/utsname.h>
 239#include <linux/module.h>
 240#include <linux/kernel.h>
 241#include <linux/major.h>
 242#include <linux/string.h>
 243#include <linux/fcntl.h>
 244#include <linux/slab.h>
 245#include <linux/random.h>
 246#include <linux/poll.h>
 247#include <linux/init.h>
 248#include <linux/fs.h>
 249#include <linux/genhd.h>
 250#include <linux/interrupt.h>
 251#include <linux/mm.h>
 252#include <linux/nodemask.h>
 253#include <linux/spinlock.h>
 254#include <linux/kthread.h>
 255#include <linux/percpu.h>
 256#include <linux/cryptohash.h>
 257#include <linux/fips.h>
 258#include <linux/ptrace.h>
 259#include <linux/kmemcheck.h>
 260#include <linux/workqueue.h>
 261#include <linux/irq.h>
 262#include <linux/syscalls.h>
 263#include <linux/completion.h>
 264#include <linux/uuid.h>
 265#include <crypto/chacha20.h>
 266
 267#include <asm/processor.h>
 268#include <linux/uaccess.h>
 269#include <asm/irq.h>
 270#include <asm/irq_regs.h>
 271#include <asm/io.h>
 272
 273#define CREATE_TRACE_POINTS
 274#include <trace/events/random.h>
 275
 276/* #define ADD_INTERRUPT_BENCH */
 277
 278/*
 279 * Configuration information
 280 */
 281#define INPUT_POOL_SHIFT        12
 282#define INPUT_POOL_WORDS        (1 << (INPUT_POOL_SHIFT-5))
 283#define OUTPUT_POOL_SHIFT       10
 284#define OUTPUT_POOL_WORDS       (1 << (OUTPUT_POOL_SHIFT-5))
 285#define SEC_XFER_SIZE           512
 286#define EXTRACT_SIZE            10
 287
 288#define DEBUG_RANDOM_BOOT 0
 289
 290#define LONGS(x) (((x) + sizeof(unsigned long) - 1)/sizeof(unsigned long))
 291
 292/*
 293 * To allow fractional bits to be tracked, the entropy_count field is
 294 * denominated in units of 1/8th bits.
 295 *
 296 * 2*(ENTROPY_SHIFT + log2(poolbits)) must <= 31, or the multiply in
 297 * credit_entropy_bits() needs to be 64 bits wide.
 298 */
 299#define ENTROPY_SHIFT 3
 300#define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
 301
 302/*
 303 * The minimum number of bits of entropy before we wake up a read on
 304 * /dev/random.  Should be enough to do a significant reseed.
 305 */
 306static int random_read_wakeup_bits = 64;
 307
 308/*
 309 * If the entropy count falls under this number of bits, then we
 310 * should wake up processes which are selecting or polling on write
 311 * access to /dev/random.
 312 */
 313static int random_write_wakeup_bits = 28 * OUTPUT_POOL_WORDS;
 314
 315/*
 316 * The minimum number of seconds between urandom pool reseeding.  We
 317 * do this to limit the amount of entropy that can be drained from the
 318 * input pool even if there are heavy demands on /dev/urandom.
 319 */
 320static int random_min_urandom_seed = 60;
 321
 322/*
 323 * Originally, we used a primitive polynomial of degree .poolwords
 324 * over GF(2).  The taps for various sizes are defined below.  They
 325 * were chosen to be evenly spaced except for the last tap, which is 1
 326 * to get the twisting happening as fast as possible.
 327 *
 328 * For the purposes of better mixing, we use the CRC-32 polynomial as
 329 * well to make a (modified) twisted Generalized Feedback Shift
 330 * Register.  (See M. Matsumoto & Y. Kurita, 1992.  Twisted GFSR
 331 * generators.  ACM Transactions on Modeling and Computer Simulation
 332 * 2(3):179-194.  Also see M. Matsumoto & Y. Kurita, 1994.  Twisted
 333 * GFSR generators II.  ACM Transactions on Modeling and Computer
 334 * Simulation 4:254-266)
 335 *
 336 * Thanks to Colin Plumb for suggesting this.
 337 *
 338 * The mixing operation is much less sensitive than the output hash,
 339 * where we use SHA-1.  All that we want of mixing operation is that
 340 * it be a good non-cryptographic hash; i.e. it not produce collisions
 341 * when fed "random" data of the sort we expect to see.  As long as
 342 * the pool state differs for different inputs, we have preserved the
 343 * input entropy and done a good job.  The fact that an intelligent
 344 * attacker can construct inputs that will produce controlled
 345 * alterations to the pool's state is not important because we don't
 346 * consider such inputs to contribute any randomness.  The only
 347 * property we need with respect to them is that the attacker can't
 348 * increase his/her knowledge of the pool's state.  Since all
 349 * additions are reversible (knowing the final state and the input,
 350 * you can reconstruct the initial state), if an attacker has any
 351 * uncertainty about the initial state, he/she can only shuffle that
 352 * uncertainty about, but never cause any collisions (which would
 353 * decrease the uncertainty).
 354 *
 355 * Our mixing functions were analyzed by Lacharme, Roeck, Strubel, and
 356 * Videau in their paper, "The Linux Pseudorandom Number Generator
 357 * Revisited" (see: http://eprint.iacr.org/2012/251.pdf).  In their
 358 * paper, they point out that we are not using a true Twisted GFSR,
 359 * since Matsumoto & Kurita used a trinomial feedback polynomial (that
 360 * is, with only three taps, instead of the six that we are using).
 361 * As a result, the resulting polynomial is neither primitive nor
 362 * irreducible, and hence does not have a maximal period over
 363 * GF(2**32).  They suggest a slight change to the generator
 364 * polynomial which improves the resulting TGFSR polynomial to be
 365 * irreducible, which we have made here.
 366 */
 367static struct poolinfo {
 368        int poolbitshift, poolwords, poolbytes, poolbits, poolfracbits;
 369#define S(x) ilog2(x)+5, (x), (x)*4, (x)*32, (x) << (ENTROPY_SHIFT+5)
 370        int tap1, tap2, tap3,  367asm/io.h>
 366 272
 366
 366>
 366 275
 366 366 277
/*
 366
 366 */
        12
 366-5))
 366       10
OUTPUT3POOL_SHIFT-5))
 366           512
 366 287
 366 0
 366 289
 366 366 291
 366/*
 366
 366OUTPUT31/8th bits.
 *
 366
 366
 366 */
 3664NTROPY_SHIFT 3
 366)
 301
 366/*
 366
 366
 */
 = 64;
 322 307
 as="uot;random" data of the sort we expe4an class=4comment">/*
 366
xatic int atic int 
xatic in atic in 
x href="+"L35refine" name="L368"> href="+"L35refine=x" pege71)include/asm-i386/irq_regs.r4gn class=4omment"> */
fasync_dom.c#rs/ch*367" id="L367" fasynce" name="L368">fasync8e3lpege71)include/asm-i386/irq_regs.r4sref">OUT4UT_POOL_WORDS;
 314
xatic int atic int /*
xatic int atic int 

crng_351static struct 351st[16]pege71)include/asm-i386/irq_regs.r4n class="4omment"> */
"L35rtim/8e3lpege71)include/asm-i386/irq_regs.r4m_min_ura4dom_seed = 60;
ude <_trs/char/rah67" id="L367" <e" name="L368"><e=x"pege71)include/asm-i386/irq_regs.r4m"line" n4me="L321"> 321
/*
OUT4 .poolwords
crng_351sta367" id="L367" crimary_crngine" name="L367"rimary_crnga>sta=atic struct <e=x"a=ah67" id="L367" __SPIN_LOCK_UNLOCKED369" class="lin__SPIN_LOCK_UNLOCKED" class="sref">xcrimary_crngine" name="L367"rimary_crnga>st.h67" id="L367" <e" name="L368"><e=x"),ss="line" name="L366"> 366
 *
 322
n cl322" class="line" name="L322"> 322
n cl322" class="line" name="L322"> 322
n cl> * do> * a_"> 3322" class="line" name="L322"> 322
 322
<"rimary_crng-href<line" ="lin48" clasuot;random" data of the sort we expe4Modeling 4nd Computer
 366 *
crng_"L35e=x"a=amin_urandom_seed" class="sref">rand4 for sugg4sting this.
crng_t x)*32, (likely" class="sref">xcrng_"L35e" name="L368">crng_"L35e=x"ahref=0sref">x) + sizeof(unsigned long4an class=4comment"> *
rand4 CRC-32 p4utput hash,
rand4ing opera4ion is that
crng_351sta*367" id="L367" crngine" name="L367crng" cl,ss="line" name="L366"> 366
st[367" id="L367" CHACHA20_BLOCK_ass="line" name="L2CHACHA20_BLOCK_ass=a>st] pege71)include/asm-i386/irq_regs.r4t to see.4 As long as
crng_351sta*367" id="L367" crngine" name="L367crng" cl,ss="line" name="L366"> 366
 sde=ran pege71)include/asm-i386/irq_regs.r4todeling 4intelligent
" name=_atic int 

 366
 366
/a>
 3s, with only three taps, instead of the s4 state an4 the input,
 366

stor"e" name="L368">="sref">stor"e=x"pege71)include/asm-i386/irq_regs.r4ase the u4certainty).
stor"e" name="L368">="sref">stor"e=x"atic struct  *
 34:"L366" class="line" name="L366"> 366
 367sta*367" id="L367" class="line" name="L367"> 367stpege71)include/asm-i386/irq_regs.r4aandomnes4r Generator
 3a>stpege71)include/asm-i386/irq_regs.r4an class=4.  In their

stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" culsine" name="L367"ul3a>stpege71)include/asm-i386/irq_regs.r4back poly4omial (that
work_dom.c#a>sta367" id="L367" cush_workine" name="L367"ush_worka>stpege71)include/asm-i386/irq_regs.r4bt produc4are using).

 366
x)*32, (last_"ul359a>stpege71)include/asm-i386/irq_regs.r4bse the u4e generator
ude <_trs/chh67" id="L367" <e" name="L368"><e=x"pege71)include/asm-i386/irq_regs.r4GFSR poly4omial to be
(
 * a_7"t1> * a_7"t1 */
r)-&gpege71)include/asm-i386/irq_regs.r4Gn class=4ef">poolinfo {
t"t1sine" name="L367="sref">t"t1s)-&gpege71)include/asm-i386/irq_regs.r4G;s state4>poolfracbits;
n cle" name="L368">"L351">n cl32a>:1pege71)include/asm-i386/irq_regs.r4="sref">E4TROPY_SHIFT+5)
lim35e=x":1pege71)include/asm-i386/irq_regs.r4=t produc4clude/asm-arm/irq_regs.34f="dr471rs/char/randde=x" claom.c#L368" id="L368last_> 34_"L35e" name="L368">last_> 34_"L35e=x":1pege71)include/asm-i386/irq_regs.r4=either p4">asm/io.h>
 34e" name="L368">last_> 34a>st[367" id="L367" L286" class="line" name="L286"> 286#def]pege71)include/asm-i386/irq_regs.r4="line" n4me="L272"> 272
>
u/a><_ta>sta367" id="L367" ex93stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS(( 366 275
ua><_ta>sta367" id="L367" node=poolwords" classnef">poolworom.c#L368" id="L368minoolwords" classmNTROlworom.c#L368" id="L368rsvL320"> 320stasvL=ran pege71)include/asm-i386/irq_regs.r4= class="4PT_BENCH */
u/a><_ta>sta367" id="L367" _ex93stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS(( 366 277
ua><_ta>sta367" id="L367" node=poolwords" classnef">poolworom.c#L368" id="L368fippoolwords" classfipp=ran pege71)include/asm-i386/irq_regs.r4=;s state4comment">/*

 320stcrng_t e="L" cladom.c#L367" id="L367" crng_351crng_351sta*367" id="L367" crngine" name="L367crng" cl,ddom.c#L367" id="L367" ="sref">stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS( */
work_dom.c#a>sta*367" id="L367" workine" name="L367worka>st=pege71)include/asm-i386/irq_regs.r4neither p4HIFT        12
 * a_clas_> 34e" name="L368">> * a_clas_> 34a>st[367" id="L367" IN="sref">random_write_wakeup_bIN="sref">random#def]nom.c#L369" id="__l1-5))
 34e" name="L368">b<ing_clas_> 34a>st[367" id="L367" ass="sref">random_write_wakeup_bits = 28 *        10
OUTPUT4POOL_SHIFT-5))
stor"e" name="L368">="sref">stor"e=x"ah67" id="L367" > * a_clase" name="L368">> * a_clase=x"a=atic struct  367sta=" nameh67" id="L367" class="l_tas="ine" name="L367"> 367 366
="line> * a="line66" cla,ss="line" name="L366"> 366 287
lim35e=x"a=a1,ss="line" name="L366"> 366 0
<e=x"a=ah67" id="L367" __SPIN_LOCK_UNLOCKED369" class="lin__SPIN_LOCK_UNLOCKED" class="sref">x> * a_clase" name="L368">> * a_clase=x".h67" id="L367" <e" name="L368"><e=x"),ss="line" name="L366"> 366 289
 3a>sta=ah67" id="L367" > * a_clas_> 34e" name="L368">> * a_clas_> 34a>stss="line" name="L366"> 366 291
/*
stor"e" name="L368">="sref">stor"e=x"ah67" id="L367" b<ing_clase" name="L368">b<ing_clase=x"a=atic struct  367sta=" nameh67" id="L367" class="l_tas="ine" name="L367"> 367 366OUTPUT41/8th bits.

="lineb<ing="line66" cla,ss="line" name="L366"> 366 *
lim35e=x"a=a1,ss="line" name="L366"> 366
sta=" nameh67" id="L367" > * a_clase" name="L368">> * a_clase=x",ss="line" name="L366"> 366
<e=x"a=ah67" id="L367" __SPIN_LOCK_UNLOCKED369" class="lin__SPIN_LOCK_UNLOCKED" class="sref">xb<ing_clase" name="L368">b<ing_clase=x".h67" id="L367" <e" name="L368"><e=x"),ss="line" name="L366"> 366 */
 3a>sta=ah67" id="L367" b<ing_clas_> 34e" name="L368">b<ing_clas_> 34a>st,ss="line" name="L366"> 3665NTROPY_SHIFT 3
sta=ah67" id="L367" __ * K_INITIALIZER369" class="lin__ * K_INITIALIZER" class="sref">xb<ing_clase" name="L368">b<ing_clase=x".h67" id="L367" cush_workine" name="L367"ush_worka>st,ss="line" name="L366"> 3665Nf(unsigned long))
 366 301
/*
 3_tas="ine" name="L3679"> 3_tas="rs/c[8] =atic struct  366 *
 307
 322/*
prom. classass="lin="line/a> * t"L362"> 3322" class="line" name="L322"> 322
 * clall322" class="line" name="L322"> 3225ng on write
 322
 322 */
ss="comment/a> 322;
 329comW="line"/a> 322" class="line" name="L322"> 322 314
 do soine" nalps3"> 363lin48"lassa"comme cla> * 5 322/*
 322
 366
stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS( 366
poolw)n_urandom_seed" class="sref">rand5n class="5omment"> */
 = 60;
x)*32, ( 370        int tap1, tap2, tap3,  321
> * a_7"t1/*
( 367st-hrefh67" id="L367" clasolbitshift" class="sref">poolbits - 1pege71)include/asm-i386/irq_regs.r5aref">OUT5 .poolwords
poolwa=ah67" id="L367" > oolwords" classNTROlwpege71)include/asm-i386/irq_regs.r5a5e wake 5elow.  They

a=ah67" id="L367" TS( 367st-hrefh67" id="L367" 9 class="line" name="L370">pege71)include/asm-i386/irq_regs.r5a be drai5comment"> *
( 367st-hrefh67" id="L367" 9 c
, ( 367st-hrefh67" id="L367" 9 c
, ( 367st-hrefh67" id="L367" 9 c
, ( 367st-hrefh67" id="L367" 9 c

> * a_7"t1(> * a_7"t1
((
 *
ps="c tim/mto simplify ua> 366
x)*32, (poolw--)atic struct  *
poolw++ss="sref">tap3> * a_7"t1
x>oolwords" classNcodea- 1)" name=#L368" id="L368>poomaskine" name="L367woromaska>stpege71)include/asm-i386/irq_regs.r5ing opera5ion is that
 366
 ousme="L"L366" class="line" name="L366"> 366
( 3a>st[367" id="L367" >oolwords" classNcode]pege71)include/asm-i386/irq_regs.r5on class=5eserved the
( 3a>st[ass="sref">x>oolwords" classNcodea+dh67" id="L367" 9 class="line" name="L370">)" name=#L368" id="L368>poomaskine" name="L367woromaska>st]pege71)include/asm-i386/irq_regs.r5oodeling 5intelligent
( 3a>st[ass="sref">x>oolwords" classNcodea+dh67" id="L367" 9 c( 3a>st[ass="sref">x>oolwords" classNcodea+dh67" id="L367" 9 c( 3a>st[ass="sref">x>oolwords" classNcodea+dh67" id="L367" 9 c( 3a>st[ass="sref">x>oolwords" classNcodea+dh67" id="L367" 9 c 366
 366
( 3a>st[367" id="L367" >oolwords" classNcode]a=aass="sref">xwine" name="L367wROlwahrefhref=3) ^nom.c#L369" id="9"> 3_tas="ine" name="L3679"> 3_tas="rs/c[ss="sref">xwine" name="L367wROlwahname=7]pege71)include/asm-i386/irq_regs.r5 t produc5ker has any

 322
 3s, with only three taps, instead of the s5ase the u5certainty).
 3,349" claax93< 7molbi, with only three taps, instead of the s5aimulatio5comment"> *
som.es spt 
 * amolbipscross> 3 evenlys, with only three taps, instead of the s5afor sugg5r Generator
 366
> * a_7"t1x> * a_7"t1> * a_7"t1x>oolwords" classNcodea? 7m: 14))" name=31pege71)include/asm-i386/irq_regs.r5a;s state5isted GFSR,
 366
(> * a_7"t1 * a_7"t1> * a_7"t1
((oolwords" classNcodepege71)include/asm-i386/irq_regs.r5nlisions 5period over

stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS( 366
sta*367" id="L367" workine4=either p4">asm/io.h>
 *
b<ing_clas race"L367" __mix_cl_noL368as_ode nor
ua><_ta>sta367" id="e
> * a_7"t1
="sref">stor"e=x"a67" TS(> * a_7"t1:1pege75)include/asm-i386/irq_re5s.r4=5sref"> 5period over


stor"e" name="L368">="sref">stor"e=x"a*367" id="L367" TS(
sta*367" id="L367" workers/char/5andom.c#L314" id="L314" 5las4=57R poly4omial to bepoolworlagce=x"a=ah67" id="L367" >oolwords" classN" cl,ss="5ine" name="L366"> 366
b<ing_clas race"L367" __mix_clas_ode nor
ua><_ta>sta367" id="e
> * a_7"t1 366 *
b<ing_clase=x".h67="e
poolworlagce=x"a_7"t1> * a_7"t1
="sref">stor"e=x"a67" TS(> * a_7"t1
b<ing_clase=x".h67="e
poolworlagce=x"a_7"t1> * a_7"t1

 */
sta=" nameh"drL367"ued Fein"_dom.c#a>sta*367" id="L367" work)-&gpege75)include/asm-i386/irq_re5s.r4i58eling 5nd Computer
xwine" name="L367wROlwahnamers/char/5andom.c#L314" id="L314" 5las4f58R poly4omial to beoolwords" classN"a=atic s5ruct oolwords" classN"an pege75ine" name="L366"> 366  here.
) ((r 366 366/*
 366
 3665ng on write
 3,349" claax93< 7molbi, s/c}pege75)include/asm-i386/irq_re5s.r4=59ine" n5dev/random.
pf="dr51aaxdn>
psndoumes365" ianyinnan c/a> 3,349" claax93< 7molbi, s-&gpege75andom.c#L272" id="L272" 5las4a59class=5omment"> */
 * amolbipscross> 3 evenlys, "a=atic s5ruct  366
sta=" nameh"drL33eras_ode=poolwords" class__mi"drL367"ul3a>sta=" nameh"drL367"ued Fe367" TS( 366sta*367" id="L367" worka=a1,ss="5ine" name="L366"> 366
(
(xwine" name="L367wROlwahname=x",ss="5ine" name="L366"> 366 *
(
(xwine" name="L367wROlwahname=a1,ss="5ine" name="L366"> 366/*
 366

xwine" name="L367wROlwahna6a>st,ss="6ine" name="L366"> 366
wine" name="L367wROlwa=ah67" iing).

wine" name="L367wROlwa=ah67" iing).
> * a_7"t1 366

> * a_7"t1/*

xwine" name="L367wROlwahna6a5s/cege76)ne" name="L366"> 366
wine" name="L367wROlwa=ah67" iing).

wine" name="L367wROlwa=ah67" iing).
> * a_7"t1 366

> * a_7"t1 366
 *

xwine" name="L367wROlwahna6a9s/char/6ane" name="L366"> 366
wine" name="L367wROlwa=ah67" iing).

wine" name="L367wROlwa=ah67" iing).
 322

> * a_7"t1 322
 322

xwine" name="L367wROlwahna62" class=6line" name="L322"> 322
wine" name="L367wROlwa=ah67" iing).

wine" name="L367wROlwa=ah67" iing).
 322

> * a_7"t1 322
 322
(< href="+code-hreid=";th7" add_ptTS(
 322
((xwine" name="L367wROlwahna62rs/char/6ine" name="L366"> 366 *
) ((<++ef">xwine" name="L367wROlwahna629s/char/6ine" name="L366"> 366
6and5n62k poly5omial (that
 */
 rd5ddddddddddddr52 ="srlworid="L3668e3lpege76)include/asm-i386/irq_re6s.r5m6line" in"_dom.c#a>sta*367" id="L367" wor6e=x"pege76)include/asm-i386/irq_re6s.r5a6 class=5commento bepoolworlagce=x"a=ah67" id="L367" >oolwords" class6 - 1pege76)include/asm-i386/irq_re6s.r5a6ef">OUT5 .poole=poolwords" class__mi hr5f=_ 7"ty_d="Lar/r name="L367wROlwhr5f=_ 7"ty_d="Lar/red Fe367" TS((oolwords" class6 5s/cege76)include/asm-i386/irq_re6s.r5a62ulatio5 4:254-266)
b<ing_clas hr5f=_ 7"ty_liah_L368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1

((pool670">pege76)include/asm-i386/irq_re6s.r5a62class=5.  In their(wd /*
poolworr5v67" iing).



b<ing_clas hr5f=_ 7"ty_liah_L368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1

 366
 307
< * C5f="d (or debit)hr5f="dr51ersde=p"om.c#Lnd=""""""""dr51er""""* > * amolbipscross> 3 evenlys,6=x"=pege76)include/asm-i386/irq_re6s.r5 63class=5comment">/*
som.es spt stpege76)include/asm-i386/irq_re6s.r5i64r of b5ts, then we
 3665ng on write
 366
stor"e" name="L368">="sref">stor"e=x"a"dr56ers/char/randdddr/rar/randdom.c#L3nar/ras_ord5ddddddddddddr52 ="srlworid="L366ode]pege76)include/asm-i386/irq_re6s.r5o6 class, (pool6>st]pege76)include/asm-i386/irq_re6s.r5o6deling 5intell"dr56ers/char/randd id="L36rs/char/randdom.c#L3 id="L36rs/chid=", a hr5f="dr521rsori368">crng_351st]pege76)include/asm-i386/irq_re6s.r5o6mulatio5 contr*367" "dr56ers/char/randd67" _="L2(w68">="sref">stor"e=xa=ah67" id="L367" TS(Olwpege76)include/asm-i386/irq_re6s.r5o6 class=5e don&"dr56ers/char/randddfracar/randdom.c#L3nfracid="L367" add_ptTSddr/rar/randdom.c#L3nar/ras_o <<67" add_ptTSENTROPY_SHIFTar/randdom.c#L3ENTROPY_SHIFTid="_7"t1 class="6)include/asm-i386/irq_re6s.r5o64 wake 5pultiply in
 366 366
wetr 

ori368">crng_351ACCESS_ONCE68">crng_351
="sref">stor"e=xa=ah67" id="L367" TS id="L36rs/char/randdom.c#L3 id="L36rs/chid="a_7"t1 322pool6with only6three taps, instead of t6e s5a65eling 5intelligent

pool6w class="6three taps, instead of t6e s5a65r sugg5.  The only
 366 307
<                 * C5f="d:c#L3havdom.cacrs/ch for"d=""""ssibility"""ar/randanddddddhar/random.c#L308" id="L36"x"=pege76)include/asm-i386/irq_re6s.r5a65class=5comment">/*
""dr51er"  Evenandddddar/randanddddddhar/random.c#L308" id="L36rand}ege76)include/asm-i386/irq_re6s.r5b66r of b5ts, then we
 3,349" claax93< 7molbi,6ers/css="6ine" name="L366"> 3665ng on write
 3,349" claax93< 7molbi,6e class="6)include/asm-i386/irq_re6s.r5n66ine" n5dev/random.
 3,349" claax93< 7molbi,6e" class=6)include/asm-i386/irq_re6s.r5n66sions 5which would
 3,349" claax93< 7molbi,6eith only6)include/asm-i386/irq_re6s.r5b66 the u5certainty).
 3,349" claax93< 7molbi,6eith only6andom.c#L314" id="L314" 6las5G66ulatio5comment"> *
 3,349" claax93< 7molbi,6eOlwpege76ine" name="L366"> 366
 3,349" claax93< 7molbi,6e class="6id="L2Mix lassresult com6aom3c66r sugg5r Generator
 3,349" claax93< 7molbi,6e class="6r p4">asm/io.h>
<6s.r4G66ine" n5me="L307"> 307
<                 * aaa(efh6d="L Th/-hre_="L2)*0.7869..inicl"licass=atclaom3lasslow-orlassolbic36)-&gpege76)include/asm-i386/irq_re6s.r4G66class=5comment">/*
lassm.c#nicl"licass=atclaom3lasslow-orlassolbic36a>:1pege76)include/asm-i386/irq_re6s.r4=67r of b5ts, then we
psstilldbin"dddddar/randanddddddhar/random.c#L308" id="L36x":1pege76)include/asm-i386/irq_re6s.r4=67sref">5ng on write

 3,349" claax93< 7molbi,6def]pege76)include/asm-i386/irq_re6s.r4=67sions 5which would
 3,349" claax93< 7molbi,6dith only6)include/asm-i386/irq_re6s.r4=67 the u5certainty).
 3,349" claax93< 7molbi,6dith only6andom.c#L314" id="L314" 6las4=67ulatio5comment"> *
 3,349" claax93< 7molbi,6dOlwpege76ine" name="L366"> 366

 366dfracar/randdom.c#L3nfracid="_7"t1="sref">stor"e=xa=ah67" id="L367" TS(ENTROPY_SHIFTar/randdom.c#L3ENTROPY_SHIFTid="L+62_7"t1

pool6)-&gpege76)include/asm-i386/irq_re6s.r4i68class=4eserved the
mref="+code,n"linemnvoida(6ers/char/randd6dfracar/randdom.c#L3pnfracid=", a hr5f="dr521rs67" _="L2(

stor"e" name="Ladfracar/randdom.c#L3anfracid="*3)=aass="sre6ers/char/randdrar/randdom.c#L3367" _7"t1 366
 366
 366
67" _="L2( 366
 366
pool6s-&gpege76andom.c#L272" id="L272" 6las4a69class=5eserved the

"snef">: negatworad="L Th/oandflow:""""""%s rs/ch %d\n"plify u*367" id="L367" inoolwords" classN6"a=atic s6ruct ="sref">stor"e=xa=ah67" id="L367" TShr4f="dr49ers/char/rand.h67="L367" ode=poolw id="L36rs/char/randdom.c#L3 id="L36rs/chid="a_7"t1 366
 366
 366 366
67" _="L2( 366crng_351="sref">stor"e=xa=ah67" id="L367" TS id="L36rs/char/randdom.c#L3 id="L36rs/chid=", a hr5f="dr521rsori368">crng_351ori368">crng_351 366wetr st,ss="7ine" name="L366"> 366
 366
="sref">stor"e=xa=ah67" id="L367" TS id="L36tota>(id="L+ id="L367" clasinddr/rar/randdom.c#L3nar/ras_o_7"t1las"L2/char/ranvoidah6las"L2/id="L&="L3id="L367" 9 c="sref">stor"e=xa=ah67" id="L367" TS id="L36tota>(id="L&"sre12832, (pool7ers/cege77)include/asm-i386/irq_re7s.r5 70eling 5intelligentlas"L2/char/ranvoidah6las"L2/id="L= oolwords" classNcodea? 7m: 14))" na7a5s/cege77)ne" name="L366"> 366
="sref">stor"e=xa=ah67" id="L367" TS id="L36tota>(id="L360_7"t1 366
 366
 *

="sref">stor"e=xa=ah67" id="L367" TShr4f="dr49ers/char/rand.h67="L367" ode=poolwddr/rar/randdom.c#L3nar/ras_o*367" id="L367" inoolwords" classN7a9s/char/7ane" name="L366"> 366 322="sref">stor"e=xa=ah67" id="L367" TS id="L36tota>(id="="e
> * a_7"t1 322
 322="sref">stor"e=x ==id="L367" culsine" na" id="(pool72" class=7line" name="L322"> 322 id="L36rs/char/randdom.c#L3 id="L36rs/chid="L&"sr&"sre6ers/char/randdENTROPY_SHIFTar/randdom.c#L3ENTROPY_SHIFTid="_7"t1> * a_7"t1 322
 322pool72" class=7line" name="L322"> 322

="sref">stor"e=xa_7"t1> * a_7"t1 322
 68">="sref">stor"e=xa=ah67" id="L367" TS id="L36rs/char/randdom.c#L3 id="L36rs/chid="L&"sr&"sre6ers/char/randdENTROPY_SHIFTar/randdom.c#L3ENTROPY_SHIFTid="_7"t1> * a_7"t1 366
 366/*
7and5n72ate an5 the input,
 hr5f=_ 7"t_wakdup6dr/rar/randdom.c#L3 hr5f=_ 7"t_wakdup6dr/rid="a , (pool78e3lpege77)include/asm-i386/irq_re7s.r5m72h67" id="L367" _ns
> * a_7"t1
poolwokill_fasy5vas_odd="L367" culsine" nafasy5vlassnef">poolwofasy5vas_o="e
poolwoSIGIOas_o="e
> * a_7"t1
pssomdar/randanddddddhar/random.c#L308" id="L37ROlwpege77)include/asm-i386/irq_re7s.r5a72class=5trubel, and
L33175%ffullinicl"licass=atclaom3lasslow-orlassolbic37ers/char/7andom.c#L266" id="L266" 7las5a72r sugg5r Generator
pege77)include/asm-i386/irq_re7s.r5a72class=5.  In their hr5f=_write_wakdup6dr/rar/randdom.c#L3 hr5f=_write_wakdup6dr/rid="L&="L3id="Lm.c#L347" id="""""""""""""""""*36779s/char/7)include/asm-i386/irq_re7s.r5a72 state5  Since alllas"L2/char/ranvoidah6las"L2/id="L&="L3id="Lm.c#L347" id="""""""""""""""""*367 clapege77)include/asm-i386/irq_re7s.r5a73ate an5 the input,stor"e" name="L3hr5f=_ 7"t_wakdup6dr/rar/randdom.c#L3 hr5f=_ 7"t_wakdup6dr/rid="a , (pool7 clapege77)include/asm-i386/irq_re7s.r5a73produc5 collisionsstor"e" name="Lom.dr68">crng_351(id="_7"t1> * a_7"t1

crng_351
crng_351(pool7 5s/cege77)include/asm-i386/irq_re7s.r5S73ulatio5 controlledb<ing_classcheduah_wor8as_odd="L367" culsine" naom.dr68">crng_351b<ing_clas> * a_7"t1
="sref">stor"e=xa=ah67" id="L367" TS id="L36tota>(id="L360_7"t1 366


 5period over
 366
 366stor"e" name="L368">="sref">stor"e=x"a"dr56ers/char/randdddr/rar/randdom.c#L3nar/ras_ord5ddddddddddddr52 ="srlworid="L367ode]pege77)include/asm-i386/irq_re7s.r5o7 class, (pool7>st]pege77)include/asm-i386/irq_re7s.r5o7deling 5intell*367" "dr56ers/char/randdnar/r_marl3a>sta=" namehnar/r_marid="L36("dr)(~0UL&"sr&"sre(6ers/char/randdENTROPY_SHIFTar/randdom.c#L3ENTROPY_SHIFTid="L+61)a_7"t1st]pege77)include/asm-i386/irq_re7s.r5o74ulatio5 4:254-266)
> * a_7"t1st]pege77)include/asm-i386/irq_re7s.r5o74class7"t1> * a_7"t1x"=pege77ine" name="L366"> 366
 366
mref="+code,n"linemnvoida(6ers/char/randdddr/rar/randdom.c#L3nar/ras_o*k Shift
sta=" namehnar/r_marid="a_7"t1


="sref">stor"e=x="L367" ode=poolwddr/rar/randdom.c#L3nar/ras_oa_7"t1 322


 366 307
< haCRNG use efCHACHA2aterandom.c#L347" id="""""""""""""""""*367"x"=pege77)include/asm-i386/irq_re7s.r5a75class=5comment">/*

 366
stor"e" name="LHZar/randdom.c#L3HZas_ord5ddddddddddddr52 ="srlworid="L367e" class=7)include/asm-i386/irq_re7s.r5n76class=5comment">/*


 366
asm/io.h>
<7s.r4G76ine" n5me="L307"> 307
< * Hackhm.cdealom.c#Lcrazy ndor5cocn progams whedddddy L3OSall tryingid/randanddddddhar/random.c#L308" id="L37ex"=pege77)include/asm-i386/irq_re7s.r4G76class=5comment">/*
5ng on write

>stor"e" name="Lcrngnne=""(sref"e
> * a_7"t1> * a_7"t1
 366
ords" class__micrngx" claom.c#L368crngas_ord5ddddddddddddr52 ="srlworid="L367ran pege77)include/asm-i386/irq_re7s.r4=77r sug, (pool7" cl,ss="7ine" name="L366"> 366> * a_7"t1="sref">storvid="_7"t1> * a_7"t1
memcp 
"exp">ps32-byte k"plify u* 16);y5omial (that



 366ichar/ranvoidah6ichar/ranvoidah6pool7) cl,ss="7ine" name="L366"> 366="sref">storvid=")L&="L3id="Lm.c#L347" id="""""""""""""""""*367)-&gpege77ine" name="L366"> 366="sref">storvid=")rd5ddddddddddddr52 ="srlworid="L367=x"),ss="7ine" name="L366"> 366="sref">storvid="L367" add_ptTS hr5f=_get_51ers/c
 366ichar/ranvoidah6="sref">storvid="_7"t1> * a_7"t1
jiffierar/randdom.c#L3jiffierid="L-span>
 366
 366
<">ords" class__micp
 366pool7e=x",ss="7ine" name="L366"> 366poolworlagce=x"a=ah67" id="L367" >oolwords" class7c-&gpege77ine" name="L366"> 366ords" class__mipoolwords" class8a>st,ss="8ine" name="L366"> 366
 366b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"ard5ddddddddddddr52 ="srlworid="L368 cl),ss="8ine" name="L366"> 366pool8ers/cege78)include/asm-i386/irq_re8s.r5 80eling 5intelligentb<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1 366 366
 366

<">)id="L367" culsine" naprimar36rrngf="+code,n"lineprimar36rrngid=".e
 366

pool8e9s/cege78)ne" name="L366"> 366
crngndde=_cchar/randdom.c#L3crngndde=_cchid=" %fpan>
ords" class__micp 322st,ss="8line" name="L322"> 322
 322CRNG_INIT_CNT_THRESHar/randdom.c#L3CRNG_INIT_CNT_THRESHid=")L, (pool82" class=8line" name="L322"> 322 322 322
"snef">: faah dde= done\n"plify ua_7"t1 322
 322
b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1 366 366
8and5n82k poly5omial (that

ords" class__micrngx" claom.c#L368crngas_o,se=poolwords" class__mix_clas_ode=p" cladom.c#L367" id="L367" ="sref">stor"e" name="L 68">="sref">stor"e=xay5omial (that
pool8e=x"pege78)include/asm-i386/irq_re8s.r5a82class=4eserveto bepoolworlagce=x"a=ah67" id="L367" >oolwords" class8ers/cege78)include/asm-i386/irq_re8s.r5a82eling 5intell"dr5
oolwords" class8e5s/cege78)include/asm-i386/irq_re8s.r5a82ulatio5 contrunionL, (pool8ROlwpege78)include/asm-i386/irq_re8s.r5a82class=5e don't
b<ing_clasbL368id="[7" add_ptTSCHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_SIZEid="]a=ah67" id="L367" >oolwords" class8e7s/cege78andom.c#L266" id="L266" 8las5a82r sugg5.  The onlyoolwords" class8ers/char/8)include/asm-i386/irq_re8s.r5a82class=5.  In } pan>
b<ing_clasbufe=x"a=ah67" id="L367" >oolwords" class8e9s/cege78)include/asm-i386/irq_re8s.r5a82s="sref">7and5n72ate an5 the input,="sref"HRESHid=")L, (pool78clapege77)include/asm-i386/irq8re7s.r5a73produc5 collh6="sref""id=",id="L367" cua hr5f="dbuf">b<ing_cl, 32t;pld="a * 12, 0);y5omial (that

pool785s/cege77)include/asm-i386/irq8re7s.r5S73ulatio5 conte onlyb<ing_cl6rrngid=".eb<ing_clasa * 12, 0);y5omial (that
pool8ROlwpege77andom.c#L275" i8="L278" 7las5a73oeck, 5 madee onlyb<ing_cl6rrngid=".eb<ing_clasAesref[4]*367" id="L367" inoolword8ROlwahna78 class="7ine" name="L3668> 3668/a7b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolwor * 12, 0);y5omial (that
ichar/ranvoidah6ichar/ranvoidah6="sref">storvid="_7"t1> *8r5f="dr578 class="7ine" name="L3668> 36684a8="sref">storvid=")L&="L3id="Lm.c#L347" id="""""""""""8rid="L3678de]pege77)include/asm-i386/irq84 7las5a73class=4eserved tll="sref">storvid=")rd5ddddddddddddr52 ="srlw8ef">pool78st]pege77)include/asm-i386/irq84e7s.r4i78eling 5intelligent="sref">storvid="L367" add_ptTS hr5f=_get_51ers/c
ichar/ranvoi+4dah6b<ing_cl6rrngid=".eichar/ranvoidah/sp60;
="sref">storvid="_7"t1> *8rf">pool8ROlwpege77)include/asm-i386/irq84/8>
b<ing_cl, sref[4]* ="L2of(6ers/ca hr5f="dbuf">b<ing_clTid="L+61)a_7"t1 *jiffierar/randdom.c#L3jid="L+61)a_7"t1
 3285/8>
"om.cf">: faah dde= done\n"plify ua_7"t1
 *
b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1

crcode_aftnedr51e"L367ndo(6ers/c_ptTSjiffierar/randdom.c#L3jisL368id=", a hr5flsine" naprimar36rrngf="+code,n"lineprimar36rrngid=".e

asm/io.h<8a>>8
<7s.re 5pommen 5period over
7and5n72ate an5 the i" id="L378>:1pege77)include/asm-i386/irq8re7s.r5m82produ.4 As long asords" class__micrngx" claom.c#L3685a82s="sref">7and5n72ate an5 the i"Olwahna78rs/css="7)include/asm-i386/irq87e7s.r5a73produc5 collisions
CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_torvid=")rd5ddddddddddddr52 ="srlw8ssolbic378":1pege77)include/asm-i386/irq87e8s.r5m82h67" , (="v_clasL368id=", a hr5f="dr521rsflagclassnef">poolwodid="++a , (
crcode_aftnedr51e"L367ndo(6ers/c_ptTSjiffierar/randdom.c#L3jisL368id=", a hr5flsine" nacrngx" claom.c#L368crngas_oa=ah67" id="L367" TSdde=_rand(
ords" class__micrngx" claom.c#L368L368id=", a hr5flsine" nacrngx" claom.c#L368crngas_o ==id="L367" culsine" naprimar36rrngf="+code,n"lineprimar3=?rr"e=x ==id="L367" culsine" na" id="(pool78 cl,ss="7ine" name="L3668> 36687 7las5=70e drai5comment"> *
b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1="v_clastorvid=")rd5ddddddddddddr52 ="srlw8a_7"t1="v_clalagce=x"a_7"t1b<namnam#L3a hr5l_irqsavfas_odd="L367" culsine" nacrngx" claom.c#L368crngas_oa=ah67" id="L367" TS.4 Aex" claom.c#L368.4 Aes#39;t
 *

b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1


CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_torvid=")rd5ddddddddddddr52 ="srlw8ef">pool78 cl,ss="7ine" name="L3668> 3668/a7ords" class__micrngx" claom.c#L36_randid="L367" addNULD_INTERVALar/ranNULD id=lagce=x"a_7"t1stss="7ine" name="L3668> 3668/a7
((oolword14))" na78a=atic s7ruct oolword15f="dr578[1],ss="7ine" name="L3668> 3668/a7> *8r5f="dr578Olwpege77ine" name="L3668> 36689 7las5a73oeck, 5 madee onlyoolword1id="L3678an pege77ine" name="L3668> 36689/8>ords" class__micrngx" claom.c#L368L368id=", a hr5foundde=_wae=x" claounclasrlagce=x"a_7"t1pool78=x",ss="7ine" name="L3668> 36689<7s.re 5pommen 5period over
7and5n72ate an5 the 9s" class89>st,ss="8ine" name="L3669> 36690e7s.r4=77r of b5ts, then we
5ng on write
a hr5 ounIf3d(i4ers/re isspan>

kechad=provide backm.c#kNormbrotecnionin damagdinicl"licass=atclaom3lasslow-orl9ROlwahna893l),ss="8indom.c#L272" i9="L279" 8s.r4=77ine" n5dev/random.
pool89rs/cege78)include/asm-i396/irq90e7s.r5b76 thdu.4 As long asords" class__micrngx" claom.c#L3685a82s="sref">7and5n72ate an5 the 9ROlwahna895s/cege78)ne" name="L3669> 3669/a8nfo5 80ulatio5 conttttttttttttttttttttt't
CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_>stor"e=x"a"dr56ers/cuscrngnresa2/char/ruscr id="yid="[8]a=ah67" id="L367" >oolwor9ROlwahna896s/cege78)ne" name="L3669> 36690a7poolworlagce=x"a=ah67" id="L367" >oolwor9ROlwahna898s/cege78)ne" name="L3669> 36690 7las5=70e drai5comment"> *ords" " namflagclassne#L3jisL4 Aesref">ords" rngnresa2/char/rdolworlagce=x"a=ah67" id="L367" >oolwor9R9lwahna898&gpege77ine" name="L3669> 3669/a8>> *9ROlwahna89" class=8line" name="L329"> 3291>8and5n82k poly5omial (that
st,ss="8line" name="L329"> 3291e7s.r4n78produc5 colli7" adduscrngnresa2/char/ruscr id=storvid="L367" add_l wo_ulass__micpords" uscrngnresa2/char/ruscr id=Aesref[4]* ="L2of(6ers/char/randd__ue" name="L367wROl_rlagce=x"a_7"t1 329
CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCKh6pool89" class=8line" name="L329"> 329
pool89rs/cege78line" name="L329"> 329 329
 329 *
b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1 329 *)id="L367" cutmlass__micpoolwor9ROlwahna89rs/char/8ine" name="L3669> 36691 7las5=70e drai5comment"> *ichar/ranvoidah6ichar/ranvoidahesref[4]_7"t1ords" rngnresa2/char/rdolwo++SIZEid="]Lddh>ords" / namflagclassne#L3ji++lagce=x"a_7"t1

b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1
pool89=x"pege78)include/asm-i396/irq92e7s.r5n76class=5comment">/*

CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_>stor"e=x"a"dr56ers/cuscrngnresa2/char/ruscr id="yid="[8]a=ah67" id="L367" >oolwor9s" class895s/cege78)include/asm-i396/irq9re8s.rpool89Olwpege78)include/asm-i396/irq9re8s.r5a82classa2/as_ode=poolwords" class__micrngn.4 Aex" claom.c#L368crngn.4 Aesref">ords" class__micrngx" claom.c#L36_randid="L367" addNULD_INTERVALar/ranNULD id=lagce=x"a_7"t1
((oolwor9ef">pool79clapege77)include/asm-i396/irq93a8oolwor9a_7"t1> *9r5f="dr579=x"pege77andom.c#L272" i9="L279" 7las5a73class=4eserve onlyoolwor9a" class89rs/cege77)include/asm-i396/irq93e7s.r4i78elinai5comment"> *ords" class__micrngx" claom.c#L368L368id=", a hr5ftmlass__micpoolwor9a" class895s/cege77)include/asm-i396/irq93 7lase 5pommen 5period over
pool89Olwpege77andom.c#L275" i9="L2793l7nfo 5pommen 5period over
ords" a hr5f="dbuf">b<ing_cl, uc5 colli7" add/de=poolw="L2_=x" claom.c#L368="L2_=sref"eoolwor9a" class89-)atic s7ruct CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCKeyid="[8]a=ah67" id="L367" >oolwor95f="dr5679>stpege77)include/asm-i396/irq94e7s.r5a73ate 't
CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCK_eyid="[8]a=ah67" id="L367" >oolwor95f">pool79rs/css="7ine" name="L3669> 36694e7s.r5a73prodtor"e=x"a"dr56ers/clargeidaques"Lar/rhifh67" idlargeidaques"L3jic#L3ai5comment"> *

nt_ hr5f=_byterar/rannt_ hr5f=_"6pool79st]pege77)include/asm-i396/irq94e7s.r4i78eling 5inteluc5 "L367ndo(6ers/clargeidaques"Lar/rhifh67" idlargeidaques"L3jic"Laasse0ad="L3id="L367" 9 n6cr_reschcrngnresa2/char/rn6cr_reschcrrngn 7"6ords" currengndde=_cchar/randurrengwROl_r6pool89Olwpege77)include/asm-i396/irq94 7las5a73oeck, 5 madeio5 contg 5inteluc5 "L367ndo(6ers/creoolw="L2_=x" clareo id=st=as_o < 0rd5ddddddddddddr52 ="srlw9rid="L3679 class="7)include/asm-i396/irq94/8>oolwor95" class89st]pege77)include/asm-i396/irq94a7oolwor95f="dr5679x"=pege77ine" name="L3669> 36694a8>
oolwor9ROlwahna79=7]pege77)include/asm-i396/irq95e7s.r5a73produc5 colle 5pommen 5period over
 3295/8>
CHACHA2a_BLOCK_SIZEar/randdom.c#L3CHACHA2a_BLOCKhlagce=x"a_7"t1
b<ing_cl, uc5 colli7" addtmlass__micpoolwor95id="L3679 class="7three taps, ins9ead o95/8>oolwor9"""""*3679st]pege77ine" name="L3669> 36695a7
7and5n72ate an5 the 9"""""*3679and}ege77)include/asm-i396/irq96/8>> *9"Olwahna79rs/css="7ine" name="L3669> 36696e7s.r5a73produc5 the input,b<ing_cl +ahL368id="[7" addline" namichar/ranvoidah6> *9"5f="dr579 class="7)include/asm-i396/irq96a8> *9"Olwahna79" class=7)include/asm-i396/irq96/8>
 *
> *9"" class89ith only7andom.c#L314" i9="L3196a7

> *9"""""*3679 class="7r p4">asm/io.h<9a>>9
<7s.rah6> *9"f="dr5679x"=pege77)include/asm-i396/irq96a8>> *9" id="L379>:1pege77)include/asm-i396/irq9re7s.re 5pommen 5period over





pool79 cl,ss="7ine" name="L3669> 36697<7s.rah6> *9a_7"t1

> *9r5f="dr579":1pege77)include/asm-i396/irq9re7s.r4n78h67"to beL368id="[7" addran67deltadde=_rand(> *9r""""*3679-&gpege77)include/asm-i396/irq98e8s.r5a82class=4eserve368id=", a hr5fdont_coun hr5f=_get_51ers/cpool79 cl,ss="7ine" name="L3669> 3669/a7

stss="7ine" name="L3669> 36699e7s.r4=77sref">5ng on write
ords" a hr5f="dbuf">b<ing_cl, s=4eservetor"e=x"a"dr56ers/csrefolw="L2_=x" claom.c5f=_"yid="[8]a=ah67" id="L367" >oolwor91id="L3679an pege77ine" name="L3669> 36699/8>pool79=x",ss="7ine" name="L3669> 3669988s.r5a82class=4eserveto beL368id="[7" add" TSdde=_rand( hr5f=_get_51ers/cpoolworlagce=x"a=ah67" id="L367" >oolwor10s" class810s" cege77ine" name="L36610s" >10s"7s.r5a/pre>agce=x"a=ah67" id="L367" >oolwor10s1 class810s>stss="7ine" name="L36610s>s>10se7s.r4n78produc5 colli7" addm.c#e_add_device6arch_gnesr5f=_byterar/ranm.c#e_add_device6arch_gnesrr5f=_'t
> *10s2 class810sc}pege77)include/asm-i310sc}>10s27s.r4n78produc5 colli7" add/spand67" stryt_&l_irqsavf="dr49ers/c/67" stryt_&l_irqsavfas_odd="L367" culsine" na" id="(
b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t110s37s.r4n78produc5 colli7" add_mixcode"_t_ hr5f=_byterar/ran_mixcode"_t_ hrl_irqsavfas_odd="L367" culsine" na" id="(b<ing_cl, uc5 colli7" add/de=olw="L2_=x" claom.c5f=_"lagce=x"a_7"t1 *
<">)id="L367" cut TSdde=_rand(> *10s5 class810s1],ss="7ine" name="L36610s1]>10s57las5=70e drai5comment"> *

b<ing_clasL368id=", a hr5f="dr521rsflagclassnef">poolworlagce=x"a_7"t1
10s<7s.rah6> *10s9 class810s&gpege77ine" name="L36610s&g>10s97s.r5m82pro5m2/as_ode=poolwords" coder6archs__micrngn.4 Aex" clacoder6archs__mic8>10" 7s.rah6> *1011 class810>st,ss="8line" name="L3210>st>10"e7s.r4=77sref">5ng on write
10"e7s.r4=77ine" n5dev/random.
10" 8s.r4=77ine" n5dev/random.


10ol7las4=77ine" n5dev/random.
ords" /L367" TS.4 Aex" claom.c#L368,ss=4eserve368id=", a hr5fnum5f=_byterar/rannum5f=_"yid="[8]a=ah67" id="L367" >oolwor10o2 class810" class=8)include/asm-i310" c>10oe8s.r5m82h67" , (10o37s.r4n78prod5m2/as_ode=poolwords" r5f=_ge__&l_irqrede=p" clador5f=_ge__&l_i7s.r4n78id="]Lddh>ords" cs__micrngx" clar8>10o47s.r4n78prod5m2/as_5m82h67" , (10oe7s.r5S73ulatio5 contto beL368id="[7" add_ptTSjiffierar/randdom.c#L3jid="L+61)a_7"t110o 7las5a73oeck, 5 mades=4eserve368id=", a hr5fnyclesar/randdichar/rnyclesL3jid="L+61)a_7"t110o/8>10o88s.r5a82clas}rai5comment"> *10o98s.r5a82clasto beL368id="[7" adddeltadde=_rand(10cl7s.rah6> *1031 class810clapege77)include/asm-i310cla>10ce7s.r4n78produc5 colli7" addpreempt_disadrerruptiwahrefhrepreempt_disadret_51erd="L+61)a_7"t110ca8
10c37s.r4n78produc5 colli7" add/=p"rerruptiwahrefhres=p"re5f=_6rrngid=".ejiffierar/randdom.c#L3ji_randid="L367" add_ptTSjiffierar/randdom.c#L3jid="L+61)a_7"t110ce7s.r4i78elinai5comment"> * hr5f=_get_51ers/c10c57las5=70e drai5comment"> *10c/8> * *
<">)id="L367" cu/=p"rerruptiwahrefhres=p"re5f=_8Lsref[4]* ="L2of(6ers/c/=p"rerruptiwahrefhres=p"re5f=_r_dah6> *1038 class810-)atic s7ruct > *1039 class810x"=pege77)include/asm-i310x"=>10ce7s.r5 73 staw=77sref">5ng on write
stpege77)include/asm-i310>st>10>s7las4=77ine" n5dev/random.<<<<<<<<<* Calculmiconumber o4ebits"of arch_gnesr wchprobadry addrvin damagdinicl"licass=atclaom3lasslow-orl1041 class810rs/css="7ine" name="L36610rs/>10>e7s.r4=77sref">5ng on write<<<<<<<<<* Wchcakc dwao accoun ns/chfirst8Lsecondiandithird-order deltasspan>
2 class810 class="7ine" name="L36610 cl>10>e7s.r4=77ine" n5dev/random.<<<<<<<<<* in order panmakc our t_&immicin damagdinicl"licass=atclaom3lasslow-orl1043 class810de]pege77)include/asm-i310de]>10> 8s.r4=77ine" n5dev/random.<<<<<<<<<*span>
10>/7>
5 class810st]pege77)include/asm-i310st]>10>57las5=70e dr id=!d="]Lddh>ords" /L367" TS.4 Aex" claom.c#L3688crngas_oa=ah67" id=dont_coun hr5f=_get_51ers/c6 class810Olwpege77)include/asm-i310Olw>10> 7las5a73oeck, 5 madee onlyjiffierar/randdom.c#L3ji_-andid="L367" add/L367" TS.4 Aex" claom.c#L3688crngas_oa=ah67" id=lan67" TSdde=_rand(> *10>7 class810 class="7)include/asm-i310 cl>10> 8las5a82r sugg5.  The onlyjiffierar/randdom.c#L3jidah6> *10>8 class810st]pege77)include/asm-i310st]>10><7s.rah6> *1049 class810x"=pege77ine" name="L36610x"=>10>a8>> *105" class810 class="7ine" name="L36610 cl>10 c8las5a82r sugg5.  The only> *1051 class810=7]pege77)include/asm-i310=7]>10 e7s.r 5pommen 5period over
10 a8> *10 3 class810de]pege77line" name="L3210de]>10 /8>> *10 4 class810ith only7three taps, ins10ith>10 /7>
10 e7s.r5S73ulatio5 contuc5 "L367ndo(6ers/cdeltadde=_rand(> *1057 class810 class="7three taps, ins10 cl>10  8las5a82r sugg5.  Thuc5 "L367ndo(6ers/cdeltarandd__ue" name=deltar id=_ah6> *10 9 class810x"=pege77)include/asm-i310x"=>10 a8>10an710aa8> *1063 class810" class=7)include/asm-i310" c>10a/8>10aa7
5ng on write
10a 8las4=77ine" n5dev/random.<<<<<<<<<<<<<<<<<* delta is now minimum absolute deltain damagdinicl"licass=atclaom3lasslow-orl1068 class810 class="7r p4">asm/io.h<10 cl>10aa710aa7:1pege77)include/asm-i310>:1>10>:7
 * *> *1072 class810":1pege77)include/asm-i310":1>10>a8
10>37s.r4n78produc5 colli7" addpreempt_enadrerruptiwahrefhrepreempt_enadret_51erd="L+61)a_7"t110>e7s.r}="L+61)a_7"t110>a7

10>/8>9 class810x"=pege77)include/asm-i310x"=>10>a8>10rs7
10re7s.r4n78produ=77r of b5ts, then we
10r/8>10r/7>
10r57las5=70e drai5comment"> * *
 * *> *1089 class810-&gpege77ine" name="L36610-&g>10r97s.r}="L+61)a_7"t110x"7 * *> *1091 class810a>stss="7ine" name="L36610a>s>10xe7s.r 5pommen 5period over
10x/8>> *1093 class810-&gpege77andom.c#L272" i10-&g>10xe7s.r5n76class=5comment">/*
/*

10x88> *7and5n72ate an5 the 11s" class811s" cege77ine" name="L36611s" >11008> *
<5m8roolw="L2_=x" claom8ro5f=__o < 0rd5ddddddddddddr52 ="srlw11s1 class811s>stss="7ine" name="L36611s>s>11se7s.r5m82h67" , (110e7s.r4n78h67"to beL368id="[7" adddeltadde=_rand( hr5f=_get_51ers/c110e7s.r5n76class=5comment">/*
 * * *> *11s6 class811slwpege77ine" name="L36611slw>110/8> *> *11s7 class811sn pege77ine" name="L36611sn >11077s.r4i78elina=77r of b5ts, then we
110 7las5=70e drai5comment"> * * * *> *11s9 class811s&gpege77ine" name="L36611s&g>110e7s.r5 73 stawa5s possible.> *111" class811" class=8line" name="L3211" c>111e7s.re 5pommen 5period over
st,ss="8line" name="L3211>st>11"e7s.r#else 5pommen 5period over
11"e7s.r#deft  *11" 8s.r4=77 the #endif7"t1> *11"4 class811rs/cege78line" name="L3211rs/>111/7>
 *<__u3randd__ue" name=__u3ridah6't
ords" hr5f="dbuf">b<ng_cl, 5m2/as_ode=poolwords" p hressar/randdichar/rp hress8>ords" ressar/randdichar/rress8>ords" ptcs__micrngx" claptcclas_raqai5comment"> *<__u3randd__ue" name=__u3ridah6i)Iligent> *1118 class811rs/char/8ine" name="L36611rs/>111<7s.rah6> *11"9 class8119s/cege78ine" name="L366119s/>111e7s.r5 73 stauc5 "L367ndo(6ers/cressar/randdichar/rress8>oolwor1"e" class811olw)n_ur8ndom_seed" clas11olw>112n7> *11o1 class811s/ctic s8ruct b<ng_cl8crngas_oa=ah67" id=res_idx5f=_byterar/ranres_idx8>112a8b<ng_cl8crngas_oa=ah67" id=res_idx5f=_byterar/ranres_idx8>> *11o3 class811=x"pege78)include/asm-i311=x">11o37s.r4n78prods=5.  I*]* ="L2of(6ers/cptcs__micrngx" claptcclas_+e368id=", a hr5fhr5f="dbuf">b<ng_cl8crngas_oa=ah67" id=res_idx5f=_byterar/ranres_idx8>> *1124 class811rs/cege78)include/asm-i311rs/>112e7s.r}="L+61)a_7"t1112a7
112 7lasdu.4 As long asoolwor1"e7 class8117s/cege78andom.c#L266" i117s/>112/8>11o88s.r5a82clas5m2/as_ode=poolwords" r5f=_ge__&l_irqrede=p" clador5f=_ge__&l_i7s.r4n78id="]Lddh>ords" cs__micrngx" clar8>11298s.r5a82clas5m2/as_ode=poolwords" fan67 na" id="(ords" han67 na" id="(> *113" class811clapege787dd_pt* a_7"t1<11cla>11308s.r5a82clas5m2/as_ode=poolwords" p hressar/randdichar/rp hress8>
> *1131 class811clapege77)include/asm-i311cla>11ce7s.r4n78prods=4eserveto be7" id="L36ligent
<_ptTSjiffierar/randdom.c#L3jidah6> *1132 class811e3lpege77)include/asm-i311e3l>11327s.r4n78produc5 colli7" addnycleschar/randdichar/rnycleschidah6=80h67" id="L36ligent hr5f=_get_51ers/c11c37s.r4n78produc5 colli7" add__u3randd__ue" name=__u3ridah6666666666666666666ligent11ce7s.r4i78elinai5comment"> *<__uith only7)i name=__ua/8>11c57las5=70e drs=4eserveto be7" id="L36ligent11c/8>> *1137 class811 class="7ine" name="L36611 cl>113a7s.r5a7e wake 5pultiply in
113a8>> *114" class811>stpege77)include/asm-i311>st>11407s.r4n78produc5 colli7" addn_high5f=_byterar/rann_high8>> *1141 class811rs/css="7ine" name="L36611rs/>114e7s.r4n78produc5 colli7" addj_high5f=_byterar/ranj_high8>> *1142 class811 class="7ine" name="L36611 cl>11427s.r4n78produc5 colli7" addfan67 na" id="(> *1143 class811de]pege77)include/asm-i311de]>11437s.r4n78produc5 colli7" addfan67 na" id="(> *1144 class811st]pege77)include/asm-i311st]>114e7s.r4i78elinai5comment"> * *<_RET_IP_5f="d__u8char/raRET_IP_nvoidah6> *1145 class811st]pege77)include/asm-i311st]>11457las5=70e drai5comment"> *6 class811Olwpege77)include/asm-i311Olw>114/8> *7 class811 class="7)include/asm-i311 cl>11> 8las5a82r sugg5.  The only> *1148 class811st]pege77)include/asm-i311st]>11><7s.rah6> *1149 class811x"=pege77ine" name="L36611x"=>114e7s.r5 73 stawa5s possible.> *115" class811 class="7ine" name="L36611 cl>11507s.r4n78produc5 colli7" addadd_efakd_up6_bench5f=_byterar/ranadd_efakd_up6_benchl_irqai5comment"> *> *1151 class811=7]pege77)include/asm-i311=7]>11 e7s.r 5pommen 5period over
115/8>ords" crnghreadet_51ers/c115/8>
11 e7s.r5S73ulatio5 conttttttttttttttttttttsref[4]* ="L2of(6ers/cfan67 na" id="(11  7las5a73oeck, 5 madeio5 contL2_=sref"e> *1157 class811 class="7three taps, ins11 cl>11  8las5a82r sugg5.  Thio5 contL2_=sref"e> *1158 class811st]pege77ine" name="L36611st]>11 a711 a8>11an7116/8>11a/8>ords" code_afakdass__micp *11a/8>11aa7
 *11678>ords" /.c#Ltryn>
b</.c#Ltryn>

b<ing_cla)rid="++a , (asm/io.h<11 cl>116a7116e8s.r5a82s="sref">7and5n72ate an5 the 117" class811>:1pege77)include/asm-i311>:1>11707s.r4n78produc5 colli7" addfan67 na" id="(> *1171 class811rs/css="7)include/asm-i311rs/>117e7s.r4n78produc5 colli7" add_hmixcode"_t_ hr5f=_byterar/ran__mixcode"_t_ hrl_irq ==id="L367" cucs__micrngx" clar8>
<">)id="L367" cufan67 na" id="(> *1172 class811":1pege77)include/asm-i311":1>117a8
11>37s.r4n78produ=77sref">5ng on write
117/7>
11757las4=77ine" n5dev/random.<<<<<<<<<* add it pans/chode"i  Forns/chsakc of pandooia don't le ns/cspan>
9 class811x"=pege77)include/asm-i311x"=>117e7s.r5 73 stauc5 "L367ndo(6ers/carch#L3 h]nom.c#oeed_to b5f=_byterar/ranarch#L3 h]nom.c#oeed_to br5f=_gas_o ==id="L367" cuseedolw="L2_=x" claoeed8>118c8las5a82r sugg5.  The only
<">)id="L367" cuseedolw="L2_=x" claoeed8>> *1181 class811de=pege77)include/asm-i311de=>118e7s.r5a73produc5 the input,> *1182 class811":1pege77)include/asm-i311":1>118a8
11837s.r4n78produc5 colli7" add/.c#Lunn>
b</.c#Lunn>

b<ing_cla)dah6> *1184 class811-&gpege77)include/asm-i311-&g>11r/7>
11r57las5=70e drai5comment"> *> *1186 class811Olwpege77ruct 
 * *> *1189 class811-&gpege77ine" name="L36611-&g>11r97s.r}="L+61)a_7"t111x"7 * *> *1191 class811a>stss="7ine" name="L36611a>s>11xe7s.r 5pommen 5period over
11x/8>
11xe7s.rdu.4 As long asb<g=77 s<8>ords" 7 sb<7 s<8>ords" 7 sb<7 s<8>b<7 s<8>119 7las5=70e drai5comment"> *ords" 7 sb<7 s<8>ords" 7 sb<7 s<8>> *1199 class811-&gpege77ine" name="L36611-&g>119e7s.r5 73 stawa5s possible.ords" 7 s<_dev 5f=_byterar/randisk_dev r5f=_d="]Lddh>ords" 7 sb<7 s<8>> *12s" class812s" cege77ine" name="L36612s" >120e7s.re 5pommen 5period over
stss="7ine" name="L36612s>s>12se7s.rai5comment"> * *> *12s2 class812sc}pege77)include/asm-i312sc}>120e7s.r4=77 the #endif7"t1> *12s3 class812s&gpege77andom.c#L272" i12s&g>120e7s.r5n76class=5comment">/*




120a7
7and5n72ate an5 the 121" class812" class=8line" name="L3212" c>121:7
st,ss="8line" name="L3212>st>121e7s.r4=77sref">5ng on write<* This ut"lity inne"  fun#nion is responsible fornsndosfkd_Normr5f=_get_an>
121e7s.r4=77ine" n5dev/random.<* fromns/c primaryhode" pans/chsecondaryhnxm.c#nion ode"i Wenmakct_an>
121 8s.r4=77ine" n5dev/random.<* sure wchpullmr5ough forna 'catasf=_ghic reseed'in damagdinicl"licass=atclaom3lasslow-orl12"4 class812rs/cege78line" name="L3212rs/>121/7>
ords" cs__micrngx" clar8>> *12"6 class8126s/cege78line" name="L32126s/>12" 7las5m82produ.4 As long asords" cs__micrngx" clar8>> *12"7 class8127s/cege78line" name="L32127s/>121/8>ords" cs__micrngx" clar8>ords" cs__micrngx" clar8> * *122n7ords" cs__micrngx" clar8>ords" cs__micrngx" clar8>> *12o1 class812s/ctic s8ruct 122a8
12o37s.r4n78produc5 "L367ndo(6ers/crs__micrngx" clar8>b<imit8>122/8>
<_ptTSjiffierar/randdom.c#L3jidah6> *12o5 class8125s/cege78)include/asm-i3125s/>122a7
122 7las5a73oeck, 5 madeuc5 "L367ndo(6ers/ccode_befl_irqrede=p" cladocode_befl_il_irqai5comment"> *
122/8>122a7122a8>> *123" class812clapege787dd_pt* a_7"t1<12cla>123n7123e7s.r 5pommen 5period over
12327s.r4n78produc5 colli7" add_xfer6_econdary" na" id="(> *12c3 class812=x"pege77andom.c#L272" i12=x">12c37s.r}="L+61)a_7"t1123/7>
12358>ords" cs__micrngx" clar8>> *12c6 class812Olwpege77andom.c#L275" i12Olw>123 7las5m82h67" , (> *12c8 class812-)atic s7ruct > *1239 class812x"=pege77)include/asm-i312x"=>123a8>
stpege77)include/asm-i312>st>12407s.r4n78prodtor"e=x"a"dr56ers/crsvd_t_ hr5f=_byterar/ranrsvd_t_ hr8>b<imit8> *<]nom.c#read_wakeup_bitsar/randdichar/r]nom.c#read_wakeup_bits8>> *1241 class812rs/css="7ine" name="L36612rs/>124e7s.r4n78prodtor"e=x"a"dr56ers/ct_ hr5f=_byterar/rant_ hr8>> *1242 class812 class="7ine" name="L36612 cl>124a8
12437s.r4n78produ=77sref">5ng on write
124e7s.r4i78elinai5comment"> *> *1245 class812st]pege77)include/asm-i312st]>12457las5=70e dra=77sref">5ng on write
124/8> *> *12>7 class812 class="7)include/asm-i312 cl>124a7s.r5a7e wake 5pultiply in
124 7las5=70e drai5comment"> *
124a8>ords" cs__micrngx" clar8>ords" cs__micrngx" clar8>> *125" class812 class="7ine" name="L36612 cl>12507s.r4n78produc5 colli7" addt_ hr5f=_byterar/rant_ hr8>ords" cs__micrngx" clar8>> *1251 class812=7]pege77)include/asm-i312=7]>125e7s.r5a73produc5 the nnnnnnnnnnnnnnnnwa5s possible.> *1252 class812 class="7andom.c#L301" i12 cl>12527s.r4n78produc5 colli7" addmixcode"_t_ hr5f=_byterar/ranmixcode"_t_ hrl_irq ==id="L367" cucs__micrngx" clar8>> *1253 class812de]pege77line" name="L3212de]>12 /8> *> *12 4 class812ith only7three taps, ins12ith>125e7s.r}="L+61)a_7"t1125a7
125 7las4=77ine" n5dev/random.


12 a8>
126:75ng on write<*span>
ords" work id="(> *1263 class812" class=7)include/asm-i312" c>12a/8>12a/8>ords" cs__micrngx" clar8>b<cowaaclur_ohl_irqai5comment"> *> *1265 class812ith only7andom.c#L314" i12ith>126e7s.r5S73ulatio5 conttttttttttttttttttttnnnnnnnnnnnwa5s possible.> *12a6 class812Olwpege77ine" name="L36612Olw>126/8> *ords" cs__micrngx" clar8>> *12a7 class812 class="7id="L2Mix lassr12 cl>126/8>> *1268 class812 class="7r p4">asm/io.h<12 cl>126 7las5=70e drai5comment"> *ords" ENTROPY_SHIFTolw="L2_=x" claENTROPY_SHIFT8>> *1269 class812x"=pege77)include/asm-i312x"=>126a8>ords" ENTROPY_SHIFTolw="L2_=x" claENTROPY_SHIFT8>> *127" class812>:1pege77)include/asm-i312>:1>127e7s.re 5pommen 5period over
127e7s.r4=77ine" n5dev/random.
127 8s.r4=77ine" n5dev/random.<* This fun#nion decides how many t_ hr panactuallynsakc fromns/cspan>
127/7>12757las4=77ine" n5dev/random.<*span>
ords" cs__micrngx" clar8>> *1277 class812an pege77)include/asm-i312an >127/8>> *1278 class812 cl,ss="7ine" name="L36612 cl>127a79 class812x"=pege77)include/asm-i312x"=>127e7s.r5 73 stauor"e=x"a"dr56ers/cr5f=_ge_coun t_51ers/c> *128" class812rs/char/7andom.c#L289" i12rs/>12807s.r4n78produc5 colli7" addsrefchar/randdichar/rsrefch7s.r4ndid="L367" addit_ hr5f=_byterar/ranit_ hr8>> *1281 class812de=pege77)include/asm-i312de=>128e7s.r 5pommen 5period over
12827s.r4n78produc5 colli7" addBUG_ON id="(ords" cs__micrngx" clar8>> *1283 class812-&gpege77)include/asm-i312-&g>128e7s.r5n76class=5comment">/*
128e7s.r4i78elina=77sref">5ng on write
12r57lase=x"a"dr56ers/cretret_51ers/c *> *1287 class812an pege77ine" name="L36612an >128/8>> *1288 class812 cl,ss="7ine" name="L36612 cl>12r 7las5=70e dra=77sref">5ng on write
b<imit8>129c8las5a82r sugg5.  Thuor"e=x"a"dr56ers/chave_t_ hr5f=_byterar/ranhave_t_ hr8> *> *1291 class812a>stss="7ine" name="L36612a>s>12xe7s.r 5pommen 5period over
129ridah6666666666666666 id=qode=poolwords" have_t_ hr5f=_byterar/ranhave_t_ hr8>129/8>> *12x4 class812a=atic s7ruct > *1295 class812[1],ss="7ine" name="L36612[1]>12957las5=70e dre 5pommen 5period over
> *12x8 class812=x",ss="7ine" name="L36612=x">129<7s.rah6> *1299 class812-&gpege77ine" name="L36612-&g>129e7s.r5 73 stauc5 "L367ndo(6ers/cunlikelet_51ers/c130c8las5a82r sugg5.  The only5ngst_Nor">"rds" c: negatnodhe5f=_ge coun : ode" %s coun n%d\n"pan>
> *13s1 class813s>stss="7ine" name="L36613s>s>130e7s.r5a73produc5 the nnnnnnnnd="]Lddh>ords" cs__micrngx" clar8>> *13s2 class813sc}pege77)include/asm-i313sc}>130ridah6666666666666666wa5s possible.> *13s3 class813s&gpege77andom.c#L272" i13s&g>130/8> *> *13s4 class813s=atic s7ruct  * *> *13s6 class813slwpege77ine" name="L36613slw>130 7las5a73oeckuc5 duc5 colli7" addsrefchar/randdichar/rsrefch7s.r)Iligentords" nf.c#5f=_byterar/rannf.c#l_ir_o < 0rd5ddddddddddddr52 ="srlw13s7 class813sn pege77ine" name="L36613sn >130 8las5a82r sugg5.  The only> *13s8 class813sx",ss="7ine" name="L36613sx">130 7las5=70e drelseah6> *13s9 class813s&gpege77ine" name="L36613s&g>130a8>> *131" class813" class=8line" name="L3213" c>131:7> *1311 class813>st,ss="8line" name="L3213>st>13117s.r5 73 stauc5 "L367ndo(6ers/ccmpxchb5f=_byterar/rancmpxchbrqredgas_o ==id="L367" cucs__micrngx" clar8>131ridah6666666666666666gotoandid="L367" addaetret_51ers/c> *1313 class813" class=8line" name="L3213" c>131e7s.r5n76class=5comment">/*
 *ords" cs__micrngx" clar8>> *13"5 class8135s/cege78line" name="L32135s/>13157las5=70e dr id=ndid="L367" addit_ hr5f=_byterar/ranit_ hr8>ords" ENTROPY_SHIFTolw="L2_=x" claENTROPY_SHIFT8>b<cnom.c#write_wait8>> *13"8 class813rs/char/8ine" name="L36613rs/>131a7> *13"9 class8139s/cege78ine" name="L366139s/>131a8>
132:7> *13o1 class813s/ctic s8ruct > *13o2 class813" class=8)include/asm-i313" c>132a8
132e7s.r5n76class=5comment">/*
132/7>
13257las4=77ine" n5dev/random.<* This fun#nion does s/chactualhnxm.c#nion fornnxm.c#nhr5f=_ge domspan>
132 7las4=77ine" n5dev/random.<* nxm.c#nhr5f=_ge_userin damagdinicl"licass=atclaom3lasslow-orl13o7 class8137s/cege78andom.c#L266" i137s/>132 8las4=77ine" n5dev/random.<*pan>
132a7132a8>
133n7b<nxm.c#nhbuhrqred5m2/as_ode=poolwords" r5f=_ge__&l_irqrede=p" clador5f=_ge__&l_i7s.r4id="]Lddh>ords" cs__micrngx" clar8>b<outl_ir_o < 0rd5ddddddddddddr52 ="srlw1331 class813clapege77)include/asm-i313cla>133e7s.r13327s.r4n78produor"e=x"a"dr56ers/ci5f=_byterar/rani8>> *13c3 class813=x"pege77andom.c#L272" i13=x">133/8>133/8>> *13c5 class8135s/cege77)include/asm-i3135s/>133e7s.r5S73ulatio5 conts=4eserveto beL368id="[7" addl id="(> *13c6 class813Olwpege77andom.c#L275" i13Olw>133 7las5a73oeck}awa5s possible.> *13c7 class813 class="7ine" name="L36613 cl>133/8>
cear/randdichar/rworkn>
ce8>> *13c8 class813-)atic s7ruct > *13c9 class813x"=pege77)include/asm-i313x"=>133e8s.r5a82s="sref">7and5n72ate an5 the 134" class813>stpege77)include/asm-i313>st>13407s.r4n78prod4=77ine" n5dev/random./*pan>
5ng on write<<<<<<<<<* If wchhave an architeasural id=dware """""" numberpan>

134 8s.r4=77ine" n5dev/random.<<<<<<<<<*span>
134e7s.r4i78elinai5comment"> *> *1345 class813st]pege77)include/asm-i313st]>13457las5=70e drforn=ndid="L367" addi5f=_byterar/rani8>134 7las5a73oeck, 5 madeun4eserveto beL368id="[7" addv5f=_byterar/ranv8>> *13>7 class813 class="7)include/asm-i313 cl>134 8las5a82r sugg5.  Thuc5 !d="]Lddh>ords" arch#L3 h]nom.c#to b5f=_byterar/ranarch#L3 h]nom.c#to br5f=_gas_o ==id="L367" cuv5f=_byterar/ranv8>134a7> *13>9 class813x"=pege77ine" name="L36613x"=>134a8>> *135" class813 class="7ine" name="L36613 cl>135n7135e7s.r 5pommen 5period over
13527s.r4n78produ=77sref">5ng on write

b<ing_cladawa5s possible.> *13 4 class813ith only7three taps, ins13ith>13547las5=70e drforn=ndid="L367" addi5f=_byterar/rani8>135e7s.r5S73ulatio5 contai5comment"> *
cear/randdichar/rworkn>
ce8>> *13 6 class813Olwpege77three taps, ins13Olw>135l7nfo 5pommen 5period over

13 a8>
136:75ng on write<<<<<<<<<* ou="+srdaunless s/chhash fun#nion c7r bc dwdddted. Bet_an>

136 8s.r4=77ine" n5dev/random.<<<<<<<<<*nbrute-forci b s/chfeedbackdas id=ddas brute-forci b s/ct_an>
136/7>13657las4=77ine" n5dev/random.<<<<<<<<<*span>
 *<__mixcode"_t_ hr5f=_byterar/ran__mixcode"_t_ hrl_irqd="]Lddh>ords" cs__micrngx" clar8>> *13a7 class813 class="7id="L2Mix lassr13 cl>136/8>
b<ing_cladawa5s possible.> *1368 class813 class="7r p4">asm/io.h<13 cl>136<7s.rah6> *1369 class813x"=pege77)include/asm-i313x"=>136a8>
cear/randdichar/rworkn>
ce8>
cear/randdichar/rworkn>
ce8>> *137" class813>:1pege77)include/asm-i313>:1>137:7> *1371 class813rs/css="7)include/asm-i313rs/>13717s.r4i78elina=77r of b5ts, then we
137e7s.r4=77ine" n5dev/random.<<<<<<<<<*nIn c7se s/chhash fun#nion has samemrecognizable out="+pan>
137 8s.r4=77ine" n5dev/random.<<<<<<<<<* pattern, wchfold it in half. Thus, wchalways feed backpan>
137/7>13757las4=77ine" n5dev/random.<<<<<<<<<*span>
 *> *1377 class813an pege77)include/asm-i313an >137/8>> *1378 class813 cl,ss="7ine" name="L36613 cl>137 7las5=70e drai5comment"> *ords" hash5f=_byterar/ranhash8>> *1379 class813x"=pege77)include/asm-i313x"=>137e8s.r5a82s="sref">7and5n72ate an5 the 138" class813rs/char/7andom.c#L289" i13rs/>13807s.r4n78produc5 colli7" addmemcget_51ers/cb<outl_ir, gas_o ==id="L367" cuhash5f=_byterar/ranhash8>> *1381 class813de=pege77)include/asm-i313de=>13818>> *1382 class813":1pege77)include/asm-i313":1>138a8
138e7s.r5n76class=5comment">/*
138e7s.r5m82prowa5s possible.ords" cs__micrngx" clar8>b<buhrqredah6> *1385 class813ith only7andom.c#L314" i13ith>138e7s.r5S73ulatio5 contttttttttttttttttwa5s possible.> *1386 class813Olwpege77ruct b<ce 8>> *1388 class813 cl,ss="7ine" name="L36613 cl>138 7las5=70e drai5comment"> *<__u8s__micrngx" cla__u87s.r4ai5comment"> *> *1389 class813-&gpege77ine" name="L36613-&g>138e7s.r5 73 staun4eserveto beL368id="[7" addflagr5f=_byterar/ranflagr8>> *139" class813x"),ss="7ine" name="L36613x")>139:7> *1391 class813a>stss="7ine" name="L36613a>s>13918> *139ridah6666666666666666ode=poolwords" rxm.c#nhbuhr5f="dbuf">b<nxm.c#nhbuhrqredd="]Lddh>ords" cs__micrngx" clar8>> *1393 class813-&gpege77andom.c#L272" i13-&g>139e7s.r5n76class=5comment">/*

b<ing_cladawa5s possible.> *13x6 class813Olwpege77ine" name="L36613Olw>139 7las5a73oeck, 5 madeg 5intel id=!d="]Lddh>ords" memcmlass__micpb<an67data8>> *1397 class813an pege77ine" name="L36613an >139 8las5a82r sugg5.  Thio5 conttttttttth65ngst_Nor">"Hd=dware RNG duplicatrveout="+!\n"pan>
> *13x8 class813=x",ss="7ine" name="L36613=x">139a7b<an67data8>> *1399 class813-&gpege77ine" name="L36613-&g>139a8>
b<ing_cladawa5s possible.> *14s" class814s" cege77ine" name="L36614s" >140c8las5a82r sugg5.  The 5pommen 5period over
stss="7ine" name="L36614s>s>140e7s.r5a73produc5 the e=x"a"dr56ers/ci5f=_byterar/rani8>> *14s2 class814sc}pege77)include/asm-i314sc}>140ridah6666666666666666wa5s possible.b<buhrqredawa5s possible.> *14s3 class814s&gpege77andom.c#L272" i14s&g>140/8> *> *14s4 class814s=atic s7ruct b<buhrqrea+= ndid="L367" addi5f=_byterar/rani8>> *14s5 class814s1],ss="7ine" name="L36614s1]>140e7s.r5S73ulatio5 contai5comment"> *b<ce 8>> *14s6 class814slwpege77ine" name="L36614slw>140 7las5a73oecke 5pommen 5period over
140 7las5=70e dra=77sref">5ng on write
ords" mmlass__micp> *141" class814" class=8line" name="L3214" c>141:7> *1411 class814>st,ss="8line" name="L3214>st>141e7s.r5a73prods=5.   ndid="L367" addreta hr5l368">b<ce 8>> *1412 class814" class=8line" name="L3214" c>141a8
141e7s.r5n76class=5comment">/*




142:7142e7s.r4=77sref">5ng on write<*hode" after eachhpullmso adu.4 starvi baos/cr readdddin damagdinicl"licass=atclaom3lasslow-orl14o2 class814" class=8)include/asm-i314" c>142e7s.r4=77ine" n5dev/random.<*span>
142e7s.r5m82prowa5s possible.ords" cs__micrngx" clar8>b<buhrqredah6> *1424 class814rs/cege78)include/asm-i314rs/>142/8>> *14o5 class8145s/cege78)include/asm-i3145s/>14257las142/8> *<__u8s__micrngx" cla__u87s.r4ai5comment"> *> *14o7 class8147s/cege78andom.c#L266" i147s/>142 8las5a82r suun4eserveto beL368id="[7" addflagr5f=_byterar/ranflagr8>> *1428 class814rs/char/8)include/asm-i314rs/>142<7s.rah6> *14o9 class8149s/cege78)include/asm-i3149s/>142a8>5ng on write
143c8las5a82r su id=ndid="L367" addfiprhr5ableds__micrngx" clafiprhr5abled8>143e7s.r5a73produc5 the e=x"a"dr56ers/c/.c#L;ing_irqsavear/randdichar/rs.c#L;ing_irqsaverqredgas_o ==id="L367" cucs__micrngx" clar8>
b<ing_cladawa5s possible.> *1432 class814e3lpege77)include/asm-i314e3l>143ridah6666666666666666 id=!d="]Lddh>ords" rs__micrngx" clar8>143/8>> *1434 class814rs/cege77)include/asm-i314rs/>143/8>
b<ing_cladawa5s possible.> *14c5 class8145s/cege77)include/asm-i3145s/>143e7s.r5S73ulatio5 contuc5 the e=x"a"dr56ers/cm.c#e_nxm.c#nhr5f=_get_51ers/cords" rs__micrngx" clar8>> *14c6 class814Olwpege77andom.c#L275" i14Olw>143 7las5a73oeck, 5 madeg 5intel73ulatio5 contuc5 the e=x"a"dr56ers/cENTROPY_BITSolw="L2_=x" claENTROPY_BITSl_irqd="]Lddh>ords" rs__micrngx" clar8>> *14c7 class814 class="7ine" name="L36614 cl>143 8las5a82r sugg5.  Thio5 contwa5s possible.> *14c8 class814-)atic s7ruct b<nxm.c#nhbuhrqredd="]Lddh>ords" cs__micrngx" clar8>> *14c9 class814x"=pege77)include/asm-i314x"=>143a8>
b<ing_cladawa5s possible.> *144" class814>stpege77)include/asm-i314>st>144c8las5a82r sugg5.  Thnnnnnnnnwa5s possible.b<an67data8>> *1441 class814rs/css="7ine" name="L36614rs/>144e7s.r5a73produc5 the e 5pommen 5period over

b<ing_cladawa5s possible.> *1443 class814de]pege77)include/asm-i314de]>144/8>
144e7s.r 5pommen 5period over
14457las5=70e dre=x"a"dr56ers/cm.c#e_nxm.c#nhr5f=_get_51ers/cords" rs__micrngx" clar8>> *1446 class814Olwpege77)include/asm-i314Olw>144/8> *> *1447 class814 class="7)include/asm-i314 cl>144/8>> *1448 class814st]pege77)include/asm-i314st]>144<7s.rah6> *14>9 class814x"=pege77ine" name="L36614x"=>144a8>ords" cs__micrngx" clar8>b<buhrqredawa5s possible.> *145" class814 class="7ine" name="L36614 cl>145n7
145e7s.r 5pommen 5period over
145e7s.r4=77ine" n5dev/random./*pan>

145/7>
ce buhferin damagdinicl"licass=atclaom3lasslow-orl1455 class814ith only7three taps, ins14ith>14557las4=77ine" n5dev/random.<*span>
145l7nfo5m82prowa5s possible.ords" cs__micrngx" clar8> *<__usert_51ers/cords" buhr5f="dbuf">b<buhrqredah6> *1457 class814 class="7three taps, ins14 cl>145 8las5a82r sugg5.  Thio5 conttttttttt6666wa5s possible.> *1458 class814st]pege77ine" name="L36614st]>145a7145a8>b<ce 8>> *146" class814and}ege77)include/asm-i314and>14607s.r4n78produc5 colli7" add__u8s__micrngx" cla__u87s.r4ai5comment"> *> *1461 class814rs/css="7ine" name="L36614rs/>14617s.r5 73 stauor"e=x"a"dr56ers/clarge_reque_&a hr5l368">b<arge_reque_&8> *> *1462 class814 class="7)include/asm-i314 cl>146e7s.rah6> *1463 class814" class=7)include/asm-i314" c>146/8>ords" rs__micrngx" clar8>> *1464 class814ith only7)include/asm-i314ith>146e7s.r4i78elinai5comment"> *> *1465 class814ith only7andom.c#L314" i14ith>14657las5=70e drai5comment"> *> *1466 class814Olwpege77ine" name="L36614Olw>146l7nfo 5pommen 5period over
146/8> *asm/io.h<14 cl>146a7b<arge_reque_&8>146a8>:1pege77)include/asm-i314>:1>147c8las5a82r sugg5.  Thnnnnnnnnnnnnnnnn id=ndid="L367" addreta hr5l368">b<ce 8>> *1471 class814rs/css="7)include/asm-i314rs/>147e7s.r5a73produc5 the                         ndid="L367" addreta hr5l368">b<ce 8>> *1472 class814":1pege77)include/asm-i314":1>147ridah66666666666666666666666666666666breakdah6> *1473 class814ef]pege77)include/asm-i314ef]>147/8>
147/8>> *1475 class814ith only7andom.c#L314" i14ith>147e7s.r5S73ulatio5 conte 5pommen 5period over
b<nxm.c#nhbuhrqredd="]Lddh>ords" cs__micrngx" clar8>> *1478 class814 cl,ss="7ine" name="L36614 cl>147a7> *1479 class814x"=pege77)include/asm-i314x"=>147a8>b<buhrqredawa5s possible.148c8las5a82r sugg5.  Thnnnnnnnnwa5s possible.b<ce 8>> *1481 class814de=pege77)include/asm-i314de=>148e7s.r5a73produc5 the         breakdah6> *1482 class814":1pege77)include/asm-i314":1>148ridah6666666666666666e 5pommen 5period over
148e7s.r5n76class=5comment">/*
148/8>> *1485 class814ith only7andom.c#L314" i14ith>148e7s.r5S73ulatio5 contd="]Lddh>ords" buhr5f="dbuf">b<buhrqrea+= ndid="L367" addi5f=_byterar/rani8>> *1486 class814Olwpege77ruct b<ce 8>> *1487 class814an pege77ine" name="L36614an >148/8>
> *1489 class814-&gpege77ine" name="L36614-&g>148a8>5ng on write
14907s.r4n78produc5 colli7" addmemzero_explicitar/randdichar/rmemzero_explicitl_irqd="]Lddh>ords" mmlass__micp> *1491 class814a>stss="7ine" name="L36614a>s>149e7s.r 5pommen 5period over
149ridah66666666s=5.   ndid="L367" addreta hr5l368">b<ce 8>> *1493 class814-&gpege77andom.c#L272" i14-&g>149e7s.re 5pommen 5period over



149a7

150:7stss="7ine" name="L36615s>s>150e7s.r4=77sref">5ng on write<*span>
150ridahdu.4 ai5comment"> *b<L3 h]nom.c#t_ hrl_irqdu.4 id="]Lddh>ords" buhr5f="dbuf">b<buhrqredauor"e=x"a"dr56ers/cnt_ hr5f=_byterar/rannt_ hrl_ir_ah6> *15s3 class815s&gpege77andom.c#L272" i15s&g>150/8> *<__u8s__micrngx" cla__u87s.r4ai5comment"> *> *15s5 class815s1],ss="7ine" name="L36615s1]>150e7s.rah6> *15s6 class815slwpege77ine" name="L36615slw>150 7las# idwa5s possible.> *15s7 class815sn pege77ine" name="L36615sn >150/8>ords" crng_readet_51ers/c> *15s8 class815sx",ss="7ine" name="L36615sx">150a7b<pruorords" KERN_NOTICE5f=_byterar/ranKERN_NOTICE7s.r4a=77sref">5ngst_Nor">""L368": %pF L3 h]nom.c#t_ hr called "pan>
> *15s9 class815s&gpege77ine" name="L36615s&g>150a8>5ngst_Nor">"with crng_init = %d\n"pan>
> *151" class815" class=8line" name="L3215" c>151:7> *1511 class815>st,ss="8line" name="L3215>st>15118>b<m.c#e_L3 h]nom.c#t_ hrl_irqd="]Lddh>ords" nt_ hr5f=_byterar/rannt_ hrl_ir, h6> *1512 class815" class=8line" name="L3215" c>151e7s.rah6> *1513 class815" class=8line" name="L3215" c>151/8> *b<nxm.c#nhcrngrqredd="]Lddh>ords" buhr5f="dbuf">b<buhrqre)dah6> *1515 class8155s/cege78line" name="L32155s/>151e7s.r5S73ulatio5 contd="]Lddh>ords" buhr5f="dbuf">b<buhrqrea+= ndid="L367" addCHACHA20_BLOCK_SIZE5f=_byterar/ranCHACHA20_BLOCK_SIZE8>> *1516 class8156s/cege78line" name="L32156s/>151 7las5a73oeck, 5 madewa5s possible.> *1517 class8157s/cege78line" name="L32157s/>151/8>
> *15"9 class8159s/cege78ine" name="L366159s/>15198> *152c8las5a82r sugg5.  Thwa5s possible.b<nxm.c#nhcrngrqredd="]Lddh>ords" mmlass__micp> *15e1 class815s/ctic s8ruct b<buhrqredawa5s possible.> *15o2 class815" class=8)include/asm-i315" c>152ridah6666666666666666wa5s possible.> *15o3 class815=x"pege78)include/asm-i315=x">152/8>> *15o4 class815rs/cege78)include/asm-i315rs/>152/8>> *15o5 class8155s/cege78)include/asm-i3155s/>15257las5=70e drai5comment"> *> *15o6 class815Olwpege78)include/asm-i315Olw>152/8>
152 8lash6ords" L3 h]nom.c#t_ hra hr5l368">b<L3 h]nom.c#t_ hrl_ir_dah6> *15o8 class815rs/char/8)include/asm-i315rs/>152<7s.rah6> *15o9 class8159s/cege78)include/asm-i3159s/>152a8>
153:7
153e7s.r4=77sref">5ng on write<*hode" is initialisedin damagdinicl"licass=atclaom3lasslow-orl1532 class815e3lpege77)include/asm-i315e3l>153e7s.r4=77ine" n5dev/random.<*n damagdinicl"licass=atclaom3lasslow-orl1533 class815=x"pege77andom.c#L272" i15=x">153 8s.r4=77ine" n5dev/random.<* s=5.  s: 0_ idcallbackdis successfully addemspan>
153/7>
15357las4=77ine" n5dev/random.<*          -ENOENT_ idmodule forncallbackdis not alivepan>
153 7las4=77ine" n5dev/random.<*span>
b<addh]nom.c#reade_callbackl_irq5m2/as_ode=poolwords" ]nom.c#reade_callbacka hr5l368">b<]nom.c#reade_callbackl_ir4id="]Lddh>ords" cdet_51ers/c> *15c8 class815-)atic s7ruct 153a8>> *154" class815>stpege77)include/asm-i315>st>154c8las5a82r suun4eserveto beL368id="[7" addflagr5f=_byterar/ranflagr8>> *1541 class815rs/css="7ine" name="L36615rs/>15417s.r5 73 stauor"e=x"a"dr56ers/cerrt_51ers/c> *1542 class815 class="7ine" name="L36615 cl>154e7s.rah6> *1543 class815de]pege77)include/asm-i315de]>154/8>> *1544 class815st]pege77)include/asm-i315st]>154/8>> *1545 class815st]pege77)include/asm-i315st]>154e7s.rah6> *1546 class815Olwpege77)include/asm-i315Olw>154/8> *> *1547 class815 class="7)include/asm-i315 cl>154/8>ords" try_module_L3 a hr5l368">b<m.y_module_L3 l_irqd="]Lddh>ords" ownert_51ers/c> *1548 class815st]pege77)include/asm-i315st]>154a7> *1549 class815x"=pege77ine" name="L36615x"=>154e8s.r5a82s="sref">7and5n72ate an5 the 155" class815 class="7ine" name="L36615 cl>15507s.r4n78produc5 colli7" adds.c#L;ing_irqsavear/randdichar/rs.c#L;ing_irqsaverqredgas_o ==id="L367" cucnom.c#reade_list_=>
b<cnom.c#reade_list_=>
> *1551 class815=7]pege77)include/asm-i315=7]>15518>> *1552 class815 class="7andom.c#L301" i15 cl>155ridah6666666666666666gotokai5comment"> *b<outl_irdah6> *1553 class815de]pege77line" name="L3215de]>155e7s.r5n76class=5comment">/*
155e7s.r4i78elinai5comment"> *> *1555 class815ith only7three taps, ins15ith>155e7s.rah6> *15 6 class815Olwpege77three taps, ins15Olw>155/8> *b<cnom.c#reade_list8>> *1557 class815 class="7three taps, ins15 cl>155/8>> *1558 class815st]pege77ine" name="L36615st]>155<7s.rah6> *1559 class815x"=pege77)include/asm-i315x"=>155a8> *b<outl_ir:ah6> *156" class815and}ege77)include/asm-i315and>15607s.r4n78produc5 colli7" add/.c#Lunling_irqre_&l_irqrede=p" clados.c#Lunling_irqre_&l_irqredgas_o ==id="L367" cucnom.c#reade_list_=>
b<cnom.c#reade_list_=>
> *1561 class815rs/css="7ine" name="L36615rs/>156e7s.r 5pommen 5period over
b<module_putl_irqd="]Lddh>ords" ownert_51ers/c> *1563 class815" class=7)include/asm-i315" c>156e7s.r5n76class=5comment">/*
156e7s.r4i78elins=5.   ndid="L367" adderrt_51ers/c> *1565 class815ith only7andom.c#L314" i15ith>15657lase 5pommen 5period over
ords" addh]nom.c#reade_callbacka hr5l368">b<addh]nom.c#reade_callbackl_ir)dah6> *1567 class815 class="7id="L2Mix lassr15 cl>156a7s.r5a7e wake 5pultiply in
asm/io.h<15 cl>156a7
156a8>:1pege77)include/asm-i315>:1>157:7
 *b<delh]nom.c#reade_callbackl_irq5m2/as_ode=poolwords" ]nom.c#reade_callbacka hr5l368">b<]nom.c#reade_callbackl_ir4id="]Lddh>ords" cdet_51ers/c> *1572 class815":1pege77)include/asm-i315":1>157ridah157/8>> *1574 class815ith only7)include/asm-i315ith>157/8>> *1575 class815ith only7andom.c#L314" i15ith>157e7s.rah6> *1576 class815Olwpege77ine" name="L36615Olw>157/8> *
b<cnom.c#reade_list_=>
> *1577 class815an pege77)include/asm-i315an >157/8>ords" list_emptet_51ers/c> *1579 class815x"=pege77)include/asm-i315x"=>157a8> *> *158" class815rs/char/7andom.c#L289" i15rs/>158c8las5a82r sue 5pommen 5period over
15818>
b<cnom.c#reade_list_=>
> *1582 class815":1pege77)include/asm-i315":1>158e7s.rah6> *1583 class815-&gpege77)include/asm-i315-&g>158/8>b<module_putl_irqd="]Lddh>ords" ownert_51ers/c> *1584 class815-&gpege77)include/asm-i315-&g>158/8>
158e7s.rh6ords" delh]nom.c#reade_callbacka hr5l368">b<delh]nom.c#reade_callbackl_ir)dah6> *1586 class815Olwpege77ruct 

159:7
stss="7ine" name="L36615a>s>159e7s.r4=77sref">5ng on write<*his impossible to L34ify s/at it is imple wrirvesecus=ly (aspan>
159e7s.r4=77ine" n5dev/random.<* opposed, to, say, s/c AES encrypnion of aasequence numbermusi baapan>
159 8s.r4=77ine" n5dev/random.<* key known by s/c NSA).  So it'smuseful_ idwchneed s/c speed, butpan>


 *b<L3 h]nom.c#t_ hr_archl_irqdu.4 id="]Lddh>ords" buhr5f="dbuf">b<buhrqredauor"e=x"a"dr56ers/cnt_ hr5f=_byterar/rannt_ hrl_ir_ah6> *15x8 class815=x",ss="7ine" name="L36615=x">159a7ords" lass__micpb<buhrqredah6> *16s" class816s" cege77ine" name="L36616s" >160:7> *16s1 class816s>stss="7ine" name="L36616s>s>16018>b<m.c#e_L3 h]nom.c#t_ hr_archl_irqd="]Lddh>ords" nt_ hr5f=_byterar/rannt_ hrl_ir, h6> *16s2 class816sc}pege77)include/asm-i316sc}>16027s.r4n78prodwhile qai5comment"> *160/8>> *16s4 class816s=atic s7ruct b<chunk8>ords" nt_ hr5f=_byterar/rannt_ hrl_ir, dtor)sref[4]un4eserveto br_dah6> *16s5 class816s1],ss="7ine" name="L36616s1]>160e7s.rah6> *16s6 class816slwpege77ine" name="L36616slw>160 7las5a73oeck, 5 made id=!d="]Lddh>ords" arch_L3 h]nom.c#to ba hr5l368">b<arch_L3 h]nom.c#to brqredgas_o ==id="L367" cuv5f=_byterar/ranvrqre)_ah6> *16s7 class816sn pege77ine" name="L36616sn >160 8las5a82r sugg5.  Thio5 contbreakdah6> *16s8 class816sx",ss="7ine" name="L36616sx">160a7> *16s9 class816s&gpege77ine" name="L36616s&g>160a8>b<chunk8>> *161" class816" class=8line" name="L3216" c>161c8las5a82r sugg5.  Thwa5s possible.b<chunk8>> *1611 class816>st,ss="8line" name="L3216>st>161e7s.r5a73produc5 the e=x"a"dr56ers/cnt_ hr5f=_byterar/rannt_ hrl_ira-randid="L367" addchunka hr5l368">b<chunk8>> *1612 class816" class=8line" name="L3216" c>16127s.r4n78prode 5pommen 5period over
161e7s.r5n76class=5comment">/*
 *> *1615 class8165s/cege78line" name="L32165s/>161e7s.r5S73ulatio5 contd="]Lddh>ords" L3 h]nom.c#t_ hra hr5l368">b<L3 h]nom.c#t_ hrl_irqd="]Lddh>ords" lass__micp *> *1616 class8166s/cege78line" name="L32166s/>161/8>
ords" L3 h]nom.c#t_ hr_archa hr5l368">b<L3 h]nom.c#t_ hr_archl_ir_dah6> *1618 class816rs/char/8ine" name="L36616rs/>161<7s.rah6> *16"9 class8169s/cege78ine" name="L366169s/>161e8s.r5a82s="sref">7and5n72ate an5 the 16e" class816olw)n_ur8ndom_seed" clas16olw>162:7
5ng on write<*hinit_std7data - initializedode" with system data8>n>
162e7s.r4=77ine" n5dev/random.<*n damagdinicl"licass=atclaom3lasslow-orl16o3 class816=x"pege78)include/asm-i316=x">162 8s.r4=77ine" n5dev/random.<* @r:dode" to initializen damagdinicl"licass=atclaom3lasslow-orl16o4 class816rs/cege78)include/asm-i316rs/>162/7>16257las4=77ine" n5dev/random.<* This fun#nion clears s/chode"'smr5f=_ge coun  dom mixes same systemn damagdinicl"licass=atclaom3lasslow-orl16o6 class816Olwpege78)include/asm-i316Olw>162 7las4=77ine" n5dev/random.<* data toro s/chode" to prepare it fornuse. Thenode" is not clearemspan>
162 8las4=77ine" n5dev/random.<* as s/at c7r onlyndecrease s/c r5f=_ge in s/chode"in damagdinicl"licass=atclaom3lasslow-orl16o8 class816rs/char/8)include/asm-i316rs/>162a7
162a8> *b<init_std7datal_irq5m2/as_ode=poolwords" r5f=_ge__&l_irqrede=p" clador5f=_ge__&l_i7s.r4id="]Lddh>ords" cs__micrngx" clar8>> *163" class816clapege787dd_pt* a_7"t1<16cla>163:716317s.r5 73 stauor"e=x"a"dr56ers/ci5f=_byterar/rani8>> *1632 class816e3lpege77)include/asm-i316e3l>16327s.r4n78produc5 colli7" addktimfchar/randdichar/rktimfch7s.r4ai5comment"> *> *1633 class816=x"pege77andom.c#L272" i16=x">163/8>> *1634 class816rs/cege77)include/asm-i316rs/>163e7s.r 5pommen 5period over
16357las5=70e drai5comment"> *> *1636 class816Olwpege77andom.c#L275" i16Olw>163/8> *b<mix" na"#t_ hrl_irqd="]Lddh>ords" cs__micrngx" clar8>> *16c7 class816 class="7ine" name="L36616 cl>163 8las5a82r suforn]* ="L2of(6ers/ci5f=_byterar/rani8>b< na"t_ hrrqrednwa5s possible.ords" arch_L3 h]nom.c#seed#to ba hr5l368">b<arch_L3 h]nom.c#seed#to brqredgas_o ==id="L367" cucv5f=_byterar/ranrvrqreraaas_ogas_oid="++a , (163a8>b<arch_L3 h]nom.c#to brqredgas_o ==id="L367" curv5f=_byterar/ranrvrqrer_id="++a , (stpege77)include/asm-i316>st>164c8las5a82r sugg5.  Thnnnnnnnnwa5s possible.b<cnom.c#L3 hr5f=_gel_irq_dah6> *1641 class816rs/css="7ine" name="L36616rs/>164e7s.r5a73produc5 the e=x"a"dr56ers/cmix" na"#t_ hra hr5l368">b<mix" na"#t_ hrl_irqd="]Lddh>ords" cs__micrngx" clar8>> *1642 class816 class="7ine" name="L36616 cl>16427s.r4n78prode 5pommen 5period over
164/8>b<mix" na"#t_ hrl_irqd="]Lddh>ords" cs__micrngx" clar8>ords" uts/asms__micrngx" clauts/asml_irq_dasref[4]*qd="]Lddh>ords" uts/asms__micrngx" clauts/asml_irq_)r_dah6> *1644 class816st]pege77)include/asm-i316st]>164/8>
164e7s.rah6> *1646 class816Olwpege77)include/asm-i316Olw>164 7las4=77ine" n5dev/random./*pan>

164a7
164a8>
165e7s.r4=77sref">5ng on write<*h5m82prally allocairvesm2/asures s/at alreade have allpan>
165e7s.r4=77ine" n5dev/random.<* initializanions v/rplete at v/rpile timf. We should alsopan>
n>
165/7>16557las4=77ine" n5dev/random.<*span>
165/8>b<cnom_initializen irqdu.4_id="++a , (b<CONFIG_NUMA7s.rah6> *1659 class816x"=pege77)include/asm-i316x"=>16598>> *166" class816and}ege77)include/asm-i316and>16607s.r4n78prod5m2/as_ode=poolwords" crng_5m82ea hr5l368">b<crng_5m82e7s.r4id="]Lddh>ords" crngr5f="dbuf">b<crngrqredah6> *1661 class816rs/css="7ine" name="L36616rs/>16617s.r4n78prod5m2/as_ode=poolwords" crng_5m82ea hr5l368">b<crng_5m82e7s.r4iid="]Lddh>ords" lde"a hr5l368">b< na"rqredah6> *1662 class816 class="7)include/asm-i316 cl>16627s.r#endifah6> *1663 class816" class=7)include/asm-i316" c>166e7s.r5n76class=5comment">/*
166e7s.r4i78elinai5comment"> *b<init_std7datal_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir_dah6> *1665 class816ith only7andom.c#L314" i16ith>16657las5=70e drai5comment"> *b<init_std7datal_irqgas_o ==id="L367" cub;ingi b_lde"a hr5l368">b<b;ingi b_lde"l_ir_dah6> *1666 class816Olwpege77ine" name="L36616Olw>166/8> *b<crng_initializel_irqgas_o ==id="L367" cuprimaryhcrngr5f="dbuf">b<primaryhcrngl_ir_dah6> *1667 class816 class="7id="L2Mix lassr16 cl>166a7s.r5a7e wake 5pultiply in
asm/io.h<16 cl>166<7s.r#ifdeidwa5s possible.b<CONFIG_NUMA7s.rah6> *1669 class816x"=pege77)include/asm-i316x"=>16698> *b< na"rqrearandid="L367" addkcalloc id="(ords" lde"a hr5l368">b< na"rqre)dad="]Lddh>ords" GFP_KERNEL5f=_byterar/ranGFP_KERNELrqre|d="]Lddh>ords" __GFP_NOFAIL5f=_byterar/ran__GFP_NOFAILl_ir_dah6> *167" class816>:1pege77)include/asm-i316>:1>16707s.r4n78produc5 colli7" addfor_each_onnclu_nds"5f=_byterar/ranfor_each_onnclu_nds"l_irqd="]Lddh>ords" i5f=_byterar/rani8>b<crngrqrearandid="L367" addkmalloc_nds"5f=_byterar/rankmalloc_nds"l_irq5ref[4]5m2/as_ode=poolwords" crng_5m82ea hr5l368">b<crng_5m82e7s.r),id="++a , (167ridah6666666666666666r sugg5.  Thnnnnnnnnwa5s possible. *<__GFP_NOFAIL5f=_byterar/ran__GFP_NOFAILl_irdah6> *1673 class816ef]pege77)include/asm-i316ef]>167/8>b<crngrqre8crngas_oa=ah67" id=m>
b<=>
> *1674 class816ith only7)include/asm-i316ith>167/8> *b<crng_initializel_irq ==id="L367" cucrngr5f="dbuf">b<crngrqrerdah6> *1675 class816ith only7andom.c#L314" i16ith>167e7s.r5S73ulatio5 contd="]Lddh>ords" lde"a hr5l368">b< na"rqre[wa5s possible.b<crngrqredah6> *1676 class816Olwpege77ine" name="L36616Olw>167/8>
167/8>b<mbl_irq_dah6> *1678 class816 cl,ss="7ine" name="L36616 cl>167a7 *b<crng_nds"_lde"rqrearandid="L367" addlde"a hr5l368">b< na"rqredah6> *1679 class816x"=pege77)include/asm-i316x"=>167a8>> *168" class816rs/char/7andom.c#L289" i16rs/>168c8las5a82r sus=5.   0dah6> *1681 class816de=pege77)include/asm-i316de=>16818>
168e7s.rode=poolwords" rarle_initcallrqrede=p" cladorarle_initcalll_irqd="]Lddh>ords" c"""_initializea hr5l368">b<cnom_initializen ir_dah6> *1683 class816-&gpege77)include/asm-i316-&g>168e7s.r5n76class=5comment">/*
168/8>b<CONFIG_BLOCK7s.r5n76class=5comment">/*
168e7s.rdu.4 ai5comment"> *b<cnom_initialize_disb<gendis<7s.r4id="]Lddh>ords" disb<dis<7s.r_id="++a , (b<timfrh]nom_5m82e7s.r4id="]Lddh>ords" 5m82ea hr5l368">b<5m82e7s.rdah6> *1688 class816 cl,ss="7ine" name="L36616 cl>168<7s.rah6> *1689 class816-&gpege77ine" name="L36616-&g>16898>
169:7
stss="7ine" name="L36616a>s>169e7s.r4=77sref">5ng on write<<<<<<<<<* sourcein damagdinicl"licass=atclaom3lasslow-orl1692 class816/c}pege77)include/asm-i316/c}>169e7s.r4=77ine" n5dev/random.<<<<<<<<<*span>
169/8>b<5m82e7s.rarandid="L367" addkzalloc id="(b<timfrh]nom_5m82e7s.r)dad="]Lddh>ords" GFP_KERNEL5f=_byterar/ranGFP_KERNELrqre_dah6> *1694 class816a=atic s7ruct  *<5m82ea hr5l368">b<5m82e7s.rr6ords" 5m82ea hr5l368">b<5m82e7s.r8crngas_oa=ah67" id=mict_timfa hr5l368">b<=ict_timf7s.rarandid="L367" addINITIAL_JIFFIESa hr5l368">b<INITIAL_JIFFIES7s.rdah6> *16x6 class816Olwpege77ine" name="L36616Olw>169 7las5a73oeck, 5 madewa5s possible.b<dis<7s.r8crngas_oa=ah67" id="L368"a hr5l368">b<cnom.c7s.rarandid="L367" add5m82ea hr5l368">b<5m82e7s.rdah6> *16x7 class816an pege77ine" name="L36616an >169/8>
169a7
> *17s" class817s" cege77ine" name="L36617s" >170:7> *17s1 class817s>stss="7ine" name="L36617s>s>17018>> *17s2 class817sc}pege77)include/asm-i317sc}>170e7s.rode=poolwords" h]nom.c#read5f=_byterar/ran_]nom.c#readl_irquor"e=x"a"dr56ers/cnonb;ing5f=_byterar/rannonb;ingl_irdaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhr5f="dbuf">b<buhrqredawa5s possible.<5refchar/randdichar/r5refch7> *17s3 class817s&gpege77andom.c#L272" i17s&g>170/8> *<55refchar/randdichar/r55refch7> *17s5 class817s1],ss="7ine" name="L36617s1]>170e7s.rah6> *17s6 class817slwpege77ine" name="L36617slw>170 7las5a73oeck id=ai5comment"> *> *17s7 class817sn pege77ine" name="L36617sn >170 8las5a82r sugg5.  Ths=5.   0dah6> *17s8 class817sx",ss="7ine" name="L36617sx">170<7s.rah6> *17s9 class817s&gpege77ine" name="L36617s&g>17098> * * *> *171" class817" class=8line" name="L3217" c>171c8las5a82r suwhile q1r6st,ss="8line" name="L3217>st>171e7s.r5a73produc5 the e=x"a"dr56ers/cn5f=_byterar/rann7s.ra=andid="L367" addnxm.c#nhr5f=_ge_usecs__micrngx" clanxm.c#nhr5f=_ge_usecl_irqgas_o ==id="L367" cub;ingi b_lde"a hr5l368">b<b;ingi b_lde"l_irdaai5comment"> *b<buhrqredawa5s possible.> *1712 class817" class=8line" name="L3217" c>171ridah6666666666666666 id=ai5comment"> *> *1713 class817" class=8line" name="L3217" c>171/8>> *17"4 class817rs/cege78line" name="L3217rs/>171/8> * *> *17"5 class8175s/cege78line" name="L32175s/>171e7s.r5S73ulatio5 conttttttttttttttttttth6b<ENTROPY_BITSl_irqgas_o ==id="L367" cub;ingi b_lde"a hr5l368">b<b;ingi b_lde"l_ir_,ah6> *17"6 class8176s/cege78line" name="L32176s/>171 7las5a73oeck, 5 madetttttttttttttttttth6b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir__dah6> *1717 class8177s/cege78line" name="L32177s/>171 8las5a82r sugg5.  Th id=ai5comment"> *> *1718 class817rs/char/8ine" name="L36617rs/>171a7> *17"9 class8179s/cege78ine" name="L366179s/>171e8s.r5a82s="sref">7and5n72ate an5 the 17e" class817olw)n_ur8ndom_seed" clas17olw>172c8las5a82r sugg5.  Thw=77ine" n5dev/random./* Pde" is (near) empte.  Maybe wai  dom s=5re. *span>
 *> *17e2 class817" class=8)include/asm-i317" c>172ridah6666666666666666r sugg5.s=5.   -h6b<EAGAIN7s.rdah6> *17o3 class817=x"pege78)include/asm-i317=x">172e7s.r5n76class=5comment">/*
172/8> *b<wai _evndo_uorerruptiblel_irqd="]Lddh>ords" c""".c#read_wai a hr5l368">b<cnom.c#read_wai rqred5n76class=5comment">/*
172e7s.r5S73ulatio5 conttttttttth6b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir_a&ge==5n76class=5comment">/*
172 7las5a73oeck, 5 madettttttttd="]Lddh>ords" c""".c#read_wakeup_bitr5f=_byterar/ranc""".c#read_wakeup_bitrl_ir_dah6> *17o7 class8177s/cege78andom.c#L266" i177s/>172 8las5a82r sugg5.  Th id=ai5comment"> *<4eseal_pendingr5f="dbuf">b<4eseal_pendingl_irq ==id="L367" cucurrndom hr5l368">b<currndol_ir__ah6> *17o8 class817rs/char/8)include/asm-i317rs/>172a7b<ERESTARTSYS7s.rdah6> *17o9 class8179s/cege78)include/asm-i3179s/>17298>
173:7
173e7s.r 5pommen 5period over
17327s.r5m82prondid="L367" add55refchar/randdichar/r55refch7> *1733 class817=x"pege77andom.c#L272" i17=x">173/8>ords" c""".c#read5f=_byterar/ranc""".c#readl_irq5m2/as_ode=poolwords" filea hr5l368">b<file7s.r4id="]Lddh>ords" filea hr5l368">b<file7s.rdaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhr5f="dbuf">b<buhrqredawa5s possible.<5refchar/randdichar/r5refch7b< posl_ir_ah6> *1734 class817rs/cege77)include/asm-i317rs/>173e7s.r17357las5=70e drs=5.   e=x"a"dr56ers/ch]nom.c#read5f=_byterar/ran_]nom.c#readl_irqd="]Lddh>ords" filea hr5l368">b<file7s.r8crngas_oa=ah67" id=f_flagr5f=_byterar/ranf_flagr8>b<O_NONBLOCKl_irdaai5comment"> *b<buhrqredawa5s possible.> *1736 class817Olwpege77andom.c#L275" i17Olw>173/8>
173a7> *1739 class817x"=pege77)include/asm-i317x"=>173a8> *b<file7s.r4id="]Lddh>ords" filea hr5l368">b<file7s.rdaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhr5f="dbuf">b<buhrqredawa5s possible.<5refchar/randdichar/r5refch7b< posl_ir_ah6> *174" class817>stpege77)include/asm-i317>st>174:7> *1742 class817 class="7ine" name="L36617 cl>17427s.r4n78prod5m82prouor"e=x"a"dr56ers/cmaxwarnar/randdichar/rmaxwarn7s.ra=a10dah6> *1743 class817de]pege77)include/asm-i317de]>174/8>b<cet8>> *1744 class817st]pege77)include/asm-i317st]>174e7s.r 5pommen 5period over
17457las5=70e dr id=!d="]Lddh>ords" crng_readem hr5l368">b<crng_readel_irqraaas_ogas_o"e=x"a"dr56ers/cmaxwarnar/randdichar/rmaxwarn7s.ra&ge=.0_6174 7las5a73oeck, 5 madewa5s possible.> *1747 class817 class="7)include/asm-i317 cl>174 8las5a82r sugg5.  Thd="]Lddh>ords" pruorg5f=_byterar/ranpruorgl_irqd="]Lddh>ords" KERN_NOTICE5f=_byterar/ranKERN_NOTICE7""L368": %s:duninitialized uc""".c read "pan>
174a7"(%zd t_ hr read)\n"pan>
/*
174a8>b<currndol_ir8crngas_oa=ah67" id=v/ram hr5l368">b<c/rarqredawa5s possible.> *175" class817 class="7ine" name="L36617 cl>175c8las5a82r sugg5.  Thwa5s possible.b<primaryhcrngl_ir.wa5s possible.b<=>
> *1751 class817=7]pege77)include/asm-i317=7]>175e7s.r5a73produc5 the e=x"a"dr56ers/ccrng_init_cdom hr5l368">b<crng_init_cdo7s.ra=a0dah6> *1752 class817 class="7andom.c#L301" i17 cl>175ridah6666666666666666wa5s possible.b<primaryhcrngl_ir.wa5s possible.b<=>
> *1753 class817de]pege77line" name="L3217de]>175/8>
175e7s.r4i78elinai5comment"> * * *ords" ENTROPY_SHIFTa hr5l368">b<ENTROPY_SHIFT7s.ra+ 3__dah6> *1755 class817ith only7three taps, ins17ith>17557las5=70e drai5comment"> *b<cet8>b<buhrqredawa5s possible.> *17 6 class817Olwpege77three taps, ins17Olw>175/8> * *b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir__dah6> *1757 class817 class="7three taps, ins17 cl>175 8las5a82r sus=5.   e=x"a"dr56ers/c"e a hr5l368">b<cet8>> *1758 class817st]pege77ine" name="L36617st]>175a7
175e8s.r5a82s="sref">7and5n72ate an5 the 176" class817and}ege77)include/asm-i317and>17607s.r5m82proun4eserveuor5a82s="sref">7and5n72ate an5 the 1761 class817rs/css="7ine" name="L36617rs/>17617s.rd="]Lddh>ords" c""".c#pollrqrede=p" cladoc""".c#polll_irq5m2/as_ode=poolwords" filea hr5l368">b<file7s.r4id="]Lddh>ords" filea hr5l368">b<file7s.rda ==id="L367" cupoll_tablea hr5l368">b<poll_table7s.r4ilai5comment"> *b<wai l_ir_ah6> *1762 class817 class="7)include/asm-i317 cl>17627s.r176/8>b<mas<8>> *1764 class817ith only7)include/asm-i317ith>176e7s.r 5pommen 5period over
17657las5=70e drai5comment"> *b<poll_wai l_irqd="]Lddh>ords" filea hr5l368">b<file7s.rdagas_o ==id="L367" cur""".c#read_wai a hr5l368">b<cnom.c#read_wai rqredlai5comment"> *b<wai l_ir_dah6> *1766 class817Olwpege77ine" name="L36617Olw>176/8> *b<poll_wai l_irqd="]Lddh>ords" filea hr5l368">b<file7s.rdagas_o ==id="L367" cur""".c#write_wai a hr5l368">b<cnom.c#write_wai rqredlai5comment"> *b<wai l_ir_dah6> *1767 class817 class="7id="L2Mix lassr17 cl>176/8>b<mas<8>> *1768 class817 class="7r p4">asm/io.h<17 cl>176a7 *b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir_a&ge==td="]Lddh>ords" c""".c#read_wakeup_bitr5f=_byterar/ranc""".c#read_wakeup_bitrl_ir_ah6> *1769 class817x"=pege77)include/asm-i317x"=>176a8>b<mas<8>ords" POLLINa hr5l368">b<POLLIN8>ords" POLLRDNORMa hr5l368">b<POLLRDNORM8>> *177" class817>:1pege77)include/asm-i317>:1>17707s.r4n78prod id=ai5comment"> *b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir_a&le=. ==id="L367" cur""".c#write_wakeup_bitr5f=_byterar/ranc""".c#write_wakeup_bitrl_ir_ah6> *1771 class817rs/css="7)include/asm-i317rs/>177e7s.r5a73produc5 the e=x"a"dr56ers/cmasb<mas<8>ords" POLLOUTa hr5l368">b<POLLOUT8>ords" POLLWRNORMa hr5l368">b<POLLWRNORM8>> *1772 class817":1pege77)include/asm-i317":1>177ridah66666666s=5.   e=x"a"dr56ers/cmasb<mas<8>> *1773 class817ef]pege77)include/asm-i317ef]>177/8>
177e7s.r 5pommen 5period over
177e7s.r5m82prouor 5pommen 5period over
 *b<write_lde"l_irq5m2/as_ode=poolwords" r5f=_ge__&l_irqrede=p" clador5f=_ge__&l_i7s.r4id="]Lddh>ords" cs__micrngx" clar8> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhfecs__micrngx" clabuhfecrqredawa5s possible.<5refchar/randdichar/r5refch7b<c/un l_ir_ah6> *1777 class817an pege77)include/asm-i317an >177/8> *<5refchar/randdichar/r5refch717798> *<__ue3lpege77)ix" cla__u327s.r4d="]Lddh>ords" buhr5f="dbuf">b<buhrqre[16]did="++a , (178c8las5a82r suconstaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" lass__micp178e7s.r 5pommen 5period over
17827s.r4n78prodwhile qai5comment"> *b<c/un l_ira&ge=.0_6178/8>ords" coun m hr5l368">b<c/un l_irdasref[4]* ="L2of(6ers/cbuhr5f="dbuf">b<buhrqre__dah6> *1784 class817-&gpege77)include/asm-i317-&g>178/8> *b<buhrqredawa5s possible. *> *1785 class817ith only7andom.c#L314" i17ith>178e7s.r5S73ulatio5 conttttttttts=5.   -h6b<EFAULTrqredid="++a , (ords" coun m hr5l368">b<c/un l_ira-randid="L367" addt_ hr5f=_byterar/rant_ hrrqredid="++a , (ords" lass__micp7and5n72ate an5 the 179" class817x"),ss="7ine" name="L36617x")>179c8las5a82r sugg5.  Thwa5s possible.b<mix" na"#t_ hrl_irqd="]Lddh>ords" cs__micrngx" clar8>ords" buhr5f="dbuf">b<buhrqredawa5s possible.stss="7ine" name="L36617a>s>179e7s.r5a73produc5 the e=x"a"dr56ers/ccond_rescheds__micrngx" clacond_reschedl_irq_did="++a , (17927s.r4n78prode 5pommen 5period over
179e7s.r5n76class=5comment">/*
> *1795 class817[1],ss="7ine" name="L36617[1]>179e7s.re 5pommen 5period over
b<file7s.r4id="]Lddh>ords" filea hr5l368">b<file7s.rdaconstaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhfecs__micrngx" clabuhfecrqredid="++a , (179a7b<c/un l_irdawa5s possible.b< posl_ir_ah6> *17x9 class817-&gpege77ine" name="L36617-&g>179a8>18007s.r4n78produc5 colli7" add5refchar/randdichar/r5refch7b<cet8>> *18s1 class818s>stss="7ine" name="L36618s>s>180e7s.r 5pommen 5period over
18027s.r4n78produc5 colli7" addre a hr5l368">b<cet8>b<write_lde"l_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_irdad="]Lddh>ords" buhfecs__micrngx" clabuhfecrqredawa5s possible.b<c/un l_ir_dah6> *18s3 class818s&gpege77andom.c#L272" i18s&g>180/8> *b<cet8>> *18s4 class818s=atic s7ruct b<cet8>> *18s5 class818s1],ss="7ine" name="L36618s1]>180e7s.rah6> *18s6 class818slwpege77ine" name="L36618slw>180 7las5a73oecks=5.   qd="]Lddh>ords" 55refchar/randdichar/r55refch7b<c/un l_irdah6> *18s7 class818sn pege77ine" name="L36618sn >180 8lase 5pommen 5period over
180<7s.rah6> *18s9 class818s&gpege77ine" name="L36618s&g>18098>b<file7s.r4id="]Lddh>ords" fa hr5l368">b<frqredaun4eserveuor"e=x"a"dr56ers/ccmds__micrngx" clacmdrqredaun4eserveto beL368id="[7" addarba hr5l368">b<arg8>> *181" class818" class=8line" name="L3218" c>181:7st,ss="8line" name="L3218>st>181e7s.r5a73produor"e=x"a"dr56ers/csizea hr5l368">b<sizen irdawa5s possible.b<ndo_coun l_irdah6> *1812 class818" class=8line" name="L3218" c>181ridah66666666uor"e=x"a"dr56ers/c__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" lass__micpb<arg8>> *1813 class818" class=8line" name="L3218" c>181/8>> *1814 class818rs/cege78line" name="L3218rs/>181e7s.r 5pommen 5period over
 *b<RNDGETENTCNT7las:id="++a , (
b<ndo_coun l_ira=andid="L367" addENTROPY_BITSa hr5l368">b<ENTROPY_BITSl_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir_dah6> *1819 class8189s/cege78ine" name="L366189s/>181a8> *b<ndo_coun l_irdawa5s possible.> *18e" class818olw)n_ur8ndom_seed" clas18olw>182c8las5a82r sugg5.  Th5a73oecks=5.   -h6b<EFAULTrqredid="++a , (> *18e2 class818" class=8)include/asm-i318" c>182ridah66666666case"e=x"a"dr56ers/cRNDADDTOENTCNTa hr5l368">b<RNDADDTOENTCNT7las:id="++a , (182/8>ords" capablea hr5l368">b<capablel_irqd="]Lddh>ords" CAP_SYS_ADMINa hr5l368">b<CAP_SYS_ADMIN8>> *18e4 class818rs/cege78)include/asm-i318rs/>182/8>b<EPERMrqredid="++a , (182e7s.r5S73ulatio5 contuid=ai5comment"> *b<ndo_coun l_irdawa5s possible.> *18e6 class818Olwpege78)include/asm-i318Olw>182 7las5a73oeck, 5 madetttttttts=5.   -h6b<EFAULTrqredid="++a , (182 8las5a82r sugg5.  Ths=5.   e=x"a"dr56ers/ccredinhr5f=_ge_bitr_safea hr5l368">b<credinhr5f=_ge_bitr_safel_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_irdad="]Lddh>ords" ndo_coun m hr5l368">b<ndo_coun l_ir_dah6> *18o8 class818rs/char/8)include/asm-i318rs/>182a7b<RNDADDENTROPY7las:id="++a , (182a8>ords" capablea hr5l368">b<capablel_irqd="]Lddh>ords" CAP_SYS_ADMINa hr5l368">b<CAP_SYS_ADMIN8>> *183" class818clapege787dd_pt* a_7"t1<18cla>183c8las5a82r sugg5.  Th5a73oecks=5.   -h6b<EPERMrqredid="++a , (183e7s.r5a73produc5 the  id=ai5comment"> *b<ndo_coun l_irdawa5s possible.> *1832 class818e3lpege77)include/asm-i318e3l>183ridah6666666666666666r sugg5.s=5.   -h6b<EFAULTrqredid="++a , (183/8>b<ndo_coun l_ira&le=.0_ah6> *1834 class818rs/cege77)include/asm-i318rs/>183/8>183e7s.r5S73ulatio5 contuid=ai5comment"> *b<sizen irdawa5s possible.> *1836 class818Olwpege77andom.c#L275" i18Olw>183 7las5a73oeck, 5 madetttttttts=5.   -h6b<EFAULTrqredid="++a , (ords" "e valrqrede=p" cladoce val8>b<write_lde"l_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_irda(constaoolw ai5comment"> *<__usecs__micrngx" cla__usec7s.r4i)wa5s possible.ords" sizea hr5l368">b<sizen ir_dah6> *1839 class818x"=pege77)include/asm-i318x"=>183a8> *<"e valrqrede=p" cladoce val8>> *184" class818>stpege77)include/asm-i318>st>184c8las5a82r sugg5.  Th5a73oecks=5.   e=x"a"dr56ers/c"e valrqrede=p" cladoce val8>> *1841 class818rs/css="7ine" name="L36618rs/>184e7s.r5a73produc5 the s=5.   e=x"a"dr56ers/ccredinhr5f=_ge_bitr_safea hr5l368">b<credinhr5f=_ge_bitr_safel_irqgas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_irdad="]Lddh>ords" ndo_coun m hr5l368">b<ndo_coun l_ir_dah6> *1842 class818 class="7ine" name="L36618 cl>184ridah66666666case"e=x"a"dr56ers/cRNDZAPENTCNTa hr5l368">b<RNDZAPENTCNT7las:id="++a , (184/8>184/8>
18457las4=77ine" n5dev/random.<<<<<<<<<<<<<<<<<* Clelw the r5f=_ge lde" coun 347. We no to berne"elwpan>
184 7las4=77ine" n5dev/random.<<<<<<<<<<<<<<<<<* the r5f=_ge lde", as s/at's sillyin damagdinicl"licass=atclaom3lasslow-orl1847 class818 class="7)include/asm-i318 cl>184 8las4=77ine" n5dev/random.<<<<<<<<<<<<<<<<<*span>
184a7ords" capablea hr5l368">b<capablel_irqd="]Lddh>ords" CAP_SYS_ADMINa hr5l368">b<CAP_SYS_ADMIN8>> *1849 class818x"=pege77ine" name="L36618x"=>184a8>b<EPERMrqredid="++a , (b<input_lde"l_ir.wa5s possible.b<ndo=_ge_coun 8>> *1851 class818=7]pege77)include/asm-i318=7]>185e7s.r5a73produc5 the e=x"a"dr56ers/cb;ingi b_lde"a hr5l368">b<b;ingi b_lde"l_ir.wa5s possible.b<ndo=_ge_coun 8>> *1852 class818 class="7andom.c#L301" i18 cl>185ridah6666666666666666s=5.   0dah6> *1853 class818de]pege77line" name="L3218de]>185/8>185/8>18557las5=70e dre 5pommen 5period over
185/8>
b<file7s.r4id="]Lddh>ords" fillass__micp> *1859 class818x"=pege77)include/asm-i318x"=>185a8>186c8las5a82r sus=5.   d="]Lddh>ords" fasync_helpecs__micrngx" clafasync_helpecl_irqd="]Lddh>ords" fds__micrngx" clafdrqredad="]Lddh>ords" fillass__micp> *1861 class818rs/css="7ine" name="L36618rs/>18617s.re 5pommen 5period over
186/8>b<file_opec82pons8las5e=x"a"dr56ers/c"""".c#fopr5f=_byterar/ranc""".c#fopr8>186/8>18657las5=70e dr.wa5s possible.186/8>asm/io.h<18 cl>186a7186a8>b<=lseeb<noop_llsee:1pege77)include/asm-i318>:1>18707s.r}dah6> *1871 class818rs/css="7)include/asm-i318rs/>187e7s.r 5pommen 5period over
187ridahconsta5m2/as_ode=poolwords" file_opec82ponsa hr5l368">b<file_opec82pons8las5e=x"a"dr56ers/cu"""".c#fopr5f=_byterar/ranuc""".c#fopr8>18738>187/8>18757las5=70e dr.wa5s possible.(187/8>b<=lseeb<noop_llsee> *1879 class818x"=pege77)include/asm-i318x"=>187e8s.r5a82s="sref">7and5n72ate an5 the 188" class818rs/char/7andom.c#L289" i18rs/>188c8lasndid="L367" addSYSCALL_DEFINE3a hr5l368">b<SYSCALL_DEFINE3l_irqd="]Lddh>ords" gete an5 s__micrngx" clagete an5 8> *<__usecs__micrngx" cla__usec7s.r4idad="]Lddh>ords" buhr5f="dbuf">b<buhrqredawa5s possible.<5refchar/randdichar/r5refch7 *b<c/un l_ird5a82s="sref">7and5n72ate an5 the 1881 class818de=pege77)include/asm-i318de=>188e7s.r5a73produc5 the un4eserveuordah67and5n72ate an5 the 1882 class818":1pege77)include/asm-i318":1>18827s.r188/8> * *b<GRND_NONBLOCK8> *b<GRND_RANDOM8>> *1884 class818-&gpege77)include/asm-i318-&g>188/8>188e7s.rah6> *1886 class818Olwpege77ruct  *b<c/un l_ira&ge=.ai5comment"> *> *1887 class818an pege77ine" name="L36618an >188 8las5a82r sugg5.  Thd="]Lddh>ords" coun m hr5l368">b<c/un l_ira=andid="L367" addINT_MAX5f=_byterar/ranINT_MAX7s.rdid="++a , (> *1889 class818-&gpege77ine" name="L36618-&g>18898> * *b<GRND_RANDOM8>> *189" class818x"),ss="7ine" name="L36618x")>189c8las5a82r sugg5.  Ths=5.   e=x"a"dr56ers/ch]nom.c#read5f=_byterar/ran_]nom.c#readl_irqd="]Lddh>ords" flagr5f=_byterar/ranflagr8> *b<GRND_NONBLOCK8>ords" buhr5f="dbuf">b<buhrqredawa5s possible.b<c/un l_ir_dah6> *1891 class818a>stss="7ine" name="L36618a>s>189e7s.r 5pommen 5period over
18927s.r4n78prod id=!d="]Lddh>ords" crng_readem hr5l368">b<crng_readel_irqr_6189/8> *b<GRND_NONBLOCK8>> *1894 class818a=atic s7ruct b<EAGAIN7s.rdah6> *1895 class818[1],ss="7ine" name="L36618[1]>189e7s.r5S73ulatio5 contd="]Lddh>ords" crng_wai _readem hr5l368">b<crng_wai _readel_irqrdah6> *1896 class818Olwpege77ine" name="L36618Olw>189 7las5a73oeck, 5 made id=ai5comment"> *<4eseal_pendingr5f="dbuf">b<4eseal_pendingl_irq ==id="L367" cucurrndom hr5l368">b<currndol_ir__ah6> *18x7 class818an pege77ine" name="L36618an >189 8las5a82r sugg5.  Th5a73oecks=5.   -h6b<ERESTARTSYS7s.rdah6> *18x8 class818=x",ss="7ine" name="L36618=x">189a7
ords" buhr5f="dbuf">b<buhrqredawa5s possible.b<c/un l_irdawa5s possible.> *19s" class819s" cege77ine" name="L36619s" >190:7
stss="7ine" name="L36619s>s>190e7s.r 5pommen 5period over
19027s.ra=77ine" n5dev/random./********************************************************************pan>
190/8>



190<7s.r#ifdefawa5s possible.
7and5n72ate an5 the 191" class819" class=8line" name="L3219" c>191:7b<=e"ux/sysctl.h77and5n72ate an5 the 1911 class819>st,ss="8line" name="L3219>st>191e7s.r 5pommen 5period over
191ridah5m82prouor"e=x"a"dr56ers/cmin#read_t"a"sh5f=_byterar/ranmin#read_t"a"shl_ira=a8dawa5s possible.> *1913 class819" class=8line" name="L3219" c>191/8>b<OUTPUT_POOL_WORDS7s.r4i 32dah6> *1914 class819rs/cege78line" name="L3219rs/>191e7s.r5m82prouor"e=x"a"dr56ers/cmax#write_t"a"sh5f=_byterar/ranmax#write_t"a"shl_ira=andid="L367" addINPUT_POOL_WORDSa hr5l368">b<INPUT_POOL_WORDS7s.r4i 32dah6> *1915 class8195s/cege78line" name="L32195s/>191e7s.r5m82prooolw ai5comment"> *
n>
n>
192c8las4=77ine" n5dev/random.<* then a new UUID is genec82ed """ e=5.  ed tosthe usecin damagdinicl"licass=atclaom3lasslow-orl19e1 class819s/ctic s8ruct 
19227s.ra=77ine" n5dev/random.<* Ifsthe usec accesses s/is viasthe proceuorerface,sthe UUID will bepan>
192/8>
192/8>19257las4=77ine" n5dev/random.<*span>
192 7las5m82prouor"e=x"a"dr56ers/cproc_do_uuid5f=_byterar/ranproc_do_uuidl_irq5m2/as_ode=poolwords" ctl_tablea hr5l368">b<ctl_table7s.r4iode=poolwords" tablea hr5l368">b<table7s.rdauor"e=x"a"dr56ers/cwrite5f=_byterar/ranwritel_ird5a82s="sref">7and5n72ate an5 the 19e7 class8197s/cege78andom.c#L266" i197s/>192 8las5a82r sugg5.  Thhhhhhhhhvoid ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhfecs__micrngx" clabuhfecrqredawa5s possible.<5refchar/randdichar/r5refch7ords" lenlass__micpb< posl_ir_ah6> *19o8 class819rs/char/8)include/asm-i319rs/>192a7192a8>b<ctl_table7s.r4wa5s possible.b<fake_table7s.rdah6> *193" class819clapege787dd_pt* a_7"t1<19cla>193c8las5a82r suun4eserveoolw ai5comment"> *b<buhrqre[64]dawa5s possible.> *1931 class819clapege77)include/asm-i319cla>193e7s.r 5pommen 5period over
19327s.r4n78produc5 colli7" adduuid5f=_byterar/ranuuid7s.ra=andid="L367" addtablea hr5l368">b<table7s.r8crngndid="L367" adddataa hr5l368">b<data7s.rdah6> *1933 class819=x"pege77andom.c#L272" i19=x">193/8>ords" uuid5f=_byterar/ranuuid7s.r_6193/8>> *1935 class8195s/cege77)include/asm-i3195s/>193e7s.r5S73ulatio5 contd="]Lddh>ords" genec82e_]nom.c#uuid5f=_byterar/rangenec82e_]nom.c#uuidl_irqe=x"a"dr56ers/cuuid5f=_byterar/ranuuid7s.r_dah6> *1936 class819Olwpege77andom.c#L275" i19Olw>193 7las5a73oeck} else6b<DEFINE_SPINLOCKl_irqe=x"a"dr56ers/cbootid_spinlingr5f="dbuf">b<bootid_spinling7s.r_dah6> *1938 class819-)atic s7ruct > *1939 class819x"=pege77)include/asm-i319x"=>193a8>b<5pin_lingl_irqgas_o ==id="L367" cubootid_spinlingr5f="dbuf">b<bootid_spinling7s.r_dah6> *194" class819>stpege77)include/asm-i319>st>194c8las5a82r sugg5.  Thuid=!d="]Lddh>ords" uuid5f=_byterar/ranuuid7s.r[8]_ah6> *1941 class819rs/css="7ine" name="L36619rs/>194e7s.r5a73produc5 the io5 contd="]Lddh>ords" genec82e_]nom.c#uuid5f=_byterar/rangenec82e_]nom.c#uuidl_irqe=x"a"dr56ers/cuuid5f=_byterar/ranuuid7s.r_dah6> *1942 class819 class="7ine" name="L36619 cl>194ridah6666666666666666wa5s possible.<5pin_unlingr5f="dbuf">b<5pin_unlingl_irqgas_o ==id="L367" cubootid_spinlingr5f="dbuf">b<bootid_spinling7s.r_dah6> *1943 class819de]pege77)include/asm-i319de]>194/8>
194e7s.r 5pommen 5period over
19457las5=70e drai5comment"> *b<sp2inthl_irqe=x"a"dr56ers/cbuhr5f="dbuf">b<buhrqredaw=77ine" n5de5m2ing">"%pU"pan>
> *1946 class819Olwpege77)include/asm-i319Olw>194l7nfoid="++a , (b<fake_table7s.r.wa5s possible.b<data7s.rarandid="L367" addbuhr5f="dbuf">b<buhrqredah6> *1948 class819st]pege77)include/asm-i319st]>194a7 *b<fake_table7s.r.wa5s possible.b<buhrqre_dah6> *1949 class819x"=pege77ine" name="L36619x"=>194e8s.r5a82s="sref">7and5n72ate an5 the 195" class819 class="7ine" name="L36619 cl>195c8las5a82r sus=5.   d="]Lddh>ords" proc_do5m2ing"f=_byterar/ranproc_do5m2ingl_irqgas_o ==id="L367" cufake_tablea hr5l368">b<fake_table7s.rdlai5comment"> *b< posl_ir_dah6> *1951 class819=7]pege77)include/asm-i319=7]>19517s.re 5pommen 5period over
19527s.r 5pommen 5period over

195/8>
19557las4=77ine" n5dev/random.<*span>
195 7las5m82prouor"e=x"a"dr56ers/cproc_do_r5f=_ge5f=_byterar/ranproc_do_r5f=_gel_irq5m2/as_ode=poolwords" ctl_tablea hr5l368">b<ctl_table7s.r4iode=poolwords" tablea hr5l368">b<table7s.rdauor"e=x"a"dr56ers/cwrite5f=_byterar/ranwritel_ird5a82s="sref">7and5n72ate an5 the 1957 class819 class="7three taps, ins19 cl>195 8las5a82r sugg5.  Thhhhhhhhh hhvoid ai5comment"> *<__usecs__micrngx" cla__usec7s.r4id="]Lddh>ords" buhfecs__micrngx" clabuhfecrqredawa5s possible.<5refchar/randdichar/r5refch7ords" lenlass__micpb< posl_ir_ah6> *1958 class819st]pege77ine" name="L36619st]>195a7195a8>b<ctl_table7s.r4wa5s possible.b<fake_table7s.rdah6> *196" class819and}ege77)include/asm-i319and>196c8las5a82r suuor"e=x"a"dr56ers/cr5f=_ge_coun m hr5l368">b<ndo=_ge_coun 8>> *1961 class819rs/css="7ine" name="L36619rs/>196e7s.r 5pommen 5period over
b<ndo=_ge_coun 8>b<table7s.r8crngndid="L367" adddataa hr5l368">b<data7s.ra&ge=&ge=.ai5comment"> *b<ENTROPY_SHIFT8>> *1963 class819" class=7)include/asm-i319" c>196e7s.r5n76class=5comment">/*
196/8>b<fake_table7s.r.wa5s possible.b<data7s.raragas_o ==id="L367" cur5f=_ge_coun m hr5l368">b<ndo=_ge_coun 8>> *1965 class819ith only7andom.c#L314" i19ith>19657las5=70e drai5comment"> *b<fake_table7s.r.wa5s possible.b<ndo=_ge_coun 8>> *1966 class819Olwpege77ine" name="L36619Olw>196l7nfoid="++a , (196/8>b<fake_table7s.rdlai5comment"> *b< posl_ir_dah6asm/io.h<19 cl>196a7
196e8s.r5a82s="sref">7and5n72ate an5 the 197" class819>:1pege77)include/asm-i319>:1>19707s.r5m82prouor"e=x"a"dr56ers/csysctl_lde"sizea hr5l368">b<sysctl_lde"size7s.rarandid="L367" addINPUT_POOL_WORDSa hr5l368">b<INPUT_POOL_WORDS7s.r4i 32dah6> *1971 class819rs/css="7)include/asm-i319rs/>197e7s.rexte   5m2/as_ode=poolwords" ctl_tablea hr5l368">b<ctl_table7s.r4wa5s possible.<]nom.c#tablea hr5l368">b<]nom.c#table7s.r[]did="++a , (197ridah5m2/as_ode=poolwords" ctl_tablea hr5l368">b<ctl_table7s.r4wa5s possible.<]nom.c#tablea hr5l368">b<]nom.c#table7s.r[]a=a19738>197/8>"lde"size"pan>
197e7s.r5S73ulatio5 cont.wa5s possible.b<data7s.raaaaaaaaaaaragas_o ==id="L367" cusysctl_lde"sizea hr5l368">b<sysctl_lde"size7s.rdid="++a , (197 8las5a82r sugg5.  Th.wa5s possible.197a8>19808>198e7s.r5a73produc5 the .wa5s possible."ndo=_ge_avail"pan>
198ridah6666666666666666.wa5s possible.198/8>198/8>198e7s.r5S73ulatio5 cont.wa5s possible.b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuinput_lde"a hr5l368">b<input_lde"l_ir.wa5s possible.b<ndo=_ge_coun 8>("read_wakeup_t"a"shold"pan>
b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuc""".c#read_wakeup_bitra hr5l368">b<]nom.c#read_wakeup_bitr8>199c8las5a82r sugg5.  Th.wa5s possible.stss="7ine" name="L36619a>s>199e7s.r5a73produc5 the .wa5s possible.199ridah6666666666666666.wa5s possible.199/8>b<nxtra17s.raaaaaaaaaragas_o ==id="L367" cumin#read_t"a"sh5f=_byterar/ranmin#read_t"a"shl_irdid="++a , (b<nxtra27s.raaaaaaaaaragas_o ==id="L367" cumax#read_t"a"sh5f=_byterar/ranmax#read_t"a"shl_irdid="++a , (("write_wakeup_t"a"shold"pan>
199a7b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuc""".c#write_wakeup_bitra hr5l368">b<]nom.c#write_wakeup_bitrl_irdid="++a , (20s"7s.r5a73produc5 the .wa5s possible.d="++a , (stss="7ine" name="L36620s>s>20se7s.r5a73produc5 the .wa5s possible.20sridah6666666666666666.wa5s possible.b<nxtra17s.raaaaaaaaaragas_o ==id="L367" cumin#write_t"a"sh5f=_byterar/ranmin#write_t"a"sh7s.rdid="++a , (20s/8>b<nxtra27s.raaaaaaaaaragas_o ==id="L367" cumax#write_t"a"sh5f=_byterar/ranmax#write_t"a"shl_irdid="++a , (("uc""".c#min#reseed_secs"pan>
b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuc""".c#min#uc""".c#seeda hr5l368">b<]nom.c#min#uc""".c#seedl_irdid="++a , (20sa720" 7st,ss="8line" name="L3220>st>20"17s.r5S73ulat}did="++a , (20"27las5a73oeck20"/8>"boot_id"pan>
b<data7s.raaaaaaaaaaaragas_o ==id="L367" cusysctl_bootid5f=_byterar/ransysctl_bootid7s.rdid="++a , (20ol7las5a73oeck, 5 made.wa5s possible."uuid"pan>
20oridah6666666666666666.wa5s possible.20o/8>20o47s.r5S73ulat}did="++a , (20oe7s.r#ifdefawa5s possible.7and5n72ate an5 the 20o6 class820Olwpege78)include/asm-i320Olw>20o 7las5a73oeck20o 8las5a82r sugg5.  Th.wa5s possible."add_uorerrupt_avg_cycles"pan>
20oa7b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuavg_cyclesa hr5l368">b<avg_cyclesl_irdid="++a , (20oa8>b<avg_cyclesl_ir)did="++a , (20clidah6666666666666666.wa5s possible.20ce7s.r5a73produc5 the .wa5s possible.20c27s.r5S73ulat}did="++a , (20c38>20c/8>"add_uorerrupt_avg_devi82pon"pan>
20ce7s.r5S73ulatio5 cont.wa5s possible.b<data7s.raaaaaaaaaaaragas_o ==id="L367" cuavg_devi82pona hr5l368">b<avg_devi82ponl_irdid="++a , (20c 7las5a73oeck, 5 made.wa5s possible.b<avg_devi82ponl_ir)did="++a , (20ca8>stpege77)include/asm-i320>st>20>s7s.r#endifid="++a , (> *20>3 class820de]pege77)include/asm-i320de]>20>37s.r#endif  4=77ine" n5dev/random./* CONFIG_SYSCTL<*span>
4 class820st]pege77)include/asm-i320st]>20>e7s.r 5pommen 5period over
5 class820st]pege77)include/asm-i320st]>20>e7s.r5m82prondid="L367" addu32m hr5l368">b<uc27s.r5 ==id="L367" cuc""".c#uor_secre m hr5l368">b<c""".c#uor_secre 7s.r[ ==id="L367" cuMD5_MESSAGE_BYTESa hr5l368">b<MD5_MESSAGE_BYTES7s.r5/ 4] ai5comment"> *<____cachenclu_aleserva hr5l368">b<____cachenclu_aleserv7s.rdah6> *20>6 class820Olwpege77)include/asm-i320Olw>20>l7nfoid="++a , (7 class820 class="7)include/asm-i320 cl>20> 8lasuor"e=x"a"dr56ers/cc""".c#uor_secre #uoi m hr5l368">b<c""".c#uor_secre #uoi 8las(void_ah6> *20>8 class820st]pege77)include/asm-i320st]>20>a79 class820x"=pege77ine" name="L36620x"=>20>a8>b<ge #c""".c#t_ hr8las( ==id="L367" cuc""".c#uor_secre m hr5l368">b<c""".c#uor_secre 7s.r,asref[4] ==id="L367" cuc""".c#uor_secre m hr5l368">b<c""".c#uor_secre 7s.r)_dah620 17s.re 5pommen 5period over
20 27s.r 5pommen 5period over
b<DEFINE_PER_CPU8las( ==id="L367" cu__u32m hr5l368">b<__u328>b<MD5_DIGEST_WORDS8>
20 /8>b<__aleserv7s.r(sref[4]un4eservelong)_dah620 e7s.rah6> *20 6 class820Olwpege77three taps, ins20Olw>20  7las4=77ine" n5dev/random./*pan>


20 a8>
20an8>

> *2063 class820" class=7)include/asm-i320" c>20a3720a/8>b<__u328>ords" hash5f=_byterar/ranhash7s.rdah620ae7s.r5S73ulatun4eserveuorawa5s possible.b<ce 8>> *20a6 class820Olwpege77ine" name="L36620Olw>20al7nfoid="++a , (20a 8las5a82r su id=ai5comment"> *b<ce 8>> *20a8 class820 class="7r p4">asm/io.h<20 cl>20aa7b<ce 8>> *20a9 class820x"=pege77)include/asm-i320x"=>20ae8s.r5a82s="sref">7and5n72ate an5 the 207" class820>:1pege77)include/asm-i320>:1>20>:8>> *2071 class820rs/css="7)include/asm-i320rs/>20>e7s.r 5pommen 5period over
2 class820":1pege77)include/asm-i320":1>20>27s.r4n78produc5 colli7" addhash5f=_byterar/ranhash7s.r[0] +randid="L367" addcurrndom hr5l368">b<currndol_ir8crngndid="L367" addpid5f=_byterar/ranpid7s.ra+andid="L367" addjiffihrm hr5l368">b<jiffihr7s.ra+andid="L367" addc""".c#ge #r5f=_ge5f=_byterar/ranc""".c#ge #r5f=_ge8las()dah6> *2073 class820ef]pege77)include/asm-i320ef]>20>37s.r4n78produc5 colli7" addmd5_t"L3sform5f=_byterar/ranmd5_t"L3sform8las( ==id="L367" cuhash5f=_byterar/ranhash7s.rdawa5s possible.b<c""".c#uor_secre 7s.r)dah6> *2074 class820ith only7)include/asm-i320ith>20>/8>b<ce 8>> *2075 class820ith only7andom.c#L314" i20ith>20>57las5=70e drai5comment"> *> *2076 class820Olwpege77ine" name="L36620Olw>20>l7nfoid="++a , (20>/8>b<ce 8>> *2078 class820 cl,ss="7ine" name="L36620 cl>20>a7
9 class820x"=pege77)include/asm-i320x"=>20>a8>ords" EXPORT_SYMBOL5f=_byterar/ranEXPORT_SYMBOL8las( ==id="L367" cuge #c""".c#uor5f=_byterar/range #c""".c#uor8las)dah6> *208" class820rs/char/7andom.c#L289" i20rs/>20rs7nfoid="++a , (20re7s.r4=77ine" n5dev/random./*pan>
20r27s.ra=77ine" n5dev/random.<* Sasm as ge #c""".c#uor(), but s=5.  s un4eservelongin damagdinicl"licass=atclaom3lasslow-orl20r3 class820-&gpege77)include/asm-i320-&g>20r/8>
20r48>> *2085 class820ith only7andom.c#L314" i20ith>20r57 *<__u32m hr5l368">b<__u328>ords" hash5f=_byterar/ranhash7s.rdah6b<ce 8>> *2088 class820 cl,ss="7ine" name="L36620 cl>20r<7s.rah6> *20r9 class820-&gpege77ine" name="L36620-&g>20ra8> *b<ce 8>> *209" class820x"),ss="7ine" name="L36620x")>20x"7b<ce 8>> *2091 class820a>stss="7ine" name="L36620a>s>20xe7s.r 5pommen 5period over
20x27s.r4n78produc5 colli7" addhash5f=_byterar/ranhash7s.r7randid="L367" addge #cpu_vacs__micrngx" clage #cpu_vac8las( ==id="L367" cuge #c""".c#uor_hash5f=_byterar/range #c""".c#uor_hash7s.r)dah6> *2093 class820-&gpege77andom.c#L272" i20-&g>20xe7s.r5n76class=5comment">/*
b<currndol_ir8crngndid="L367" addpid5f=_byterar/ranpid7s.ra+andid="L367" addjiffihrm hr5l368">b<jiffihr7s.ra+andid="L367" addc""".c#ge #r5f=_ge5f=_byterar/ranc""".c#ge #r5f=_ge8las()dah6/*
 *b<c""".c#uor_secre 7s.r)dah6> *2096 class820Olwpege77ine" name="L36620Olw>20x67las5=70e drai5comment"> *b<ce 8>> *2098 class820=x",ss="7ine" name="L36620=x">20x<7s.rah6> *2099 class820-&gpege77ine" name="L36620-&g>20xa8>b<ce 8>> *21s" class821s" cege77ine" name="L36621s" >21s"7s.re 5pommen 5period over
stss="7ine" name="L36621s>s>21se7s.r4="]Lddh>ords" EXPORT_SYMBOL5f=_byterar/ranEXPORT_SYMBOL8las( ==id="L367" cuge #c""".c#long5f=_byterar/range #c""".c#long8las)dah6> *21s2 class821sc}pege77)include/asm-i321sc}>21027s.r 5pommen 5period over
210/8>


210a7211n8>st,ss="8line" name="L3221>st>211e7s.r4=77ine" n5dev/random.<* NOTE: Historical use of """"""refcassge, whichsthis replaces, peesumed thatpan>
21127s.ra=77ine" n5dev/random.<* @startawas already page aleserv.  We now alese it s=gardlessin damagdinicl"licass=atclaom3lasslow-orl2113 class821" class=8line" name="L3221" c>211/8>
b<c""".crefcpage8las(un4eservelongawa5s possible.b<start7s.rdaun4eservelongawa5s possible.b<c""ge8las_ah6> *2119 class8219s/cege78ine" name="L366219s/>21"97las21ol7las5a73oeckuid=!d="]Lddh>ords" PAGE_ALIGNEDm hr5l368">b<PAGE_ALIGNED8las( ==id="L367" custartm hr5l368">b<start7s.r)_6b<c""ge8las -randid="L367" addPAGE_ALIGNm hr5l368">b<PAGE_ALIGN8las( ==id="L367" custartm hr5l368">b<start7s.r) -  ==id="L367" custartm hr5l368">b<start7s.rdah6> *2122 class821" class=8)include/asm-i321" c>21oridah6666666666666666 ==id="L367" custartm hr5l368">b<start7s.r7randid="L367" addPAGE_ALIGNm hr5l368">b<PAGE_ALIGN8las( ==id="L367" custartm hr5l368">b<start7s.r)dah6> *2123 class821=x"pege78)include/asm-i321=x">21o/8>
212e7s.r 5pommen 5period over
21257las5a73oeckuid= ==id="L367" custartm hr5l368">b<start7s.r7&ge=.ai5comment"> *b<ULONG_MAX8las -awa5s possible.b<c""ge8las_ah6> *21o6 class821Olwpege78)include/asm-i321Olw>212 7las5a73oeck, 5 madewa5s possible.b<c""ge8las randid="L367" addULONG_MAXm hr5l368">b<ULONG_MAX8las -awa5s possible.b<start7s.rdah6> *2127 class8217s/cege78andom.c#L266" i217s/>21o 8lasah6> *2128 class821rs/char/8)include/asm-i321rs/>21oa7b<c""ge8las &ge=&ge=randid="L367" addPAGE_SHIFTa hr5l368">b<PAGE_SHIFT7s.rdah6> *2129 class8219s/cege78)include/asm-i3219s/>212e8s.r5a82s="sref">7and5n72ate an5 the 213" class821clapege787dd_pt* a_7"t1<21cla>213l7las5a73oeckuid=wa5s possible.b<c""ge8las r= 0_ah6> *2131 class821clapege77)include/asm-i321cla>21ce7s.r5a73produc5 the s=5.   d="]Lddh>ords" startm hr5l368">b<start7s.rdah6> *2132 class821e3lpege77)include/asm-i321e3l>21327s.r 5pommen 5period over
21c38>b<start7s.rrro( ==id="L367" cuge #c""".c#long5f=_byterar/range #c""".c#long8las;) 6ame="L368">> *20>8 91ead_s=5.   d="]Lddh>ordsS779o25 class8215s/cege78)include/asm-i3215s/>2h6b<uc27s.5a73producass1989 class819-&gpege77ine" name="L36er
20ce7s.r5S73ula1io5 c13e" name="L368">> *20 6 class820Olwpege71andom.c#L215" i20Olw>20c 7las5a73oec1, 5 m13random./*pan>
 use on-ilar to> *20 6ng atrue lasdware Rde.20c 7las5a73oec1, 5 m13random3producaass819/c}pege81lass820/c}pege77)include/asm-i32ss="7)include/s -awa5s possible.b&ible.1s/>20" 8las5a82r sugg5.  c}pege81laele.b&iblrar/range #c""".c#uor_hash7s.r(b<dOge78ln985l368">b&iblrar/range #c""".c#uor_hash7s.rng at.e throttldom.e81laele.b&iblrar/range ege78)inclolwords" class2039 class810x"=p13* value is not cryptographical"hen ourhe coslasfu" n5dev/random.<* If @starta+a@assge would o=36620rs/>21>e7s.r5a73prod{se 5pommen15peri13s=atclaom3lasslow-orl2111 clagem hr5l368">b<c""".crefcpage8las(un4eserL36620 cl>10>27s.r}dah6b<ce 8>avghwgakein or-&gpegen#c"" namconst cpag68">b< posl_ir_ah6> *1958 class819st]pege77ine" name="L36619st]>195as()dah621c3e78)include/asm-i321=x">21o/8>b<start7s.r) - >
51class820st]pege77)include1asm-i14sm-i3215s/>2h> *2088 clae code/asm-i319x"=>1e cod368">> d="++a , (20c 7lr5l368">b&1tc""".c#uor_secre 7s.r[ =1id="L167" cuMD5_MESSAGE_BYTESa hr5l368">b<MD1_MESSAGE_B1TES7s.r5/ 4] ai5comment">1*<___14pege78)include/assible.b<start7s.r) - void_ah6>1*20>814/cege78andom.c#L266" i217s/>21o 8lascrngnfast77iaL36620[1]>20x57lcrngnfast77iaLrs/>212e7s.r 5pommenah6> *1958 class819stca82r su20c 7la714rngx" claproc_hds"lec620c 7laege78)incl".c#uor_secre m hr5l368">1<c"14ssible.20c 7la6620rs/>21secre m hr5l368">b<c"""1c#uor14sm-i321cla>21ce7s.r5a73produc5 the s=5. 01" i20 cl120 27s.r 5pommen 5period 1ver
211 7las4=77ine" n5dev/random.<*span>
b<__u328>b<c""".crefcpage8las(un4eser>20 e7s.ra16> *15367" addc""".c#ge #r5f=_ge5fwait_evatcg_devi82pois5g81eling 5intel.wait_evatcg_devi82pois5grs/>212e7s.r 5pommen".c#uo_.c#write> *1958 class819stkup_bad_itruldo Wede/asm-i319x"=>1kup_bad_itruldo Wed" name=||368">b<c""".crefcpage8las(un4eser>MESSAGE_B1ps, ins20 cl>20  8las4=771ne" n15lw>20c 7las5a73oeck, addc""".c#ge #r5f=_ge5fblea hr5BITcolli7" add__aleblea hr5BITc" namd="++a , (213l7las5a73oeck".c#uo_.c#write_wake)did="++a , (20c 7lnal kernel1use only. Similar tosuc""1.c bu15ssible.212e7s.r 5pommene code/asm-i319x"=>1e cod368"6a7
20c 7l"L36620st]120 a720x<7s.rah61e cod368"6a720c 7l"ege78)incl=>20 a8>> *208" cla1sm-i320and120an8>212e7s.r 5pommenuavghwgakein or-&gpegen#c"5l368">b<ce 8>avghwgakein or-&gpegen#c"" na/Olwpege71andom.c#L215" i20Olw>20c 7l<*span>



r/div>


magdorigiult,LXR softugg5.by ar/rwpege71anhttp://sourceforge.net clojects/lxi">LXR ass=unit"l_ir.icl"liexperi=atclt,.c#Lion.by wpege71anmailto:lxi@#L3ux.no">lxi@#L3ux.nol_ir.
r/div>

lxi.#L3ux.no kindly hosted.by wpege71anhttp://www.redpill-#L3clo.no">Redpill LL3clo ASl_ir.iclovider" 8lLL3ux consulasslows.ropein ions ser5l368"sin/ra pos.
r/div>