OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [char/] [random.c] - Blame information for rev 65

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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_input_randomness(unsigned int type, unsigned int code,
129
 *                                unsigned int value);
130
 *      void add_interrupt_randomness(int irq);
131
 *
132
 * add_input_randomness() uses the input layer interrupt timing, as well as
133
 * the event type information from the hardware.
134
 *
135
 * add_interrupt_randomness() uses the inter-interrupt timing as random
136
 * inputs to the entropy pool.  Note that not all interrupts are good
137
 * sources of randomness!  For example, the timer interrupts is not a
138
 * good choice, because the periodicity of the interrupts is too
139
 * regular, and hence predictable to an attacker.  Disk interrupts are
140
 * a better measure, since the timing of the disk interrupts are more
141
 * unpredictable.
142
 *
143
 * All of these routines try to estimate how many bits of randomness a
144
 * particular randomness source.  They do this by keeping track of the
145
 * first and second order deltas of the event timings.
146
 *
147
 * Ensuring unpredictability at system startup
148
 * ============================================
149
 *
150
 * When any operating system starts up, it will go through a sequence
151
 * of actions that are fairly predictable by an adversary, especially
152
 * if the start-up does not involve interaction with a human operator.
153
 * This reduces the actual number of bits of unpredictability in the
154
 * entropy pool below the value in entropy_count.  In order to
155
 * counteract this effect, it helps to carry information in the
156
 * entropy pool across shut-downs and start-ups.  To do this, put the
157
 * following lines an appropriate script which is run during the boot
158
 * sequence:
159
 *
160
 *      echo "Initializing random number generator..."
161
 *      random_seed=/var/run/random-seed
162
 *      # Carry a random seed from start-up to start-up
163
 *      # Load and then save the whole entropy pool
164
 *      if [ -f $random_seed ]; then
165
 *              cat $random_seed >/dev/urandom
166
 *      else
167
 *              touch $random_seed
168
 *      fi
169
 *      chmod 600 $random_seed
170
 *      dd if=/dev/urandom of=$random_seed count=1 bs=512
171
 *
172
 * and the following lines in an appropriate script which is run as
173
 * the system is shutdown:
174
 *
175
 *      # Carry a random seed from shut-down to start-up
176
 *      # Save the whole entropy pool
177
 *      echo "Saving random seed..."
178
 *      random_seed=/var/run/random-seed
179
 *      touch $random_seed
180
 *      chmod 600 $random_seed
181
 *      dd if=/dev/urandom of=$random_seed count=1 bs=512
182
 *
183
 * For example, on most modern systems using the System V init
184
 * scripts, such code fragments would be found in
185
 * /etc/rc.d/init.d/random.  On older Linux systems, the correct script
186
 * location might be in /etc/rcb.d/rc.local or /etc/rc.d/rc.0.
187
 *
188
 * Effectively, these commands cause the contents of the entropy pool
189
 * to be saved at shut-down time and reloaded into the entropy pool at
190
 * start-up.  (The 'dd' in the addition to the bootup script is to
191
 * make sure that /etc/random-seed is different for every start-up,
192
 * even if the system crashes without executing rc.0.)  Even with
193
 * complete knowledge of the start-up activities, predicting the state
194
 * of the entropy pool requires knowledge of the previous history of
195
 * the system.
196
 *
197
 * Configuring the /dev/random driver under Linux
198
 * ==============================================
199
 *
200
 * The /dev/random driver under Linux uses minor numbers 8 and 9 of
201
 * the /dev/mem major number (#1).  So if your system does not have
202
 * /dev/random and /dev/urandom created already, they can be created
203
 * by using the commands:
204
 *
205
 *      mknod /dev/random c 1 8
206
 *      mknod /dev/urandom c 1 9
207
 *
208
 * Acknowledgements:
209
 * =================
210
 *
211
 * Ideas for constructing this random number generator were derived
212
 * from Pretty Good Privacy's random number generator, and from private
213
 * discussions with Phil Karn.  Colin Plumb provided a faster random
214
 * number generator, which speed up the mixing function of the entropy
215
 * pool, taken from PGPfone.  Dale Worley has also contributed many
216
 * useful ideas and suggestions to improve this driver.
217
 *
218
 * Any flaws in the design are solely my responsibility, and should
219
 * not be attributed to the Phil, Colin, or any of authors of PGP.
220
 *
221
 * Further background information on this topic may be obtained from
222
 * RFC 1750, "Randomness Recommendations for Security", by Donald
223
 * Eastlake, Steve Crocker, and Jeff Schiller.
224
 */
225
 
226
#include <linux/utsname.h>
227
#include <linux/module.h>
228
#include <linux/kernel.h>
229
#include <linux/major.h>
230
#include <linux/string.h>
231
#include <linux/fcntl.h>
232
#include <linux/slab.h>
233
#include <linux/random.h>
234
#include <linux/poll.h>
235
#include <linux/init.h>
236
#include <linux/fs.h>
237
#include <linux/genhd.h>
238
#include <linux/interrupt.h>
239
#include <linux/spinlock.h>
240
#include <linux/percpu.h>
241
#include <linux/cryptohash.h>
242
 
243
#include <asm/processor.h>
244
#include <asm/uaccess.h>
245
#include <asm/irq.h>
246
#include <asm/io.h>
247
 
248
/*
249
 * Configuration information
250
 */
251
#define INPUT_POOL_WORDS 128
252
#define OUTPUT_POOL_WORDS 32
253
#define SEC_XFER_SIZE 512
254
 
255
/*
256
 * The minimum number of bits of entropy before we wake up a read on
257
 * /dev/random.  Should be enough to do a significant reseed.
258
 */
259
static int random_read_wakeup_thresh = 64;
260
 
261
/*
262
 * If the entropy count falls under this number of bits, then we
263
 * should wake up processes which are selecting or polling on write
264
 * access to /dev/random.
265
 */
266
static int random_write_wakeup_thresh = 128;
267
 
268
/*
269
 * When the input pool goes over trickle_thresh, start dropping most
270
 * samples to avoid wasting CPU time and reduce lock contention.
271
 */
272
 
273
static int trickle_thresh __read_mostly = INPUT_POOL_WORDS * 28;
274
 
275
static DEFINE_PER_CPU(int, trickle_count) = 0;
276
 
277
/*
278
 * A pool of size .poolwords is stirred with a primitive polynomial
279
 * of degree .poolwords over GF(2).  The taps for various sizes are
280
 * defined below.  They are chosen to be evenly spaced (minimum RMS
281
 * distance from evenly spaced; the numbers in the comments are a
282
 * scaled squared error sum) except for the last tap, which is 1 to
283
 * get the twisting happening as fast as possible.
284
 */
285
static struct poolinfo {
286
        int poolwords;
287
        int tap1, tap2, tap3, tap4, tap5;
288
} poolinfo_table[] = {
289
        /* x^128 + x^103 + x^76 + x^51 +x^25 + x + 1 -- 105 */
290
        { 128,  103,    76,     51,     25,     1 },
291
        /* x^32 + x^26 + x^20 + x^14 + x^7 + x + 1 -- 15 */
292
        { 32,   26,     20,     14,     7,      1 },
293
#if 0
294
        /* x^2048 + x^1638 + x^1231 + x^819 + x^411 + x + 1  -- 115 */
295
        { 2048, 1638,   1231,   819,    411,    1 },
296
 
297
        /* x^1024 + x^817 + x^615 + x^412 + x^204 + x + 1 -- 290 */
298
        { 1024, 817,    615,    412,    204,    1 },
299
 
300
        /* x^1024 + x^819 + x^616 + x^410 + x^207 + x^2 + 1 -- 115 */
301
        { 1024, 819,    616,    410,    207,    2 },
302
 
303
        /* x^512 + x^411 + x^308 + x^208 + x^104 + x + 1 -- 225 */
304
        { 512,  411,    308,    208,    104,    1 },
305
 
306
        /* x^512 + x^409 + x^307 + x^206 + x^102 + x^2 + 1 -- 95 */
307
        { 512,  409,    307,    206,    102,    2 },
308
        /* x^512 + x^409 + x^309 + x^205 + x^103 + x^2 + 1 -- 95 */
309
        { 512,  409,    309,    205,    103,    2 },
310
 
311
        /* x^256 + x^205 + x^155 + x^101 + x^52 + x + 1 -- 125 */
312
        { 256,  205,    155,    101,    52,     1 },
313
 
314
        /* x^128 + x^103 + x^78 + x^51 + x^27 + x^2 + 1 -- 70 */
315
        { 128,  103,    78,     51,     27,     2 },
316
 
317
        /* x^64 + x^52 + x^39 + x^26 + x^14 + x + 1 -- 15 */
318
        { 64,   52,     39,     26,     14,     1 },
319
#endif
320
};
321
 
322
#define POOLBITS        poolwords*32
323
#define POOLBYTES       poolwords*4
324
 
325
/*
326
 * For the purposes of better mixing, we use the CRC-32 polynomial as
327
 * well to make a twisted Generalized Feedback Shift Reigster
328
 *
329
 * (See M. Matsumoto & Y. Kurita, 1992.  Twisted GFSR generators.  ACM
330
 * Transactions on Modeling and Computer Simulation 2(3):179-194.
331
 * Also see M. Matsumoto & Y. Kurita, 1994.  Twisted GFSR generators
332
 * II.  ACM Transactions on Mdeling and Computer Simulation 4:254-266)
333
 *
334
 * Thanks to Colin Plumb for suggesting this.
335
 *
336
 * We have not analyzed the resultant polynomial to prove it primitive;
337
 * in fact it almost certainly isn't.  Nonetheless, the irreducible factors
338
 * of a random large-degree polynomial over GF(2) are more than large enough
339
 * that periodicity is not a concern.
340
 *
341
 * The input hash is much less sensitive than the output hash.  All
342
 * that we want of it is that it be a good non-cryptographic hash;
343
 * i.e. it not produce collisions when fed "random" data of the sort
344
 * we expect to see.  As long as the pool state differs for different
345
 * inputs, we have preserved the input entropy and done a good job.
346
 * The fact that an intelligent attacker can construct inputs that
347
 * will produce controlled alterations to the pool's state is not
348
 * important because we don't consider such inputs to contribute any
349
 * randomness.  The only property we need with respect to them is that
350
 * the attacker can't increase his/her knowledge of the pool's state.
351
 * Since all additions are reversible (knowing the final state and the
352
 * input, you can reconstruct the initial state), if an attacker has
353
 * any uncertainty about the initial state, he/she can only shuffle
354
 * that uncertainty about, but never cause any collisions (which would
355
 * decrease the uncertainty).
356
 *
357
 * The chosen system lets the state of the pool be (essentially) the input
358
 * modulo the generator polymnomial.  Now, for random primitive polynomials,
359
 * this is a universal class of hash functions, meaning that the chance
360
 * of a collision is limited by the attacker's knowledge of the generator
361
 * polynomail, so if it is chosen at random, an attacker can never force
362
 * a collision.  Here, we use a fixed polynomial, but we *can* assume that
363
 * ###--> it is unknown to the processes generating the input entropy. <-###
364
 * Because of this important property, this is a good, collision-resistant
365
 * hash; hash collisions will occur no more often than chance.
366
 */
367
 
368
/*
369
 * Static global variables
370
 */
371
static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
372
static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
373
 
374
#if 0
375
static int debug = 0;
376
module_param(debug, bool, 0644);
377
#define DEBUG_ENT(fmt, arg...) do { if (debug) \
378
        printk(KERN_DEBUG "random %04d %04d %04d: " \
379
        fmt,\
380
        input_pool.entropy_count,\
381
        blocking_pool.entropy_count,\
382
        nonblocking_pool.entropy_count,\
383
        ## arg); } while (0)
384
#else
385
#define DEBUG_ENT(fmt, arg...) do {} while (0)
386
#endif
387
 
388
/**********************************************************************
389
 *
390
 * OS independent entropy store.   Here are the functions which handle
391
 * storing entropy in an entropy pool.
392
 *
393
 **********************************************************************/
394
 
395
struct entropy_store;
396
struct entropy_store {
397
        /* mostly-read data: */
398
        struct poolinfo *poolinfo;
399
        __u32 *pool;
400
        const char *name;
401
        int limit;
402
        struct entropy_store *pull;
403
 
404
        /* read-write data: */
405
        spinlock_t lock ____cacheline_aligned_in_smp;
406
        unsigned add_ptr;
407
        int entropy_count;
408
        int input_rotate;
409
};
410
 
411
static __u32 input_pool_data[INPUT_POOL_WORDS];
412
static __u32 blocking_pool_data[OUTPUT_POOL_WORDS];
413
static __u32 nonblocking_pool_data[OUTPUT_POOL_WORDS];
414
 
415
static struct entropy_store input_pool = {
416
        .poolinfo = &poolinfo_table[0],
417
        .name = "input",
418
        .limit = 1,
419
        .lock = __SPIN_LOCK_UNLOCKED(&input_pool.lock),
420
        .pool = input_pool_data
421
};
422
 
423
static struct entropy_store blocking_pool = {
424
        .poolinfo = &poolinfo_table[1],
425
        .name = "blocking",
426
        .limit = 1,
427
        .pull = &input_pool,
428
        .lock = __SPIN_LOCK_UNLOCKED(&blocking_pool.lock),
429
        .pool = blocking_pool_data
430
};
431
 
432
static struct entropy_store nonblocking_pool = {
433
        .poolinfo = &poolinfo_table[1],
434
        .name = "nonblocking",
435
        .pull = &input_pool,
436
        .lock = __SPIN_LOCK_UNLOCKED(&nonblocking_pool.lock),
437
        .pool = nonblocking_pool_data
438
};
439
 
440
/*
441
 * This function adds a byte into the entropy "pool".  It does not
442
 * update the entropy estimate.  The caller should call
443
 * credit_entropy_store if this is appropriate.
444
 *
445
 * The pool is stirred with a primitive polynomial of the appropriate
446
 * degree, and then twisted.  We twist by three bits at a time because
447
 * it's cheap to do so and helps slightly in the expected case where
448
 * the entropy is concentrated in the low-order bits.
449
 */
450
static void __add_entropy_words(struct entropy_store *r, const __u32 *in,
451
                                int nwords, __u32 out[16])
452
{
453
        static __u32 const twist_table[8] = {
454
                0x00000000, 0x3b6e20c8, 0x76dc4190, 0x4db26158,
455
                0xedb88320, 0xd6d6a3e8, 0x9b64c2b0, 0xa00ae278 };
456
        unsigned long i, add_ptr, tap1, tap2, tap3, tap4, tap5;
457
        int new_rotate, input_rotate;
458
        int wordmask = r->poolinfo->poolwords - 1;
459
        __u32 w, next_w;
460
        unsigned long flags;
461
 
462
        /* Taps are constant, so we can load them without holding r->lock.  */
463
        tap1 = r->poolinfo->tap1;
464
        tap2 = r->poolinfo->tap2;
465
        tap3 = r->poolinfo->tap3;
466
        tap4 = r->poolinfo->tap4;
467
        tap5 = r->poolinfo->tap5;
468
        next_w = *in++;
469
 
470
        spin_lock_irqsave(&r->lock, flags);
471
        prefetch_range(r->pool, wordmask);
472
        input_rotate = r->input_rotate;
473
        add_ptr = r->add_ptr;
474
 
475
        while (nwords--) {
476
                w = rol32(next_w, input_rotate);
477
                if (nwords > 0)
478
                        next_w = *in++;
479
                i = add_ptr = (add_ptr - 1) & wordmask;
480
                /*
481
                 * Normally, we add 7 bits of rotation to the pool.
482
                 * At the beginning of the pool, add an extra 7 bits
483
                 * rotation, so that successive passes spread the
484
                 * input bits across the pool evenly.
485
                 */
486
                new_rotate = input_rotate + 14;
487
                if (i)
488
                        new_rotate = input_rotate + 7;
489
                input_rotate = new_rotate & 31;
490
 
491
                /* XOR in the various taps */
492
                w ^= r->pool[(i + tap1) & wordmask];
493
                w ^= r->pool[(i + tap2) & wordmask];
494
                w ^= r->pool[(i + tap3) & wordmask];
495
                w ^= r->pool[(i + tap4) & wordmask];
496
                w ^= r->pool[(i + tap5) & wordmask];
497
                w ^= r->pool[i];
498
                r->pool[i] = (w >> 3) ^ twist_table[w & 7];
499
        }
500
 
501
        r->input_rotate = input_rotate;
502
        r->add_ptr = add_ptr;
503
 
504
        if (out) {
505
                for (i = 0; i < 16; i++) {
506
                        out[i] = r->pool[add_ptr];
507
                        add_ptr = (add_ptr - 1) & wordmask;
508
                }
509
        }
510
 
511
        spin_unlock_irqrestore(&r->lock, flags);
512
}
513
 
514
static inline void add_entropy_words(struct entropy_store *r, const __u32 *in,
515
                                     int nwords)
516
{
517
        __add_entropy_words(r, in, nwords, NULL);
518
}
519
 
520
/*
521
 * Credit (or debit) the entropy store with n bits of entropy
522
 */
523
static void credit_entropy_store(struct entropy_store *r, int nbits)
524
{
525
        unsigned long flags;
526
 
527
        spin_lock_irqsave(&r->lock, flags);
528
 
529
        if (r->entropy_count + nbits < 0) {
530
                DEBUG_ENT("negative entropy/overflow (%d+%d)\n",
531
                          r->entropy_count, nbits);
532
                r->entropy_count = 0;
533
        } else if (r->entropy_count + nbits > r->poolinfo->POOLBITS) {
534
                r->entropy_count = r->poolinfo->POOLBITS;
535
        } else {
536
                r->entropy_count += nbits;
537
                if (nbits)
538
                        DEBUG_ENT("added %d entropy credits to %s\n",
539
                                  nbits, r->name);
540
        }
541
 
542
        spin_unlock_irqrestore(&r->lock, flags);
543
}
544
 
545
/*********************************************************************
546
 *
547
 * Entropy input management
548
 *
549
 *********************************************************************/
550
 
551
/* There is one of these per entropy source */
552
struct timer_rand_state {
553
        cycles_t last_time;
554
        long last_delta,last_delta2;
555
        unsigned dont_count_entropy:1;
556
};
557
 
558
static struct timer_rand_state input_timer_state;
559
static struct timer_rand_state *irq_timer_state[NR_IRQS];
560
 
561
/*
562
 * This function adds entropy to the entropy "pool" by using timing
563
 * delays.  It uses the timer_rand_state structure to make an estimate
564
 * of how many bits of entropy this call has added to the pool.
565
 *
566
 * The number "num" is also added to the pool - it should somehow describe
567
 * the type of event which just happened.  This is currently 0-255 for
568
 * keyboard scan codes, and 256 upwards for interrupts.
569
 *
570
 */
571
static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
572
{
573
        struct {
574
                cycles_t cycles;
575
                long jiffies;
576
                unsigned num;
577
        } sample;
578
        long delta, delta2, delta3;
579
 
580
        preempt_disable();
581
        /* if over the trickle threshold, use only 1 in 4096 samples */
582
        if (input_pool.entropy_count > trickle_thresh &&
583
            (__get_cpu_var(trickle_count)++ & 0xfff))
584
                goto out;
585
 
586
        sample.jiffies = jiffies;
587
        sample.cycles = get_cycles();
588
        sample.num = num;
589
        add_entropy_words(&input_pool, (u32 *)&sample, sizeof(sample)/4);
590
 
591
        /*
592
         * Calculate number of bits of randomness we probably added.
593
         * We take into account the first, second and third-order deltas
594
         * in order to make our estimate.
595
         */
596
 
597
        if (!state->dont_count_entropy) {
598
                delta = sample.jiffies - state->last_time;
599
                state->last_time = sample.jiffies;
600
 
601
                delta2 = delta - state->last_delta;
602
                state->last_delta = delta;
603
 
604
                delta3 = delta2 - state->last_delta2;
605
                state->last_delta2 = delta2;
606
 
607
                if (delta < 0)
608
                        delta = -delta;
609
                if (delta2 < 0)
610
                        delta2 = -delta2;
611
                if (delta3 < 0)
612
                        delta3 = -delta3;
613
                if (delta > delta2)
614
                        delta = delta2;
615
                if (delta > delta3)
616
                        delta = delta3;
617
 
618
                /*
619
                 * delta is now minimum absolute delta.
620
                 * Round down by 1 bit on general principles,
621
                 * and limit entropy entimate to 12 bits.
622
                 */
623
                credit_entropy_store(&input_pool,
624
                                     min_t(int, fls(delta>>1), 11));
625
        }
626
 
627
        if(input_pool.entropy_count >= random_read_wakeup_thresh)
628
                wake_up_interruptible(&random_read_wait);
629
 
630
out:
631
        preempt_enable();
632
}
633
 
634
void add_input_randomness(unsigned int type, unsigned int code,
635
                                 unsigned int value)
636
{
637
        static unsigned char last_value;
638
 
639
        /* ignore autorepeat and the like */
640
        if (value == last_value)
641
                return;
642
 
643
        DEBUG_ENT("input event\n");
644
        last_value = value;
645
        add_timer_randomness(&input_timer_state,
646
                             (type << 4) ^ code ^ (code >> 4) ^ value);
647
}
648
EXPORT_SYMBOL_GPL(add_input_randomness);
649
 
650
void add_interrupt_randomness(int irq)
651
{
652
        if (irq >= NR_IRQS || irq_timer_state[irq] == NULL)
653
                return;
654
 
655
        DEBUG_ENT("irq event %d\n", irq);
656
        add_timer_randomness(irq_timer_state[irq], 0x100 + irq);
657
}
658
 
659
#ifdef CONFIG_BLOCK
660
void add_disk_randomness(struct gendisk *disk)
661
{
662
        if (!disk || !disk->random)
663
                return;
664
        /* first major is 1, so we get >= 0x200 here */
665
        DEBUG_ENT("disk event %d:%d\n", disk->major, disk->first_minor);
666
 
667
        add_timer_randomness(disk->random,
668
                             0x100 + MKDEV(disk->major, disk->first_minor));
669
}
670
 
671
EXPORT_SYMBOL(add_disk_randomness);
672
#endif
673
 
674
#define EXTRACT_SIZE 10
675
 
676
/*********************************************************************
677
 *
678
 * Entropy extraction routines
679
 *
680
 *********************************************************************/
681
 
682
static ssize_t extract_entropy(struct entropy_store *r, void * buf,
683
                               size_t nbytes, int min, int rsvd);
684
 
685
/*
686
 * This utility inline function is responsible for transfering entropy
687
 * from the primary pool to the secondary extraction pool. We make
688
 * sure we pull enough for a 'catastrophic reseed'.
689
 */
690
static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
691
{
692
        __u32 tmp[OUTPUT_POOL_WORDS];
693
 
694
        if (r->pull && r->entropy_count < nbytes * 8 &&
695
            r->entropy_count < r->poolinfo->POOLBITS) {
696
                /* If we're limited, always leave two wakeup worth's BITS */
697
                int rsvd = r->limit ? 0 : random_read_wakeup_thresh/4;
698
                int bytes = nbytes;
699
 
700
                /* pull at least as many as BYTES as wakeup BITS */
701
                bytes = max_t(int, bytes, random_read_wakeup_thresh / 8);
702
                /* but never more than the buffer size */
703
                bytes = min_t(int, bytes, sizeof(tmp));
704
 
705
                DEBUG_ENT("going to reseed %s with %d bits "
706
                          "(%d of %d requested)\n",
707
                          r->name, bytes * 8, nbytes * 8, r->entropy_count);
708
 
709
                bytes=extract_entropy(r->pull, tmp, bytes,
710
                                      random_read_wakeup_thresh / 8, rsvd);
711
                add_entropy_words(r, tmp, (bytes + 3) / 4);
712
                credit_entropy_store(r, bytes*8);
713
        }
714
}
715
 
716
/*
717
 * These functions extracts randomness from the "entropy pool", and
718
 * returns it in a buffer.
719
 *
720
 * The min parameter specifies the minimum amount we can pull before
721
 * failing to avoid races that defeat catastrophic reseeding while the
722
 * reserved parameter indicates how much entropy we must leave in the
723
 * pool after each pull to avoid starving other readers.
724
 *
725
 * Note: extract_entropy() assumes that .poolwords is a multiple of 16 words.
726
 */
727
 
728
static size_t account(struct entropy_store *r, size_t nbytes, int min,
729
                      int reserved)
730
{
731
        unsigned long flags;
732
 
733
        BUG_ON(r->entropy_count > r->poolinfo->POOLBITS);
734
 
735
        /* Hold lock while accounting */
736
        spin_lock_irqsave(&r->lock, flags);
737
 
738
        DEBUG_ENT("trying to extract %d bits from %s\n",
739
                  nbytes * 8, r->name);
740
 
741
        /* Can we pull enough? */
742
        if (r->entropy_count / 8 < min + reserved) {
743
                nbytes = 0;
744
        } else {
745
                /* If limited, never pull more than available */
746
                if (r->limit && nbytes + reserved >= r->entropy_count / 8)
747
                        nbytes = r->entropy_count/8 - reserved;
748
 
749
                if(r->entropy_count / 8 >= nbytes + reserved)
750
                        r->entropy_count -= nbytes*8;
751
                else
752
                        r->entropy_count = reserved;
753
 
754
                if (r->entropy_count < random_write_wakeup_thresh)
755
                        wake_up_interruptible(&random_write_wait);
756
        }
757
 
758
        DEBUG_ENT("debiting %d entropy credits from %s%s\n",
759
                  nbytes * 8, r->name, r->limit ? "" : " (unlimited)");
760
 
761
        spin_unlock_irqrestore(&r->lock, flags);
762
 
763
        return nbytes;
764
}
765
 
766
static void extract_buf(struct entropy_store *r, __u8 *out)
767
{
768
        int i;
769
        __u32 data[16], buf[5 + SHA_WORKSPACE_WORDS];
770
 
771
        sha_init(buf);
772
        /*
773
         * As we hash the pool, we mix intermediate values of
774
         * the hash back into the pool.  This eliminates
775
         * backtracking attacks (where the attacker knows
776
         * the state of the pool plus the current outputs, and
777
         * attempts to find previous ouputs), unless the hash
778
         * function can be inverted.
779
         */
780
        for (i = 0; i < r->poolinfo->poolwords; i += 16) {
781
                /* hash blocks of 16 words = 512 bits */
782
                sha_transform(buf, (__u8 *)(r->pool + i), buf + 5);
783
                /* feed back portion of the resulting hash */
784
                add_entropy_words(r, &buf[i % 5], 1);
785
        }
786
 
787
        /*
788
         * To avoid duplicates, we atomically extract a
789
         * portion of the pool while mixing, and hash one
790
         * final time.
791
         */
792
        __add_entropy_words(r, &buf[i % 5], 1, data);
793
        sha_transform(buf, (__u8 *)data, buf + 5);
794
 
795
        /*
796
         * In case the hash function has some recognizable
797
         * output pattern, we fold it in half.
798
         */
799
 
800
        buf[0] ^= buf[3];
801
        buf[1] ^= buf[4];
802
        buf[2] ^= rol32(buf[2], 16);
803
        memcpy(out, buf, EXTRACT_SIZE);
804
        memset(buf, 0, sizeof(buf));
805
}
806
 
807
static ssize_t extract_entropy(struct entropy_store *r, void * buf,
808
                               size_t nbytes, int min, int reserved)
809
{
810
        ssize_t ret = 0, i;
811
        __u8 tmp[EXTRACT_SIZE];
812
 
813
        xfer_secondary_pool(r, nbytes);
814
        nbytes = account(r, nbytes, min, reserved);
815
 
816
        while (nbytes) {
817
                extract_buf(r, tmp);
818
                i = min_t(int, nbytes, EXTRACT_SIZE);
819
                memcpy(buf, tmp, i);
820
                nbytes -= i;
821
                buf += i;
822
                ret += i;
823
        }
824
 
825
        /* Wipe data just returned from memory */
826
        memset(tmp, 0, sizeof(tmp));
827
 
828
        return ret;
829
}
830
 
831
static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
832
                                    size_t nbytes)
833
{
834
        ssize_t ret = 0, i;
835
        __u8 tmp[EXTRACT_SIZE];
836
 
837
        xfer_secondary_pool(r, nbytes);
838
        nbytes = account(r, nbytes, 0, 0);
839
 
840
        while (nbytes) {
841
                if (need_resched()) {
842
                        if (signal_pending(current)) {
843
                                if (ret == 0)
844
                                        ret = -ERESTARTSYS;
845
                                break;
846
                        }
847
                        schedule();
848
                }
849
 
850
                extract_buf(r, tmp);
851
                i = min_t(int, nbytes, EXTRACT_SIZE);
852
                if (copy_to_user(buf, tmp, i)) {
853
                        ret = -EFAULT;
854
                        break;
855
                }
856
 
857
                nbytes -= i;
858
                buf += i;
859
                ret += i;
860
        }
861
 
862
        /* Wipe data just returned from memory */
863
        memset(tmp, 0, sizeof(tmp));
864
 
865
        return ret;
866
}
867
 
868
/*
869
 * This function is the exported kernel interface.  It returns some
870
 * number of good random numbers, suitable for seeding TCP sequence
871
 * numbers, etc.
872
 */
873
void get_random_bytes(void *buf, int nbytes)
874
{
875
        extract_entropy(&nonblocking_pool, buf, nbytes, 0, 0);
876
}
877
 
878
EXPORT_SYMBOL(get_random_bytes);
879
 
880
/*
881
 * init_std_data - initialize pool with system data
882
 *
883
 * @r: pool to initialize
884
 *
885
 * This function clears the pool's entropy count and mixes some system
886
 * data into the pool to prepare it for use. The pool is not cleared
887
 * as that can only decrease the entropy in the pool.
888
 */
889
static void init_std_data(struct entropy_store *r)
890
{
891
        ktime_t now;
892
        unsigned long flags;
893
 
894
        spin_lock_irqsave(&r->lock, flags);
895
        r->entropy_count = 0;
896
        spin_unlock_irqrestore(&r->lock, flags);
897
 
898
        now = ktime_get_real();
899
        add_entropy_words(r, (__u32 *)&now, sizeof(now)/4);
900
        add_entropy_words(r, (__u32 *)utsname(),
901
                          sizeof(*(utsname()))/4);
902
}
903
 
904
static int __init rand_initialize(void)
905
{
906
        init_std_data(&input_pool);
907
        init_std_data(&blocking_pool);
908
        init_std_data(&nonblocking_pool);
909
        return 0;
910
}
911
module_init(rand_initialize);
912
 
913
void rand_initialize_irq(int irq)
914
{
915
        struct timer_rand_state *state;
916
 
917
        if (irq >= NR_IRQS || irq_timer_state[irq])
918
                return;
919
 
920
        /*
921
         * If kzalloc returns null, we just won't use that entropy
922
         * source.
923
         */
924
        state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
925
        if (state)
926
                irq_timer_state[irq] = state;
927
}
928
 
929
#ifdef CONFIG_BLOCK
930
void rand_initialize_disk(struct gendisk *disk)
931
{
932
        struct timer_rand_state *state;
933
 
934
        /*
935
         * If kzalloc returns null, we just won't use that entropy
936
         * source.
937
         */
938
        state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
939
        if (state)
940
                disk->random = state;
941
}
942
#endif
943
 
944
static ssize_t
945
random_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos)
946
{
947
        ssize_t n, retval = 0, count = 0;
948
 
949
        if (nbytes == 0)
950
                return 0;
951
 
952
        while (nbytes > 0) {
953
                n = nbytes;
954
                if (n > SEC_XFER_SIZE)
955
                        n = SEC_XFER_SIZE;
956
 
957
                DEBUG_ENT("reading %d bits\n", n*8);
958
 
959
                n = extract_entropy_user(&blocking_pool, buf, n);
960
 
961
                DEBUG_ENT("read got %d bits (%d still needed)\n",
962
                          n*8, (nbytes-n)*8);
963
 
964
                if (n == 0) {
965
                        if (file->f_flags & O_NONBLOCK) {
966
                                retval = -EAGAIN;
967
                                break;
968
                        }
969
 
970
                        DEBUG_ENT("sleeping?\n");
971
 
972
                        wait_event_interruptible(random_read_wait,
973
                                input_pool.entropy_count >=
974
                                                 random_read_wakeup_thresh);
975
 
976
                        DEBUG_ENT("awake\n");
977
 
978
                        if (signal_pending(current)) {
979
                                retval = -ERESTARTSYS;
980
                                break;
981
                        }
982
 
983
                        continue;
984
                }
985
 
986
                if (n < 0) {
987
                        retval = n;
988
                        break;
989
                }
990
                count += n;
991
                buf += n;
992
                nbytes -= n;
993
                break;          /* This break makes the device work */
994
                                /* like a named pipe */
995
        }
996
 
997
        /*
998
         * If we gave the user some bytes, update the access time.
999
         */
1000
        if (count)
1001
                file_accessed(file);
1002
 
1003
        return (count ? count : retval);
1004
}
1005
 
1006
static ssize_t
1007
urandom_read(struct file * file, char __user * buf,
1008
                      size_t nbytes, loff_t *ppos)
1009
{
1010
        return extract_entropy_user(&nonblocking_pool, buf, nbytes);
1011
}
1012
 
1013
static unsigned int
1014
random_poll(struct file *file, poll_table * wait)
1015
{
1016
        unsigned int mask;
1017
 
1018
        poll_wait(file, &random_read_wait, wait);
1019
        poll_wait(file, &random_write_wait, wait);
1020
        mask = 0;
1021
        if (input_pool.entropy_count >= random_read_wakeup_thresh)
1022
                mask |= POLLIN | POLLRDNORM;
1023
        if (input_pool.entropy_count < random_write_wakeup_thresh)
1024
                mask |= POLLOUT | POLLWRNORM;
1025
        return mask;
1026
}
1027
 
1028
static int
1029
write_pool(struct entropy_store *r, const char __user *buffer, size_t count)
1030
{
1031
        size_t bytes;
1032
        __u32 buf[16];
1033
        const char __user *p = buffer;
1034
 
1035
        while (count > 0) {
1036
                bytes = min(count, sizeof(buf));
1037
                if (copy_from_user(&buf, p, bytes))
1038
                        return -EFAULT;
1039
 
1040
                count -= bytes;
1041
                p += bytes;
1042
 
1043
                add_entropy_words(r, buf, (bytes + 3) / 4);
1044
        }
1045
 
1046
        return 0;
1047
}
1048
 
1049
static ssize_t
1050
random_write(struct file * file, const char __user * buffer,
1051
             size_t count, loff_t *ppos)
1052
{
1053
        size_t ret;
1054
        struct inode *inode = file->f_path.dentry->d_inode;
1055
 
1056
        ret = write_pool(&blocking_pool, buffer, count);
1057
        if (ret)
1058
                return ret;
1059
        ret = write_pool(&nonblocking_pool, buffer, count);
1060
        if (ret)
1061
                return ret;
1062
 
1063
        inode->i_mtime = current_fs_time(inode->i_sb);
1064
        mark_inode_dirty(inode);
1065
        return (ssize_t)count;
1066
}
1067
 
1068
static int
1069
random_ioctl(struct inode * inode, struct file * file,
1070
             unsigned int cmd, unsigned long arg)
1071
{
1072
        int size, ent_count;
1073
        int __user *p = (int __user *)arg;
1074
        int retval;
1075
 
1076
        switch (cmd) {
1077
        case RNDGETENTCNT:
1078
                ent_count = input_pool.entropy_count;
1079
                if (put_user(ent_count, p))
1080
                        return -EFAULT;
1081
                return 0;
1082
        case RNDADDTOENTCNT:
1083
                if (!capable(CAP_SYS_ADMIN))
1084
                        return -EPERM;
1085
                if (get_user(ent_count, p))
1086
                        return -EFAULT;
1087
                credit_entropy_store(&input_pool, ent_count);
1088
                /*
1089
                 * Wake up waiting processes if we have enough
1090
                 * entropy.
1091
                 */
1092
                if (input_pool.entropy_count >= random_read_wakeup_thresh)
1093
                        wake_up_interruptible(&random_read_wait);
1094
                return 0;
1095
        case RNDADDENTROPY:
1096
                if (!capable(CAP_SYS_ADMIN))
1097
                        return -EPERM;
1098
                if (get_user(ent_count, p++))
1099
                        return -EFAULT;
1100
                if (ent_count < 0)
1101
                        return -EINVAL;
1102
                if (get_user(size, p++))
1103
                        return -EFAULT;
1104
                retval = write_pool(&input_pool, (const char __user *)p,
1105
                                    size);
1106
                if (retval < 0)
1107
                        return retval;
1108
                credit_entropy_store(&input_pool, ent_count);
1109
                /*
1110
                 * Wake up waiting processes if we have enough
1111
                 * entropy.
1112
                 */
1113
                if (input_pool.entropy_count >= random_read_wakeup_thresh)
1114
                        wake_up_interruptible(&random_read_wait);
1115
                return 0;
1116
        case RNDZAPENTCNT:
1117
        case RNDCLEARPOOL:
1118
                /* Clear the entropy pool counters. */
1119
                if (!capable(CAP_SYS_ADMIN))
1120
                        return -EPERM;
1121
                init_std_data(&input_pool);
1122
                init_std_data(&blocking_pool);
1123
                init_std_data(&nonblocking_pool);
1124
                return 0;
1125
        default:
1126
                return -EINVAL;
1127
        }
1128
}
1129
 
1130
const struct file_operations random_fops = {
1131
        .read  = random_read,
1132
        .write = random_write,
1133
        .poll  = random_poll,
1134
        .ioctl = random_ioctl,
1135
};
1136
 
1137
const struct file_operations urandom_fops = {
1138
        .read  = urandom_read,
1139
        .write = random_write,
1140
        .ioctl = random_ioctl,
1141
};
1142
 
1143
/***************************************************************
1144
 * Random UUID interface
1145
 *
1146
 * Used here for a Boot ID, but can be useful for other kernel
1147
 * drivers.
1148
 ***************************************************************/
1149
 
1150
/*
1151
 * Generate random UUID
1152
 */
1153
void generate_random_uuid(unsigned char uuid_out[16])
1154
{
1155
        get_random_bytes(uuid_out, 16);
1156
        /* Set UUID version to 4 --- truely random generation */
1157
        uuid_out[6] = (uuid_out[6] & 0x0F) | 0x40;
1158
        /* Set the UUID variant to DCE */
1159
        uuid_out[8] = (uuid_out[8] & 0x3F) | 0x80;
1160
}
1161
 
1162
EXPORT_SYMBOL(generate_random_uuid);
1163
 
1164
/********************************************************************
1165
 *
1166
 * Sysctl interface
1167
 *
1168
 ********************************************************************/
1169
 
1170
#ifdef CONFIG_SYSCTL
1171
 
1172
#include <linux/sysctl.h>
1173
 
1174
static int min_read_thresh = 8, min_write_thresh;
1175
static int max_read_thresh = INPUT_POOL_WORDS * 32;
1176
static int max_write_thresh = INPUT_POOL_WORDS * 32;
1177
static char sysctl_bootid[16];
1178
 
1179
/*
1180
 * These functions is used to return both the bootid UUID, and random
1181
 * UUID.  The difference is in whether table->data is NULL; if it is,
1182
 * then a new UUID is generated and returned to the user.
1183
 *
1184
 * If the user accesses this via the proc interface, it will be returned
1185
 * as an ASCII string in the standard UUID format.  If accesses via the
1186
 * sysctl system call, it is returned as 16 bytes of binary data.
1187
 */
1188
static int proc_do_uuid(ctl_table *table, int write, struct file *filp,
1189
                        void __user *buffer, size_t *lenp, loff_t *ppos)
1190
{
1191
        ctl_table fake_table;
1192
        unsigned char buf[64], tmp_uuid[16], *uuid;
1193
 
1194
        uuid = table->data;
1195
        if (!uuid) {
1196
                uuid = tmp_uuid;
1197
                uuid[8] = 0;
1198
        }
1199
        if (uuid[8] == 0)
1200
                generate_random_uuid(uuid);
1201
 
1202
        sprintf(buf, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
1203
                "%02x%02x%02x%02x%02x%02x",
1204
                uuid[0],  uuid[1],  uuid[2],  uuid[3],
1205
                uuid[4],  uuid[5],  uuid[6],  uuid[7],
1206
                uuid[8],  uuid[9],  uuid[10], uuid[11],
1207
                uuid[12], uuid[13], uuid[14], uuid[15]);
1208
        fake_table.data = buf;
1209
        fake_table.maxlen = sizeof(buf);
1210
 
1211
        return proc_dostring(&fake_table, write, filp, buffer, lenp, ppos);
1212
}
1213
 
1214
static int uuid_strategy(ctl_table *table, int __user *name, int nlen,
1215
                         void __user *oldval, size_t __user *oldlenp,
1216
                         void __user *newval, size_t newlen)
1217
{
1218
        unsigned char tmp_uuid[16], *uuid;
1219
        unsigned int len;
1220
 
1221
        if (!oldval || !oldlenp)
1222
                return 1;
1223
 
1224
        uuid = table->data;
1225
        if (!uuid) {
1226
                uuid = tmp_uuid;
1227
                uuid[8] = 0;
1228
        }
1229
        if (uuid[8] == 0)
1230
                generate_random_uuid(uuid);
1231
 
1232
        if (get_user(len, oldlenp))
1233
                return -EFAULT;
1234
        if (len) {
1235
                if (len > 16)
1236
                        len = 16;
1237
                if (copy_to_user(oldval, uuid, len) ||
1238
                    put_user(len, oldlenp))
1239
                        return -EFAULT;
1240
        }
1241
        return 1;
1242
}
1243
 
1244
static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
1245
ctl_table random_table[] = {
1246
        {
1247
                .ctl_name       = RANDOM_POOLSIZE,
1248
                .procname       = "poolsize",
1249
                .data           = &sysctl_poolsize,
1250
                .maxlen         = sizeof(int),
1251
                .mode           = 0444,
1252
                .proc_handler   = &proc_dointvec,
1253
        },
1254
        {
1255
                .ctl_name       = RANDOM_ENTROPY_COUNT,
1256
                .procname       = "entropy_avail",
1257
                .maxlen         = sizeof(int),
1258
                .mode           = 0444,
1259
                .proc_handler   = &proc_dointvec,
1260
                .data           = &input_pool.entropy_count,
1261
        },
1262
        {
1263
                .ctl_name       = RANDOM_READ_THRESH,
1264
                .procname       = "read_wakeup_threshold",
1265
                .data           = &random_read_wakeup_thresh,
1266
                .maxlen         = sizeof(int),
1267
                .mode           = 0644,
1268
                .proc_handler   = &proc_dointvec_minmax,
1269
                .strategy       = &sysctl_intvec,
1270
                .extra1         = &min_read_thresh,
1271
                .extra2         = &max_read_thresh,
1272
        },
1273
        {
1274
                .ctl_name       = RANDOM_WRITE_THRESH,
1275
                .procname       = "write_wakeup_threshold",
1276
                .data           = &random_write_wakeup_thresh,
1277
                .maxlen         = sizeof(int),
1278
                .mode           = 0644,
1279
                .proc_handler   = &proc_dointvec_minmax,
1280
                .strategy       = &sysctl_intvec,
1281
                .extra1         = &min_write_thresh,
1282
                .extra2         = &max_write_thresh,
1283
        },
1284
        {
1285
                .ctl_name       = RANDOM_BOOT_ID,
1286
                .procname       = "boot_id",
1287
                .data           = &sysctl_bootid,
1288
                .maxlen         = 16,
1289
                .mode           = 0444,
1290
                .proc_handler   = &proc_do_uuid,
1291
                .strategy       = &uuid_strategy,
1292
        },
1293
        {
1294
                .ctl_name       = RANDOM_UUID,
1295
                .procname       = "uuid",
1296
                .maxlen         = 16,
1297
                .mode           = 0444,
1298
                .proc_handler   = &proc_do_uuid,
1299
                .strategy       = &uuid_strategy,
1300
        },
1301
        { .ctl_name = 0 }
1302
};
1303
#endif  /* CONFIG_SYSCTL */
1304
 
1305
/********************************************************************
1306
 *
1307
 * Random funtions for networking
1308
 *
1309
 ********************************************************************/
1310
 
1311
/*
1312
 * TCP initial sequence number picking.  This uses the random number
1313
 * generator to pick an initial secret value.  This value is hashed
1314
 * along with the TCP endpoint information to provide a unique
1315
 * starting point for each pair of TCP endpoints.  This defeats
1316
 * attacks which rely on guessing the initial TCP sequence number.
1317
 * This algorithm was suggested by Steve Bellovin.
1318
 *
1319
 * Using a very strong hash was taking an appreciable amount of the total
1320
 * TCP connection establishment time, so this is a weaker hash,
1321
 * compensated for by changing the secret periodically.
1322
 */
1323
 
1324
/* F, G and H are basic MD4 functions: selection, majority, parity */
1325
#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
1326
#define G(x, y, z) (((x) & (y)) + (((x) ^ (y)) & (z)))
1327
#define H(x, y, z) ((x) ^ (y) ^ (z))
1328
 
1329
/*
1330
 * The generic round function.  The application is so specific that
1331
 * we don't bother protecting all the arguments with parens, as is generally
1332
 * good macro practice, in favor of extra legibility.
1333
 * Rotation is separate from addition to prevent recomputation
1334
 */
1335
#define ROUND(f, a, b, c, d, x, s)      \
1336
        (a += f(b, c, d) + x, a = (a << s) | (a >> (32 - s)))
1337
#define K1 0
1338
#define K2 013240474631UL
1339
#define K3 015666365641UL
1340
 
1341
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1342
 
1343
static __u32 twothirdsMD4Transform (__u32 const buf[4], __u32 const in[12])
1344
{
1345
        __u32 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
1346
 
1347
        /* Round 1 */
1348
        ROUND(F, a, b, c, d, in[ 0] + K1,  3);
1349
        ROUND(F, d, a, b, c, in[ 1] + K1,  7);
1350
        ROUND(F, c, d, a, b, in[ 2] + K1, 11);
1351
        ROUND(F, b, c, d, a, in[ 3] + K1, 19);
1352
        ROUND(F, a, b, c, d, in[ 4] + K1,  3);
1353
        ROUND(F, d, a, b, c, in[ 5] + K1,  7);
1354
        ROUND(F, c, d, a, b, in[ 6] + K1, 11);
1355
        ROUND(F, b, c, d, a, in[ 7] + K1, 19);
1356
        ROUND(F, a, b, c, d, in[ 8] + K1,  3);
1357
        ROUND(F, d, a, b, c, in[ 9] + K1,  7);
1358
        ROUND(F, c, d, a, b, in[10] + K1, 11);
1359
        ROUND(F, b, c, d, a, in[11] + K1, 19);
1360
 
1361
        /* Round 2 */
1362
        ROUND(G, a, b, c, d, in[ 1] + K2,  3);
1363
        ROUND(G, d, a, b, c, in[ 3] + K2,  5);
1364
        ROUND(G, c, d, a, b, in[ 5] + K2,  9);
1365
        ROUND(G, b, c, d, a, in[ 7] + K2, 13);
1366
        ROUND(G, a, b, c, d, in[ 9] + K2,  3);
1367
        ROUND(G, d, a, b, c, in[11] + K2,  5);
1368
        ROUND(G, c, d, a, b, in[ 0] + K2,  9);
1369
        ROUND(G, b, c, d, a, in[ 2] + K2, 13);
1370
        ROUND(G, a, b, c, d, in[ 4] + K2,  3);
1371
        ROUND(G, d, a, b, c, in[ 6] + K2,  5);
1372
        ROUND(G, c, d, a, b, in[ 8] + K2,  9);
1373
        ROUND(G, b, c, d, a, in[10] + K2, 13);
1374
 
1375
        /* Round 3 */
1376
        ROUND(H, a, b, c, d, in[ 3] + K3,  3);
1377
        ROUND(H, d, a, b, c, in[ 7] + K3,  9);
1378
        ROUND(H, c, d, a, b, in[11] + K3, 11);
1379
        ROUND(H, b, c, d, a, in[ 2] + K3, 15);
1380
        ROUND(H, a, b, c, d, in[ 6] + K3,  3);
1381
        ROUND(H, d, a, b, c, in[10] + K3,  9);
1382
        ROUND(H, c, d, a, b, in[ 1] + K3, 11);
1383
        ROUND(H, b, c, d, a, in[ 5] + K3, 15);
1384
        ROUND(H, a, b, c, d, in[ 9] + K3,  3);
1385
        ROUND(H, d, a, b, c, in[ 0] + K3,  9);
1386
        ROUND(H, c, d, a, b, in[ 4] + K3, 11);
1387
        ROUND(H, b, c, d, a, in[ 8] + K3, 15);
1388
 
1389
        return buf[1] + b; /* "most hashed" word */
1390
        /* Alternative: return sum of all words? */
1391
}
1392
#endif
1393
 
1394
#undef ROUND
1395
#undef F
1396
#undef G
1397
#undef H
1398
#undef K1
1399
#undef K2
1400
#undef K3
1401
 
1402
/* This should not be decreased so low that ISNs wrap too fast. */
1403
#define REKEY_INTERVAL (300 * HZ)
1404
/*
1405
 * Bit layout of the tcp sequence numbers (before adding current time):
1406
 * bit 24-31: increased after every key exchange
1407
 * bit 0-23: hash(source,dest)
1408
 *
1409
 * The implementation is similar to the algorithm described
1410
 * in the Appendix of RFC 1185, except that
1411
 * - it uses a 1 MHz clock instead of a 250 kHz clock
1412
 * - it performs a rekey every 5 minutes, which is equivalent
1413
 *      to a (source,dest) tulple dependent forward jump of the
1414
 *      clock by 0..2^(HASH_BITS+1)
1415
 *
1416
 * Thus the average ISN wraparound time is 68 minutes instead of
1417
 * 4.55 hours.
1418
 *
1419
 * SMP cleanup and lock avoidance with poor man's RCU.
1420
 *                      Manfred Spraul <manfred@colorfullife.com>
1421
 *
1422
 */
1423
#define COUNT_BITS 8
1424
#define COUNT_MASK ((1 << COUNT_BITS) - 1)
1425
#define HASH_BITS 24
1426
#define HASH_MASK ((1 << HASH_BITS) - 1)
1427
 
1428
static struct keydata {
1429
        __u32 count; /* already shifted to the final position */
1430
        __u32 secret[12];
1431
} ____cacheline_aligned ip_keydata[2];
1432
 
1433
static unsigned int ip_cnt;
1434
 
1435
static void rekey_seq_generator(struct work_struct *work);
1436
 
1437
static DECLARE_DELAYED_WORK(rekey_work, rekey_seq_generator);
1438
 
1439
/*
1440
 * Lock avoidance:
1441
 * The ISN generation runs lockless - it's just a hash over random data.
1442
 * State changes happen every 5 minutes when the random key is replaced.
1443
 * Synchronization is performed by having two copies of the hash function
1444
 * state and rekey_seq_generator always updates the inactive copy.
1445
 * The copy is then activated by updating ip_cnt.
1446
 * The implementation breaks down if someone blocks the thread
1447
 * that processes SYN requests for more than 5 minutes. Should never
1448
 * happen, and even if that happens only a not perfectly compliant
1449
 * ISN is generated, nothing fatal.
1450
 */
1451
static void rekey_seq_generator(struct work_struct *work)
1452
{
1453
        struct keydata *keyptr = &ip_keydata[1 ^ (ip_cnt & 1)];
1454
 
1455
        get_random_bytes(keyptr->secret, sizeof(keyptr->secret));
1456
        keyptr->count = (ip_cnt & COUNT_MASK) << HASH_BITS;
1457
        smp_wmb();
1458
        ip_cnt++;
1459
        schedule_delayed_work(&rekey_work, REKEY_INTERVAL);
1460
}
1461
 
1462
static inline struct keydata *get_keyptr(void)
1463
{
1464
        struct keydata *keyptr = &ip_keydata[ip_cnt & 1];
1465
 
1466
        smp_rmb();
1467
 
1468
        return keyptr;
1469
}
1470
 
1471
static __init int seqgen_init(void)
1472
{
1473
        rekey_seq_generator(NULL);
1474
        return 0;
1475
}
1476
late_initcall(seqgen_init);
1477
 
1478
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1479
__u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr,
1480
                                   __be16 sport, __be16 dport)
1481
{
1482
        __u32 seq;
1483
        __u32 hash[12];
1484
        struct keydata *keyptr = get_keyptr();
1485
 
1486
        /* The procedure is the same as for IPv4, but addresses are longer.
1487
         * Thus we must use twothirdsMD4Transform.
1488
         */
1489
 
1490
        memcpy(hash, saddr, 16);
1491
        hash[4]=((__force u16)sport << 16) + (__force u16)dport;
1492
        memcpy(&hash[5],keyptr->secret,sizeof(__u32) * 7);
1493
 
1494
        seq = twothirdsMD4Transform((const __u32 *)daddr, hash) & HASH_MASK;
1495
        seq += keyptr->count;
1496
 
1497
        seq += ktime_to_ns(ktime_get_real());
1498
 
1499
        return seq;
1500
}
1501
EXPORT_SYMBOL(secure_tcpv6_sequence_number);
1502
#endif
1503
 
1504
/*  The code below is shamelessly stolen from secure_tcp_sequence_number().
1505
 *  All blames to Andrey V. Savochkin <saw@msu.ru>.
1506
 */
1507
__u32 secure_ip_id(__be32 daddr)
1508
{
1509
        struct keydata *keyptr;
1510
        __u32 hash[4];
1511
 
1512
        keyptr = get_keyptr();
1513
 
1514
        /*
1515
         *  Pick a unique starting offset for each IP destination.
1516
         *  The dest ip address is placed in the starting vector,
1517
         *  which is then hashed with random data.
1518
         */
1519
        hash[0] = (__force __u32)daddr;
1520
        hash[1] = keyptr->secret[9];
1521
        hash[2] = keyptr->secret[10];
1522
        hash[3] = keyptr->secret[11];
1523
 
1524
        return half_md4_transform(hash, keyptr->secret);
1525
}
1526
 
1527
#ifdef CONFIG_INET
1528
 
1529
__u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr,
1530
                                 __be16 sport, __be16 dport)
1531
{
1532
        __u32 seq;
1533
        __u32 hash[4];
1534
        struct keydata *keyptr = get_keyptr();
1535
 
1536
        /*
1537
         *  Pick a unique starting offset for each TCP connection endpoints
1538
         *  (saddr, daddr, sport, dport).
1539
         *  Note that the words are placed into the starting vector, which is
1540
         *  then mixed with a partial MD4 over random data.
1541
         */
1542
        hash[0]=(__force u32)saddr;
1543
        hash[1]=(__force u32)daddr;
1544
        hash[2]=((__force u16)sport << 16) + (__force u16)dport;
1545
        hash[3]=keyptr->secret[11];
1546
 
1547
        seq = half_md4_transform(hash, keyptr->secret) & HASH_MASK;
1548
        seq += keyptr->count;
1549
        /*
1550
         *      As close as possible to RFC 793, which
1551
         *      suggests using a 250 kHz clock.
1552
         *      Further reading shows this assumes 2 Mb/s networks.
1553
         *      For 10 Mb/s Ethernet, a 1 MHz clock is appropriate.
1554
         *      For 10 Gb/s Ethernet, a 1 GHz clock should be ok, but
1555
         *      we also need to limit the resolution so that the u32 seq
1556
         *      overlaps less than one time per MSL (2 minutes).
1557
         *      Choosing a clock of 64 ns period is OK. (period of 274 s)
1558
         */
1559
        seq += ktime_to_ns(ktime_get_real()) >> 6;
1560
#if 0
1561
        printk("init_seq(%lx, %lx, %d, %d) = %d\n",
1562
               saddr, daddr, sport, dport, seq);
1563
#endif
1564
        return seq;
1565
}
1566
 
1567
/* Generate secure starting point for ephemeral IPV4 transport port search */
1568
u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport)
1569
{
1570
        struct keydata *keyptr = get_keyptr();
1571
        u32 hash[4];
1572
 
1573
        /*
1574
         *  Pick a unique starting offset for each ephemeral port search
1575
         *  (saddr, daddr, dport) and 48bits of random data.
1576
         */
1577
        hash[0] = (__force u32)saddr;
1578
        hash[1] = (__force u32)daddr;
1579
        hash[2] = (__force u32)dport ^ keyptr->secret[10];
1580
        hash[3] = keyptr->secret[11];
1581
 
1582
        return half_md4_transform(hash, keyptr->secret);
1583
}
1584
 
1585
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1586
u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, __be16 dport)
1587
{
1588
        struct keydata *keyptr = get_keyptr();
1589
        u32 hash[12];
1590
 
1591
        memcpy(hash, saddr, 16);
1592
        hash[4] = (__force u32)dport;
1593
        memcpy(&hash[5],keyptr->secret,sizeof(__u32) * 7);
1594
 
1595
        return twothirdsMD4Transform((const __u32 *)daddr, hash);
1596
}
1597
#endif
1598
 
1599
#if defined(CONFIG_IP_DCCP) || defined(CONFIG_IP_DCCP_MODULE)
1600
/* Similar to secure_tcp_sequence_number but generate a 48 bit value
1601
 * bit's 32-47 increase every key exchange
1602
 *       0-31  hash(source, dest)
1603
 */
1604
u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr,
1605
                                __be16 sport, __be16 dport)
1606
{
1607
        u64 seq;
1608
        __u32 hash[4];
1609
        struct keydata *keyptr = get_keyptr();
1610
 
1611
        hash[0] = (__force u32)saddr;
1612
        hash[1] = (__force u32)daddr;
1613
        hash[2] = ((__force u16)sport << 16) + (__force u16)dport;
1614
        hash[3] = keyptr->secret[11];
1615
 
1616
        seq = half_md4_transform(hash, keyptr->secret);
1617
        seq |= ((u64)keyptr->count) << (32 - HASH_BITS);
1618
 
1619
        seq += ktime_to_ns(ktime_get_real());
1620
        seq &= (1ull << 48) - 1;
1621
#if 0
1622
        printk("dccp init_seq(%lx, %lx, %d, %d) = %d\n",
1623
               saddr, daddr, sport, dport, seq);
1624
#endif
1625
        return seq;
1626
}
1627
 
1628
EXPORT_SYMBOL(secure_dccp_sequence_number);
1629
#endif
1630
 
1631
#endif /* CONFIG_INET */
1632
 
1633
 
1634
/*
1635
 * Get a random word for internal kernel use only. Similar to urandom but
1636
 * with the goal of minimal entropy pool depletion. As a result, the random
1637
 * value is not cryptographically secure but for several uses the cost of
1638
 * depleting entropy is too high
1639
 */
1640
unsigned int get_random_int(void)
1641
{
1642
        /*
1643
         * Use IP's RNG. It suits our purpose perfectly: it re-keys itself
1644
         * every second, from the entropy pool (and thus creates a limited
1645
         * drain on it), and uses halfMD4Transform within the second. We
1646
         * also mix it with jiffies and the PID:
1647
         */
1648
        return secure_ip_id((__force __be32)(current->pid + jiffies));
1649
}
1650
 
1651
/*
1652
 * randomize_range() returns a start address such that
1653
 *
1654
 *    [...... <range> .....]
1655
 *  start                  end
1656
 *
1657
 * a <range> with size "len" starting at the return value is inside in the
1658
 * area defined by [start, end], but is otherwise randomized.
1659
 */
1660
unsigned long
1661
randomize_range(unsigned long start, unsigned long end, unsigned long len)
1662
{
1663
        unsigned long range = end - len - start;
1664
 
1665
        if (end <= start + len)
1666
                return 0;
1667
        return PAGE_ALIGN(get_random_int() % range + start);
1668
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.