1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241#include <linux/utsname.h>
242#include <linux/module.h>
243#include <linux/kernel.h>
244#include <linux/major.h>
245#include <linux/string.h>
246#include <linux/fcntl.h>
247#include <linux/slab.h>
248#include <linux/random.h>
249#include <linux/poll.h>
250#include <linux/init.h>
251#include <linux/fs.h>
252#include <linux/genhd.h>
253#include <linux/interrupt.h>
254#include <linux/mm.h>
255#include <linux/nodemask.h>
256#include <linux/spinlock.h>
257#include <linux/kthread.h>
258#include <linux/percpu.h>
259#include <linux/cryptohash.h>
260#include <linux/fips.h>
261#include <linux/ptrace.h>
262#include <linux/workqueue.h>
263#include <linux/irq.h>
264#include <linux/ratelimit.h>
265#include <linux/syscalls.h>
266#include <linux/completion.h>
267#include <linux/uuid.h>
268#include <crypto/chacha20.h>
269
270#include <asm/processor.h>
271#include <linux/uaccess.h>
272#include <asm/irq.h>
273#include <asm/irq_regs.h>
274#include <asm/io.h>
275
276#define CREATE_TRACE_POINTS
277#include <trace/events/random.h>
278
279
280
281
282
283
284#define INPUT_POOL_SHIFT 12
285#define INPUT_POOL_WORDS (1 << (INPUT_POOL_SHIFT-5))
286#define OUTPUT_POOL_SHIFT 10
287#define OUTPUT_POOL_WORDS (1 << (OUTPUT_POOL_SHIFT-5))
288#define SEC_XFER_SIZE 512
289#define EXTRACT_SIZE 10
290
291
292#define LONGS(x) (((x) + sizeof(unsigned long) - 1)/sizeof(unsigned long))
293
294
295
296
297
298
299
300
301#define ENTROPY_SHIFT 3
302#define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
303
304
305
306
307
308static int random_read_wakeup_bits = 64;
309
310
311
312
313
314
315static int random_write_wakeup_bits = 28 * OUTPUT_POOL_WORDS;
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362static struct poolinfo {
363 int poolbitshift, poolwords, poolbytes, poolbits, poolfracbits;
364#define S(x) ilog2(x)+5, (x), (x)*4, (x)*32, (x) << (ENTROPY_SHIFT+5)
365 int tap1, tap2, tap3, tap4, tap5;
366} poolinfo_table[] = {
367
368
369 { S(128), 104, 76, 51, 25, 1 },
370
371
372 { S(32), 26, 19, 14, 7, 1 },
373#if 0
374
375 { S(2048), 1638, 1231, 819, 411, 1 },
376
377
378 { S(1024), 817, 615, 412, 204, 1 },
379
380
381 { S(1024), 819, 616, 410, 207, 2 },
382
383
384 { S(512), 411, 308, 208, 104, 1 },
385
386
387 { S(512), 409, 307, 206, 102, 2 },
388
389 { S(512), 409, 309, 205, 103, 2 },
390
391
392 { S(256), 205, 155, 101, 52, 1 },
393
394
395 { S(128), 103, 78, 51, 27, 2 },
396
397
398 { S(64), 52, 39, 26, 14, 1 },
399#endif
400};
401
402
403
404
405static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
406static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
407static struct fasync_struct *fasync;
408
409static DEFINE_SPINLOCK(random_ready_list_lock);
410static LIST_HEAD(random_ready_list);
411
412struct crng_state {
413 __u32 state[16];
414 unsigned long init_time;
415 spinlock_t lock;
416};
417
418struct crng_state primary_crng = {
419 .lock = __SPIN_LOCK_UNLOCKED(primary_crng.lock),
420};
421
422
423
424
425
426
427
428
429
430static int crng_init = 0;
431#define crng_ready() (likely(crng_init > 1))
432static int crng_init_cnt = 0;
433static unsigned long crng_global_init_time = 0;
434#define CRNG_INIT_CNT_THRESH (2*CHACHA20_KEY_SIZE)
435static void _extract_crng(struct crng_state *crng,
436 __u32 out[CHACHA20_BLOCK_WORDS]);
437static void _crng_backtrack_protect(struct crng_state *crng,
438 __u32 tmp[CHACHA20_BLOCK_WORDS], int used);
439static void process_random_ready_list(void);
440static void _get_random_bytes(void *buf, int nbytes);
441
442static struct ratelimit_state unseeded_warning =
443 RATELIMIT_STATE_INIT("warn_unseeded_randomness", HZ, 3);
444static struct ratelimit_state urandom_warning =
445 RATELIMIT_STATE_INIT("warn_urandom_randomness", HZ, 3);
446
447static int ratelimit_disable __read_mostly;
448
449module_param_named(ratelimit_disable, ratelimit_disable, int, 0644);
450MODULE_PARM_DESC(ratelimit_disable, "Disable random ratelimit suppression");
451
452
453
454
455
456
457
458
459struct entropy_store;
460struct entropy_store {
461
462 const struct poolinfo *poolinfo;
463 __u32 *pool;
464 const char *name;
465 struct entropy_store *pull;
466 struct work_struct push_work;
467
468
469 unsigned long last_pulled;
470 spinlock_t lock;
471 unsigned short add_ptr;
472 unsigned short input_rotate;
473 int entropy_count;
474 int entropy_total;
475 unsigned int initialized:1;
476 unsigned int last_data_init:1;
477 __u8 last_data[EXTRACT_SIZE];
478};
479
480static ssize_t extract_entropy(struct entropy_store *r, void *buf,
481 size_t nbytes, int min, int rsvd);
482static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
483 size_t nbytes, int fips);
484
485static void crng_reseed(struct crng_state *crng, struct entropy_store *r);
486static void push_to_pool(struct work_struct *work);
487static __u32 input_pool_data[INPUT_POOL_WORDS] __latent_entropy;
488static __u32 blocking_pool_data[OUTPUT_POOL_WORDS] __latent_entropy;
489
490static struct entropy_store input_pool = {
491 .poolinfo = &poolinfo_table[0],
492 .name = "input",
493 .lock = __SPIN_LOCK_UNLOCKED(input_pool.lock),
494 .pool = input_pool_data
495};
496
497static struct entropy_store blocking_pool = {
498 .poolinfo = &poolinfo_table[1],
499 .name = "blocking",
500 .pull = &input_pool,
501 .lock = __SPIN_LOCK_UNLOCKED(blocking_pool.lock),
502 .pool = blocking_pool_data,
503 .push_work = __WORK_INITIALIZER(blocking_pool.push_work,
504 push_to_pool),
505};
506
507static __u32 const twist_table[8] = {
508 0x00000000, 0x3b6e20c8, 0x76dc4190, 0x4db26158,
509 0xedb88320, 0xd6d6a3e8, 0x9b64c2b0, 0xa00ae278 };
510
511
512
513
514
515
516
517
518
519
520
521static void _mix_pool_bytes(struct entropy_store *r, const void *in,
522 int nbytes)
523{
524 unsigned long i, tap1, tap2, tap3, tap4, tap5;
525 int input_rotate;
526 int wordmask = r->poolinfo->poolwords - 1;
527 const char *bytes = in;
528 __u32 w;
529
530 tap1 = r->poolinfo->tap1;
531 tap2 = r->poolinfo->tap2;
532 tap3 = r->poolinfo->tap3;
533 tap4 = r->poolinfo->tap4;
534 tap5 = r->poolinfo->tap5;
535
536 input_rotate = r->input_rotate;
537 i = r->add_ptr;
538
539
540 while (nbytes--) {
541 w = rol32(*bytes++, input_rotate);
542 i = (i - 1) & wordmask;
543
544
545 w ^= r->pool[i];
546 w ^= r->pool[(i + tap1) & wordmask];
547 w ^= r->pool[(i + tap2) & wordmask];
548 w ^= r->pool[(i + tap3) & wordmask];
549 w ^= r->pool[(i + tap4) & wordmask];
550 w ^= r->pool[(i + tap5) & wordmask];
551
552
553 r->pool[i] = (w >> 3) ^ twist_table[w & 7];
554
555
556
557
558
559
560
561 input_rotate = (input_rotate + (i ? 7 : 14)) & 31;
562 }
563
564 r->input_rotate = input_rotate;
565 r->add_ptr = i;
566}
567
568static void __mix_pool_bytes(struct entropy_store *r, const void *in,
569 int nbytes)
570{
571 trace_mix_pool_bytes_nolock(r->name, nbytes, _RET_IP_);
572 _mix_pool_bytes(r, in, nbytes);
573}
574
575static void mix_pool_bytes(struct entropy_store *r, const void *in,
576 int nbytes)
577{
578 unsigned long flags;
579
580 trace_mix_pool_bytes(r->name, nbytes, _RET_IP_);
581 spin_lock_irqsave(&r->lock, flags);
582 _mix_pool_bytes(r, in, nbytes);
583 spin_unlock_irqrestore(&r->lock, flags);
584}
585
586struct fast_pool {
587 __u32 pool[4];
588 unsigned long last;
589 unsigned short reg_idx;
590 unsigned char count;
591};
592
593
594
595
596
597
598static void fast_mix(struct fast_pool *f)
599{
600 __u32 a = f->pool[0], b = f->pool[1];
601 __u32 c = f->pool[2], d = f->pool[3];
602
603 a += b; c += d;
604 b = rol32(b, 6); d = rol32(d, 27);
605 d ^= a; b ^= c;
606
607 a += b; c += d;
608 b = rol32(b, 16); d = rol32(d, 14);
609 d ^= a; b ^= c;
610
611 a += b; c += d;
612 b = rol32(b, 6); d = rol32(d, 27);
613 d ^= a; b ^= c;
614
615 a += b; c += d;
616 b = rol32(b, 16); d = rol32(d, 14);
617 d ^= a; b ^= c;
618
619 f->pool[0] = a; f->pool[1] = b;
620 f->pool[2] = c; f->pool[3] = d;
621 f->count++;
622}
623
624static void process_random_ready_list(void)
625{
626 unsigned long flags;
627 struct random_ready_callback *rdy, *tmp;
628
629 spin_lock_irqsave(&random_ready_list_lock, flags);
630 list_for_each_entry_safe(rdy, tmp, &random_ready_list, list) {
631 struct module *owner = rdy->owner;
632
633 list_del_init(&rdy->list);
634 rdy->func(rdy);
635 module_put(owner);
636 }
637 spin_unlock_irqrestore(&random_ready_list_lock, flags);
638}
639
640
641
642
643
644
645static void credit_entropy_bits(struct entropy_store *r, int nbits)
646{
647 int entropy_count, orig;
648 const int pool_size = r->poolinfo->poolfracbits;
649 int nfrac = nbits << ENTROPY_SHIFT;
650
651 if (!nbits)
652 return;
653
654retry:
655 entropy_count = orig = READ_ONCE(r->entropy_count);
656 if (nfrac < 0) {
657
658 entropy_count += nfrac;
659 } else {
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681 int pnfrac = nfrac;
682 const int s = r->poolinfo->poolbitshift + ENTROPY_SHIFT + 2;
683
684
685 do {
686 unsigned int anfrac = min(pnfrac, pool_size/2);
687 unsigned int add =
688 ((pool_size - entropy_count)*anfrac*3) >> s;
689
690 entropy_count += add;
691 pnfrac -= anfrac;
692 } while (unlikely(entropy_count < pool_size-2 && pnfrac));
693 }
694
695 if (unlikely(entropy_count < 0)) {
696 pr_warn("random: negative entropy/overflow: pool %s count %d\n",
697 r->name, entropy_count);
698 WARN_ON(1);
699 entropy_count = 0;
700 } else if (entropy_count > pool_size)
701 entropy_count = pool_size;
702 if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
703 goto retry;
704
705 r->entropy_total += nbits;
706 if (!r->initialized && r->entropy_total > 128) {
707 r->initialized = 1;
708 r->entropy_total = 0;
709 }
710
711 trace_credit_entropy_bits(r->name, nbits,
712 entropy_count >> ENTROPY_SHIFT,
713 r->entropy_total, _RET_IP_);
714
715 if (r == &input_pool) {
716 int entropy_bits = entropy_count >> ENTROPY_SHIFT;
717
718 if (crng_init < 2 && entropy_bits >= 128) {
719 crng_reseed(&primary_crng, r);
720 entropy_bits = r->entropy_count >> ENTROPY_SHIFT;
721 }
722
723
724 if (entropy_bits >= random_read_wakeup_bits &&
725 wq_has_sleeper(&random_read_wait)) {
726 wake_up_interruptible(&random_read_wait);
727 kill_fasync(&fasync, SIGIO, POLL_IN);
728 }
729
730
731
732 if (entropy_bits > random_write_wakeup_bits &&
733 r->initialized &&
734 r->entropy_total >= 2*random_read_wakeup_bits) {
735 struct entropy_store *other = &blocking_pool;
736
737 if (other->entropy_count <=
738 3 * other->poolinfo->poolfracbits / 4) {
739 schedule_work(&other->push_work);
740 r->entropy_total = 0;
741 }
742 }
743 }
744}
745
746static int credit_entropy_bits_safe(struct entropy_store *r, int nbits)
747{
748 const int nbits_max = r->poolinfo->poolwords * 32;
749
750 if (nbits < 0)
751 return -EINVAL;
752
753
754 nbits = min(nbits, nbits_max);
755
756 credit_entropy_bits(r, nbits);
757 return 0;
758}
759
760
761
762
763
764
765
766#define CRNG_RESEED_INTERVAL (300*HZ)
767
768static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
769
770#ifdef CONFIG_NUMA
771
772
773
774
775
776
777static struct crng_state **crng_node_pool __read_mostly;
778#endif
779
780static void invalidate_batched_entropy(void);
781
782static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
783static int __init parse_trust_cpu(char *arg)
784{
785 return kstrtobool(arg, &trust_cpu);
786}
787early_param("random.trust_cpu", parse_trust_cpu);
788
789static void crng_initialize(struct crng_state *crng)
790{
791 int i;
792 int arch_init = 1;
793 unsigned long rv;
794
795 memcpy(&crng->state[0], "expand 32-byte k", 16);
796 if (crng == &primary_crng)
797 _extract_entropy(&input_pool, &crng->state[4],
798 sizeof(__u32) * 12, 0);
799 else
800 _get_random_bytes(&crng->state[4], sizeof(__u32) * 12);
801 for (i = 4; i < 16; i++) {
802 if (!arch_get_random_seed_long(&rv) &&
803 !arch_get_random_long(&rv)) {
804 rv = random_get_entropy();
805 arch_init = 0;
806 }
807 crng->state[i] ^= rv;
808 }
809 if (trust_cpu && arch_init) {
810 crng_init = 2;
811 pr_notice("random: crng done (trusting CPU's manufacturer)\n");
812 }
813 crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
814}
815
816#ifdef CONFIG_NUMA
817static void do_numa_crng_init(struct work_struct *work)
818{
819 int i;
820 struct crng_state *crng;
821 struct crng_state **pool;
822
823 pool = kcalloc(nr_node_ids, sizeof(*pool), GFP_KERNEL|__GFP_NOFAIL);
824 for_each_online_node(i) {
825 crng = kmalloc_node(sizeof(struct crng_state),
826 GFP_KERNEL | __GFP_NOFAIL, i);
827 spin_lock_init(&crng->lock);
828 crng_initialize(crng);
829 pool[i] = crng;
830 }
831 mb();
832 if (cmpxchg(&crng_node_pool, NULL, pool)) {
833 for_each_node(i)
834 kfree(pool[i]);
835 kfree(pool);
836 }
837}
838
839static DECLARE_WORK(numa_crng_init_work, do_numa_crng_init);
840
841static void numa_crng_init(void)
842{
843 schedule_work(&numa_crng_init_work);
844}
845#else
846static void numa_crng_init(void) {}
847#endif
848
849
850
851
852
853static int crng_fast_load(const char *cp, size_t len)
854{
855 unsigned long flags;
856 char *p;
857
858 if (!spin_trylock_irqsave(&primary_crng.lock, flags))
859 return 0;
860 if (crng_init != 0) {
861 spin_unlock_irqrestore(&primary_crng.lock, flags);
862 return 0;
863 }
864 p = (unsigned char *) &primary_crng.state[4];
865 while (len > 0 && crng_init_cnt < CRNG_INIT_CNT_THRESH) {
866 p[crng_init_cnt % CHACHA20_KEY_SIZE] ^= *cp;
867 cp++; crng_init_cnt++; len--;
868 }
869 spin_unlock_irqrestore(&primary_crng.lock, flags);
870 if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
871 invalidate_batched_entropy();
872 crng_init = 1;
873 wake_up_interruptible(&crng_init_wait);
874 pr_notice("random: fast init done\n");
875 }
876 return 1;
877}
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893static int crng_slow_load(const char *cp, size_t len)
894{
895 unsigned long flags;
896 static unsigned char lfsr = 1;
897 unsigned char tmp;
898 unsigned i, max = CHACHA20_KEY_SIZE;
899 const char * src_buf = cp;
900 char * dest_buf = (char *) &primary_crng.state[4];
901
902 if (!spin_trylock_irqsave(&primary_crng.lock, flags))
903 return 0;
904 if (crng_init != 0) {
905 spin_unlock_irqrestore(&primary_crng.lock, flags);
906 return 0;
907 }
908 if (len > max)
909 max = len;
910
911 for (i = 0; i < max ; i++) {
912 tmp = lfsr;
913 lfsr >>= 1;
914 if (tmp & 1)
915 lfsr ^= 0xE1;
916 tmp = dest_buf[i % CHACHA20_KEY_SIZE];
917 dest_buf[i % CHACHA20_KEY_SIZE] ^= src_buf[i % len] ^ lfsr;
918 lfsr += (tmp << 3) | (tmp >> 5);
919 }
920 spin_unlock_irqrestore(&primary_crng.lock, flags);
921 return 1;
922}
923
924static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
925{
926 unsigned long flags;
927 int i, num;
928 union {
929 __u32 block[CHACHA20_BLOCK_WORDS];
930 __u32 key[8];
931 } buf;
932
933 if (r) {
934 num = extract_entropy(r, &buf, 32, 16, 0);
935 if (num == 0)
936 return;
937 } else {
938 _extract_crng(&primary_crng, buf.block);
939 _crng_backtrack_protect(&primary_crng, buf.block,
940 CHACHA20_KEY_SIZE);
941 }
942 spin_lock_irqsave(&crng->lock, flags);
943 for (i = 0; i < 8; i++) {
944 unsigned long rv;
945 if (!arch_get_random_seed_long(&rv) &&
946 !arch_get_random_long(&rv))
947 rv = random_get_entropy();
948 crng->state[i+4] ^= buf.key[i] ^ rv;
949 }
950 memzero_explicit(&buf, sizeof(buf));
951 crng->init_time = jiffies;
952 spin_unlock_irqrestore(&crng->lock, flags);
953 if (crng == &primary_crng && crng_init < 2) {
954 invalidate_batched_entropy();
955 numa_crng_init();
956 crng_init = 2;
957 process_random_ready_list();
958 wake_up_interruptible(&crng_init_wait);
959 pr_notice("random: crng init done\n");
960 if (unseeded_warning.missed) {
961 pr_notice("random: %d get_random_xx warning(s) missed "
962 "due to ratelimiting\n",
963 unseeded_warning.missed);
964 unseeded_warning.missed = 0;
965 }
966 if (urandom_warning.missed) {
967 pr_notice("random: %d urandom warning(s) missed "
968 "due to ratelimiting\n",
969 urandom_warning.missed);
970 urandom_warning.missed = 0;
971 }
972 }
973}
974
975static void _extract_crng(struct crng_state *crng,
976 __u32 out[CHACHA20_BLOCK_WORDS])
977{
978 unsigned long v, flags;
979
980 if (crng_ready() &&
981 (time_after(crng_global_init_time, crng->init_time) ||
982 time_after(jiffies, crng->init_time + CRNG_RESEED_INTERVAL)))
983 crng_reseed(crng, crng == &primary_crng ? &input_pool : NULL);
984 spin_lock_irqsave(&crng->lock, flags);
985 if (arch_get_random_long(&v))
986 crng->state[14] ^= v;
987 chacha20_block(&crng->state[0], out);
988 if (crng->state[12] == 0)
989 crng->state[13]++;
990 spin_unlock_irqrestore(&crng->lock, flags);
991}
992
993static void extract_crng(__u32 out[CHACHA20_BLOCK_WORDS])
994{
995 struct crng_state *crng = NULL;
996
997#ifdef CONFIG_NUMA
998 if (crng_node_pool)
999 crng = crng_node_pool[numa_node_id()];
1000 if (crng == NULL)
1001#endif
1002 crng = &primary_crng;
1003 _extract_crng(crng, out);
1004}
1005
1006
1007
1008
1009
1010static void _crng_backtrack_protect(struct crng_state *crng,
1011 __u32 tmp[CHACHA20_BLOCK_WORDS], int used)
1012{
1013 unsigned long flags;
1014 __u32 *s, *d;
1015 int i;
1016
1017 used = round_up(used, sizeof(__u32));
1018 if (used + CHACHA20_KEY_SIZE > CHACHA20_BLOCK_SIZE) {
1019 extract_crng(tmp);
1020 used = 0;
1021 }
1022 spin_lock_irqsave(&crng->lock, flags);
1023 s = &tmp[used / sizeof(__u32)];
1024 d = &crng->state[4];
1025 for (i=0; i < 8; i++)
1026 *d++ ^= *s++;
1027 spin_unlock_irqrestore(&crng->lock, flags);
1028}
1029
1030static void crng_backtrack_protect(__u32 tmp[CHACHA20_BLOCK_WORDS], int used)
1031{
1032 struct crng_state *crng = NULL;
1033
1034#ifdef CONFIG_NUMA
1035 if (crng_node_pool)
1036 crng = crng_node_pool[numa_node_id()];
1037 if (crng == NULL)
1038#endif
1039 crng = &primary_crng;
1040 _crng_backtrack_protect(crng, tmp, used);
1041}
1042
1043static ssize_t extract_crng_user(void __user *buf, size_t nbytes)
1044{
1045 ssize_t ret = 0, i = CHACHA20_BLOCK_SIZE;
1046 __u32 tmp[CHACHA20_BLOCK_WORDS];
1047 int large_request = (nbytes > 256);
1048
1049 while (nbytes) {
1050 if (large_request && need_resched()) {
1051 if (signal_pending(current)) {
1052 if (ret == 0)
1053 ret = -ERESTARTSYS;
1054 break;
1055 }
1056 schedule();
1057 }
1058
1059 extract_crng(tmp);
1060 i = min_t(int, nbytes, CHACHA20_BLOCK_SIZE);
1061 if (copy_to_user(buf, tmp, i)) {
1062 ret = -EFAULT;
1063 break;
1064 }
1065
1066 nbytes -= i;
1067 buf += i;
1068 ret += i;
1069 }
1070 crng_backtrack_protect(tmp, i);
1071
1072
1073 memzero_explicit(tmp, sizeof(tmp));
1074
1075 return ret;
1076}
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086struct timer_rand_state {
1087 cycles_t last_time;
1088 long last_delta, last_delta2;
1089};
1090
1091#define INIT_TIMER_RAND_STATE { INITIAL_JIFFIES, };
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101void add_device_randomness(const void *buf, unsigned int size)
1102{
1103 unsigned long time = random_get_entropy() ^ jiffies;
1104 unsigned long flags;
1105
1106 if (!crng_ready() && size)
1107 crng_slow_load(buf, size);
1108
1109 trace_add_device_randomness(size, _RET_IP_);
1110 spin_lock_irqsave(&input_pool.lock, flags);
1111 _mix_pool_bytes(&input_pool, buf, size);
1112 _mix_pool_bytes(&input_pool, &time, sizeof(time));
1113 spin_unlock_irqrestore(&input_pool.lock, flags);
1114}
1115EXPORT_SYMBOL(add_device_randomness);
1116
1117static struct timer_rand_state input_timer_state = INIT_TIMER_RAND_STATE;
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
1130{
1131 struct entropy_store *r;
1132 struct {
1133 long jiffies;
1134 unsigned cycles;
1135 unsigned num;
1136 } sample;
1137 long delta, delta2, delta3;
1138
1139 sample.jiffies = jiffies;
1140 sample.cycles = random_get_entropy();
1141 sample.num = num;
1142 r = &input_pool;
1143 mix_pool_bytes(r, &sample, sizeof(sample));
1144
1145
1146
1147
1148
1149
1150 delta = sample.jiffies - state->last_time;
1151 state->last_time = sample.jiffies;
1152
1153 delta2 = delta - state->last_delta;
1154 state->last_delta = delta;
1155
1156 delta3 = delta2 - state->last_delta2;
1157 state->last_delta2 = delta2;
1158
1159 if (delta < 0)
1160 delta = -delta;
1161 if (delta2 < 0)
1162 delta2 = -delta2;
1163 if (delta3 < 0)
1164 delta3 = -delta3;
1165 if (delta > delta2)
1166 delta = delta2;
1167 if (delta > delta3)
1168 delta = delta3;
1169
1170
1171
1172
1173
1174
1175 credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
1176}
1177
1178void add_input_randomness(unsigned int type, unsigned int code,
1179 unsigned int value)
1180{
1181 static unsigned char last_value;
1182
1183
1184 if (value == last_value)
1185 return;
1186
1187 last_value = value;
1188 add_timer_randomness(&input_timer_state,
1189 (type << 4) ^ code ^ (code >> 4) ^ value);
1190 trace_add_input_randomness(ENTROPY_BITS(&input_pool));
1191}
1192EXPORT_SYMBOL_GPL(add_input_randomness);
1193
1194static DEFINE_PER_CPU(struct fast_pool, irq_randomness);
1195
1196#ifdef ADD_INTERRUPT_BENCH
1197static unsigned long avg_cycles, avg_deviation;
1198
1199#define AVG_SHIFT 8
1200#define FIXED_1_2 (1 << (AVG_SHIFT-1))
1201
1202static void add_interrupt_bench(cycles_t start)
1203{
1204 long delta = random_get_entropy() - start;
1205
1206
1207 delta = delta - ((avg_cycles + FIXED_1_2) >> AVG_SHIFT);
1208 avg_cycles += delta;
1209
1210 delta = abs(delta) - ((avg_deviation + FIXED_1_2) >> AVG_SHIFT);
1211 avg_deviation += delta;
1212}
1213#else
1214#define add_interrupt_bench(x)
1215#endif
1216
1217static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs)
1218{
1219 __u32 *ptr = (__u32 *) regs;
1220 unsigned int idx;
1221
1222 if (regs == NULL)
1223 return 0;
1224 idx = READ_ONCE(f->reg_idx);
1225 if (idx >= sizeof(struct pt_regs) / sizeof(__u32))
1226 idx = 0;
1227 ptr += idx++;
1228 WRITE_ONCE(f->reg_idx, idx);
1229 return *ptr;
1230}
1231
1232void add_interrupt_randomness(int irq, int irq_flags)
1233{
1234 struct entropy_store *r;
1235 struct fast_pool *fast_pool = this_cpu_ptr(&irq_randomness);
1236 struct pt_regs *regs = get_irq_regs();
1237 unsigned long now = jiffies;
1238 cycles_t cycles = random_get_entropy();
1239 __u32 c_high, j_high;
1240 __u64 ip;
1241 unsigned long seed;
1242 int credit = 0;
1243
1244 if (cycles == 0)
1245 cycles = get_reg(fast_pool, regs);
1246 c_high = (sizeof(cycles) > 4) ? cycles >> 32 : 0;
1247 j_high = (sizeof(now) > 4) ? now >> 32 : 0;
1248 fast_pool->pool[0] ^= cycles ^ j_high ^ irq;
1249 fast_pool->pool[1] ^= now ^ c_high;
1250 ip = regs ? instruction_pointer(regs) : _RET_IP_;
1251 fast_pool->pool[2] ^= ip;
1252 fast_pool->pool[3] ^= (sizeof(ip) > 4) ? ip >> 32 :
1253 get_reg(fast_pool, regs);
1254
1255 fast_mix(fast_pool);
1256 add_interrupt_bench(cycles);
1257
1258 if (unlikely(crng_init == 0)) {
1259 if ((fast_pool->count >= 64) &&
1260 crng_fast_load((char *) fast_pool->pool,
1261 sizeof(fast_pool->pool))) {
1262 fast_pool->count = 0;
1263 fast_pool->last = now;
1264 }
1265 return;
1266 }
1267
1268 if ((fast_pool->count < 64) &&
1269 !time_after(now, fast_pool->last + HZ))
1270 return;
1271
1272 r = &input_pool;
1273 if (!spin_trylock(&r->lock))
1274 return;
1275
1276 fast_pool->last = now;
1277 __mix_pool_bytes(r, &fast_pool->pool, sizeof(fast_pool->pool));
1278
1279
1280
1281
1282
1283
1284
1285 if (arch_get_random_seed_long(&seed)) {
1286 __mix_pool_bytes(r, &seed, sizeof(seed));
1287 credit = 1;
1288 }
1289 spin_unlock(&r->lock);
1290
1291 fast_pool->count = 0;
1292
1293
1294 credit_entropy_bits(r, credit + 1);
1295}
1296EXPORT_SYMBOL_GPL(add_interrupt_randomness);
1297
1298#ifdef CONFIG_BLOCK
1299void add_disk_randomness(struct gendisk *disk)
1300{
1301 if (!disk || !disk->random)
1302 return;
1303
1304 add_timer_randomness(disk->random, 0x100 + disk_devt(disk));
1305 trace_add_disk_randomness(disk_devt(disk), ENTROPY_BITS(&input_pool));
1306}
1307EXPORT_SYMBOL_GPL(add_disk_randomness);
1308#endif
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes);
1322static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
1323{
1324 if (!r->pull ||
1325 r->entropy_count >= (nbytes << (ENTROPY_SHIFT + 3)) ||
1326 r->entropy_count > r->poolinfo->poolfracbits)
1327 return;
1328
1329 _xfer_secondary_pool(r, nbytes);
1330}
1331
1332static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
1333{
1334 __u32 tmp[OUTPUT_POOL_WORDS];
1335
1336 int bytes = nbytes;
1337
1338
1339 bytes = max_t(int, bytes, random_read_wakeup_bits / 8);
1340
1341 bytes = min_t(int, bytes, sizeof(tmp));
1342
1343 trace_xfer_secondary_pool(r->name, bytes * 8, nbytes * 8,
1344 ENTROPY_BITS(r), ENTROPY_BITS(r->pull));
1345 bytes = extract_entropy(r->pull, tmp, bytes,
1346 random_read_wakeup_bits / 8, 0);
1347 mix_pool_bytes(r, tmp, bytes);
1348 credit_entropy_bits(r, bytes*8);
1349}
1350
1351
1352
1353
1354
1355
1356
1357static void push_to_pool(struct work_struct *work)
1358{
1359 struct entropy_store *r = container_of(work, struct entropy_store,
1360 push_work);
1361 BUG_ON(!r);
1362 _xfer_secondary_pool(r, random_read_wakeup_bits/8);
1363 trace_push_to_pool(r->name, r->entropy_count >> ENTROPY_SHIFT,
1364 r->pull->entropy_count >> ENTROPY_SHIFT);
1365}
1366
1367
1368
1369
1370
1371static size_t account(struct entropy_store *r, size_t nbytes, int min,
1372 int reserved)
1373{
1374 int entropy_count, orig, have_bytes;
1375 size_t ibytes, nfrac;
1376
1377 BUG_ON(r->entropy_count > r->poolinfo->poolfracbits);
1378
1379
1380retry:
1381 entropy_count = orig = READ_ONCE(r->entropy_count);
1382 ibytes = nbytes;
1383
1384 have_bytes = entropy_count >> (ENTROPY_SHIFT + 3);
1385
1386 if ((have_bytes -= reserved) < 0)
1387 have_bytes = 0;
1388 ibytes = min_t(size_t, ibytes, have_bytes);
1389 if (ibytes < min)
1390 ibytes = 0;
1391
1392 if (unlikely(entropy_count < 0)) {
1393 pr_warn("random: negative entropy count: pool %s count %d\n",
1394 r->name, entropy_count);
1395 WARN_ON(1);
1396 entropy_count = 0;
1397 }
1398 nfrac = ibytes << (ENTROPY_SHIFT + 3);
1399 if ((size_t) entropy_count > nfrac)
1400 entropy_count -= nfrac;
1401 else
1402 entropy_count = 0;
1403
1404 if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
1405 goto retry;
1406
1407 trace_debit_entropy(r->name, 8 * ibytes);
1408 if (ibytes &&
1409 (r->entropy_count >> ENTROPY_SHIFT) < random_write_wakeup_bits) {
1410 wake_up_interruptible(&random_write_wait);
1411 kill_fasync(&fasync, SIGIO, POLL_OUT);
1412 }
1413
1414 return ibytes;
1415}
1416
1417
1418
1419
1420
1421
1422
1423static void extract_buf(struct entropy_store *r, __u8 *out)
1424{
1425 int i;
1426 union {
1427 __u32 w[5];
1428 unsigned long l[LONGS(20)];
1429 } hash;
1430 __u32 workspace[SHA_WORKSPACE_WORDS];
1431 unsigned long flags;
1432
1433
1434
1435
1436
1437 sha_init(hash.w);
1438 for (i = 0; i < LONGS(20); i++) {
1439 unsigned long v;
1440 if (!arch_get_random_long(&v))
1441 break;
1442 hash.l[i] = v;
1443 }
1444
1445
1446 spin_lock_irqsave(&r->lock, flags);
1447 for (i = 0; i < r->poolinfo->poolwords; i += 16)
1448 sha_transform(hash.w, (__u8 *)(r->pool + i), workspace);
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459 __mix_pool_bytes(r, hash.w, sizeof(hash.w));
1460 spin_unlock_irqrestore(&r->lock, flags);
1461
1462 memzero_explicit(workspace, sizeof(workspace));
1463
1464
1465
1466
1467
1468
1469 hash.w[0] ^= hash.w[3];
1470 hash.w[1] ^= hash.w[4];
1471 hash.w[2] ^= rol32(hash.w[2], 16);
1472
1473 memcpy(out, &hash, EXTRACT_SIZE);
1474 memzero_explicit(&hash, sizeof(hash));
1475}
1476
1477static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
1478 size_t nbytes, int fips)
1479{
1480 ssize_t ret = 0, i;
1481 __u8 tmp[EXTRACT_SIZE];
1482 unsigned long flags;
1483
1484 while (nbytes) {
1485 extract_buf(r, tmp);
1486
1487 if (fips) {
1488 spin_lock_irqsave(&r->lock, flags);
1489 if (!memcmp(tmp, r->last_data, EXTRACT_SIZE))
1490 panic("Hardware RNG duplicated output!\n");
1491 memcpy(r->last_data, tmp, EXTRACT_SIZE);
1492 spin_unlock_irqrestore(&r->lock, flags);
1493 }
1494 i = min_t(int, nbytes, EXTRACT_SIZE);
1495 memcpy(buf, tmp, i);
1496 nbytes -= i;
1497 buf += i;
1498 ret += i;
1499 }
1500
1501
1502 memzero_explicit(tmp, sizeof(tmp));
1503
1504 return ret;
1505}
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516static ssize_t extract_entropy(struct entropy_store *r, void *buf,
1517 size_t nbytes, int min, int reserved)
1518{
1519 __u8 tmp[EXTRACT_SIZE];
1520 unsigned long flags;
1521
1522
1523 if (fips_enabled) {
1524 spin_lock_irqsave(&r->lock, flags);
1525 if (!r->last_data_init) {
1526 r->last_data_init = 1;
1527 spin_unlock_irqrestore(&r->lock, flags);
1528 trace_extract_entropy(r->name, EXTRACT_SIZE,
1529 ENTROPY_BITS(r), _RET_IP_);
1530 xfer_secondary_pool(r, EXTRACT_SIZE);
1531 extract_buf(r, tmp);
1532 spin_lock_irqsave(&r->lock, flags);
1533 memcpy(r->last_data, tmp, EXTRACT_SIZE);
1534 }
1535 spin_unlock_irqrestore(&r->lock, flags);
1536 }
1537
1538 trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
1539 xfer_secondary_pool(r, nbytes);
1540 nbytes = account(r, nbytes, min, reserved);
1541
1542 return _extract_entropy(r, buf, nbytes, fips_enabled);
1543}
1544
1545
1546
1547
1548
1549static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
1550 size_t nbytes)
1551{
1552 ssize_t ret = 0, i;
1553 __u8 tmp[EXTRACT_SIZE];
1554 int large_request = (nbytes > 256);
1555
1556 trace_extract_entropy_user(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
1557 xfer_secondary_pool(r, nbytes);
1558 nbytes = account(r, nbytes, 0, 0);
1559
1560 while (nbytes) {
1561 if (large_request && need_resched()) {
1562 if (signal_pending(current)) {
1563 if (ret == 0)
1564 ret = -ERESTARTSYS;
1565 break;
1566 }
1567 schedule();
1568 }
1569
1570 extract_buf(r, tmp);
1571 i = min_t(int, nbytes, EXTRACT_SIZE);
1572 if (copy_to_user(buf, tmp, i)) {
1573 ret = -EFAULT;
1574 break;
1575 }
1576
1577 nbytes -= i;
1578 buf += i;
1579 ret += i;
1580 }
1581
1582
1583 memzero_explicit(tmp, sizeof(tmp));
1584
1585 return ret;
1586}
1587
1588#define warn_unseeded_randomness(previous) \
1589 _warn_unseeded_randomness(__func__, (void *) _RET_IP_, (previous))
1590
1591static void _warn_unseeded_randomness(const char *func_name, void *caller,
1592 void **previous)
1593{
1594#ifdef CONFIG_WARN_ALL_UNSEEDED_RANDOM
1595 const bool print_once = false;
1596#else
1597 static bool print_once __read_mostly;
1598#endif
1599
1600 if (print_once ||
1601 crng_ready() ||
1602 (previous && (caller == READ_ONCE(*previous))))
1603 return;
1604 WRITE_ONCE(*previous, caller);
1605#ifndef CONFIG_WARN_ALL_UNSEEDED_RANDOM
1606 print_once = true;
1607#endif
1608 if (__ratelimit(&unseeded_warning))
1609 pr_notice("random: %s called from %pS with crng_init=%d\n",
1610 func_name, caller, crng_init);
1611}
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623static void _get_random_bytes(void *buf, int nbytes)
1624{
1625 __u32 tmp[CHACHA20_BLOCK_WORDS];
1626
1627 trace_get_random_bytes(nbytes, _RET_IP_);
1628
1629 while (nbytes >= CHACHA20_BLOCK_SIZE) {
1630 extract_crng(buf);
1631 buf += CHACHA20_BLOCK_SIZE;
1632 nbytes -= CHACHA20_BLOCK_SIZE;
1633 }
1634
1635 if (nbytes > 0) {
1636 extract_crng(tmp);
1637 memcpy(buf, tmp, nbytes);
1638 crng_backtrack_protect(tmp, nbytes);
1639 } else
1640 crng_backtrack_protect(tmp, CHACHA20_BLOCK_SIZE);
1641 memzero_explicit(tmp, sizeof(tmp));
1642}
1643
1644void get_random_bytes(void *buf, int nbytes)
1645{
1646 static void *previous;
1647
1648 warn_unseeded_randomness(&previous);
1649 _get_random_bytes(buf, nbytes);
1650}
1651EXPORT_SYMBOL(get_random_bytes);
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663int wait_for_random_bytes(void)
1664{
1665 if (likely(crng_ready()))
1666 return 0;
1667 return wait_event_interruptible(crng_init_wait, crng_ready());
1668}
1669EXPORT_SYMBOL(wait_for_random_bytes);
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680bool rng_is_initialized(void)
1681{
1682 return crng_ready();
1683}
1684EXPORT_SYMBOL(rng_is_initialized);
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694int add_random_ready_callback(struct random_ready_callback *rdy)
1695{
1696 struct module *owner;
1697 unsigned long flags;
1698 int err = -EALREADY;
1699
1700 if (crng_ready())
1701 return err;
1702
1703 owner = rdy->owner;
1704 if (!try_module_get(owner))
1705 return -ENOENT;
1706
1707 spin_lock_irqsave(&random_ready_list_lock, flags);
1708 if (crng_ready())
1709 goto out;
1710
1711 owner = NULL;
1712
1713 list_add(&rdy->list, &random_ready_list);
1714 err = 0;
1715
1716out:
1717 spin_unlock_irqrestore(&random_ready_list_lock, flags);
1718
1719 module_put(owner);
1720
1721 return err;
1722}
1723EXPORT_SYMBOL(add_random_ready_callback);
1724
1725
1726
1727
1728void del_random_ready_callback(struct random_ready_callback *rdy)
1729{
1730 unsigned long flags;
1731 struct module *owner = NULL;
1732
1733 spin_lock_irqsave(&random_ready_list_lock, flags);
1734 if (!list_empty(&rdy->list)) {
1735 list_del_init(&rdy->list);
1736 owner = rdy->owner;
1737 }
1738 spin_unlock_irqrestore(&random_ready_list_lock, flags);
1739
1740 module_put(owner);
1741}
1742EXPORT_SYMBOL(del_random_ready_callback);
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756int __must_check get_random_bytes_arch(void *buf, int nbytes)
1757{
1758 int left = nbytes;
1759 char *p = buf;
1760
1761 trace_get_random_bytes_arch(left, _RET_IP_);
1762 while (left) {
1763 unsigned long v;
1764 int chunk = min_t(int, left, sizeof(unsigned long));
1765
1766 if (!arch_get_random_long(&v))
1767 break;
1768
1769 memcpy(p, &v, chunk);
1770 p += chunk;
1771 left -= chunk;
1772 }
1773
1774 return nbytes - left;
1775}
1776EXPORT_SYMBOL(get_random_bytes_arch);
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787static void init_std_data(struct entropy_store *r)
1788{
1789 int i;
1790 ktime_t now = ktime_get_real();
1791 unsigned long rv;
1792
1793 r->last_pulled = jiffies;
1794 mix_pool_bytes(r, &now, sizeof(now));
1795 for (i = r->poolinfo->poolbytes; i > 0; i -= sizeof(rv)) {
1796 if (!arch_get_random_seed_long(&rv) &&
1797 !arch_get_random_long(&rv))
1798 rv = random_get_entropy();
1799 mix_pool_bytes(r, &rv, sizeof(rv));
1800 }
1801 mix_pool_bytes(r, utsname(), sizeof(*(utsname())));
1802}
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814static int rand_initialize(void)
1815{
1816 init_std_data(&input_pool);
1817 init_std_data(&blocking_pool);
1818 crng_initialize(&primary_crng);
1819 crng_global_init_time = jiffies;
1820 if (ratelimit_disable) {
1821 urandom_warning.interval = 0;
1822 unseeded_warning.interval = 0;
1823 }
1824 return 0;
1825}
1826early_initcall(rand_initialize);
1827
1828#ifdef CONFIG_BLOCK
1829void rand_initialize_disk(struct gendisk *disk)
1830{
1831 struct timer_rand_state *state;
1832
1833
1834
1835
1836
1837 state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
1838 if (state) {
1839 state->last_time = INITIAL_JIFFIES;
1840 disk->random = state;
1841 }
1842}
1843#endif
1844
1845static ssize_t
1846_random_read(int nonblock, char __user *buf, size_t nbytes)
1847{
1848 ssize_t n;
1849
1850 if (nbytes == 0)
1851 return 0;
1852
1853 nbytes = min_t(size_t, nbytes, SEC_XFER_SIZE);
1854 while (1) {
1855 n = extract_entropy_user(&blocking_pool, buf, nbytes);
1856 if (n < 0)
1857 return n;
1858 trace_random_read(n*8, (nbytes-n)*8,
1859 ENTROPY_BITS(&blocking_pool),
1860 ENTROPY_BITS(&input_pool));
1861 if (n > 0)
1862 return n;
1863
1864
1865 if (nonblock)
1866 return -EAGAIN;
1867
1868 wait_event_interruptible(random_read_wait,
1869 ENTROPY_BITS(&input_pool) >=
1870 random_read_wakeup_bits);
1871 if (signal_pending(current))
1872 return -ERESTARTSYS;
1873 }
1874}
1875
1876static ssize_t
1877random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1878{
1879 return _random_read(file->f_flags & O_NONBLOCK, buf, nbytes);
1880}
1881
1882static ssize_t
1883urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1884{
1885 unsigned long flags;
1886 static int maxwarn = 10;
1887 int ret;
1888
1889 if (!crng_ready() && maxwarn > 0) {
1890 maxwarn--;
1891 if (__ratelimit(&urandom_warning))
1892 printk(KERN_NOTICE "random: %s: uninitialized "
1893 "urandom read (%zd bytes read)\n",
1894 current->comm, nbytes);
1895 spin_lock_irqsave(&primary_crng.lock, flags);
1896 crng_init_cnt = 0;
1897 spin_unlock_irqrestore(&primary_crng.lock, flags);
1898 }
1899 nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
1900 ret = extract_crng_user(buf, nbytes);
1901 trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool));
1902 return ret;
1903}
1904
1905static __poll_t
1906random_poll(struct file *file, poll_table * wait)
1907{
1908 __poll_t mask;
1909
1910 poll_wait(file, &random_read_wait, wait);
1911 poll_wait(file, &random_write_wait, wait);
1912 mask = 0;
1913 if (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits)
1914 mask |= EPOLLIN | EPOLLRDNORM;
1915 if (ENTROPY_BITS(&input_pool) < random_write_wakeup_bits)
1916 mask |= EPOLLOUT | EPOLLWRNORM;
1917 return mask;
1918}
1919
1920static int
1921write_pool(struct entropy_store *r, const char __user *buffer, size_t count)
1922{
1923 size_t bytes;
1924 __u32 t, buf[16];
1925 const char __user *p = buffer;
1926
1927 while (count > 0) {
1928 int b, i = 0;
1929
1930 bytes = min(count, sizeof(buf));
1931 if (copy_from_user(&buf, p, bytes))
1932 return -EFAULT;
1933
1934 for (b = bytes ; b > 0 ; b -= sizeof(__u32), i++) {
1935 if (!arch_get_random_int(&t))
1936 break;
1937 buf[i] ^= t;
1938 }
1939
1940 count -= bytes;
1941 p += bytes;
1942
1943 mix_pool_bytes(r, buf, bytes);
1944 cond_resched();
1945 }
1946
1947 return 0;
1948}
1949
1950static ssize_t random_write(struct file *file, const char __user *buffer,
1951 size_t count, loff_t *ppos)
1952{
1953 size_t ret;
1954
1955 ret = write_pool(&input_pool, buffer, count);
1956 if (ret)
1957 return ret;
1958
1959 return (ssize_t)count;
1960}
1961
1962static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
1963{
1964 int size, ent_count;
1965 int __user *p = (int __user *)arg;
1966 int retval;
1967
1968 switch (cmd) {
1969 case RNDGETENTCNT:
1970
1971 ent_count = ENTROPY_BITS(&input_pool);
1972 if (put_user(ent_count, p))
1973 return -EFAULT;
1974 return 0;
1975 case RNDADDTOENTCNT:
1976 if (!capable(CAP_SYS_ADMIN))
1977 return -EPERM;
1978 if (get_user(ent_count, p))
1979 return -EFAULT;
1980 return credit_entropy_bits_safe(&input_pool, ent_count);
1981 case RNDADDENTROPY:
1982 if (!capable(CAP_SYS_ADMIN))
1983 return -EPERM;
1984 if (get_user(ent_count, p++))
1985 return -EFAULT;
1986 if (ent_count < 0)
1987 return -EINVAL;
1988 if (get_user(size, p++))
1989 return -EFAULT;
1990 retval = write_pool(&input_pool, (const char __user *)p,
1991 size);
1992 if (retval < 0)
1993 return retval;
1994 return credit_entropy_bits_safe(&input_pool, ent_count);
1995 case RNDZAPENTCNT:
1996 case RNDCLEARPOOL:
1997
1998
1999
2000
2001 if (!capable(CAP_SYS_ADMIN))
2002 return -EPERM;
2003 input_pool.entropy_count = 0;
2004 blocking_pool.entropy_count = 0;
2005 return 0;
2006 case RNDRESEEDCRNG:
2007 if (!capable(CAP_SYS_ADMIN))
2008 return -EPERM;
2009 if (crng_init < 2)
2010 return -ENODATA;
2011 crng_reseed(&primary_crng, NULL);
2012 crng_global_init_time = jiffies - 1;
2013 return 0;
2014 default:
2015 return -EINVAL;
2016 }
2017}
2018
2019static int random_fasync(int fd, struct file *filp, int on)
2020{
2021 return fasync_helper(fd, filp, on, &fasync);
2022}
2023
2024const struct file_operations random_fops = {
2025 .read = random_read,
2026 .write = random_write,
2027 .poll = random_poll,
2028 .unlocked_ioctl = random_ioctl,
2029 .fasync = random_fasync,
2030 .llseek = noop_llseek,
2031};
2032
2033const struct file_operations urandom_fops = {
2034 .read = urandom_read,
2035 .write = random_write,
2036 .unlocked_ioctl = random_ioctl,
2037 .fasync = random_fasync,
2038 .llseek = noop_llseek,
2039};
2040
2041SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count,
2042 unsigned int, flags)
2043{
2044 int ret;
2045
2046 if (flags & ~(GRND_NONBLOCK|GRND_RANDOM))
2047 return -EINVAL;
2048
2049 if (count > INT_MAX)
2050 count = INT_MAX;
2051
2052 if (flags & GRND_RANDOM)
2053 return _random_read(flags & GRND_NONBLOCK, buf, count);
2054
2055 if (!crng_ready()) {
2056 if (flags & GRND_NONBLOCK)
2057 return -EAGAIN;
2058 ret = wait_for_random_bytes();
2059 if (unlikely(ret))
2060 return ret;
2061 }
2062 return urandom_read(NULL, buf, count, NULL);
2063}
2064
2065
2066
2067
2068
2069
2070
2071#ifdef CONFIG_SYSCTL
2072
2073#include <linux/sysctl.h>
2074
2075static int min_read_thresh = 8, min_write_thresh;
2076static int max_read_thresh = OUTPUT_POOL_WORDS * 32;
2077static int max_write_thresh = INPUT_POOL_WORDS * 32;
2078static int random_min_urandom_seed = 60;
2079static char sysctl_bootid[16];
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090static int proc_do_uuid(struct ctl_table *table, int write,
2091 void __user *buffer, size_t *lenp, loff_t *ppos)
2092{
2093 struct ctl_table fake_table;
2094 unsigned char buf[64], tmp_uuid[16], *uuid;
2095
2096 uuid = table->data;
2097 if (!uuid) {
2098 uuid = tmp_uuid;
2099 generate_random_uuid(uuid);
2100 } else {
2101 static DEFINE_SPINLOCK(bootid_spinlock);
2102
2103 spin_lock(&bootid_spinlock);
2104 if (!uuid[8])
2105 generate_random_uuid(uuid);
2106 spin_unlock(&bootid_spinlock);
2107 }
2108
2109 sprintf(buf, "%pU", uuid);
2110
2111 fake_table.data = buf;
2112 fake_table.maxlen = sizeof(buf);
2113
2114 return proc_dostring(&fake_table, write, buffer, lenp, ppos);
2115}
2116
2117
2118
2119
2120static int proc_do_entropy(struct ctl_table *table, int write,
2121 void __user *buffer, size_t *lenp, loff_t *ppos)
2122{
2123 struct ctl_table fake_table;
2124 int entropy_count;
2125
2126 entropy_count = *(int *)table->data >> ENTROPY_SHIFT;
2127
2128 fake_table.data = &entropy_count;
2129 fake_table.maxlen = sizeof(entropy_count);
2130
2131 return proc_dointvec(&fake_table, write, buffer, lenp, ppos);
2132}
2133
2134static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
2135extern struct ctl_table random_table[];
2136struct ctl_table random_table[] = {
2137 {
2138 .procname = "poolsize",
2139 .data = &sysctl_poolsize,
2140 .maxlen = sizeof(int),
2141 .mode = 0444,
2142 .proc_handler = proc_dointvec,
2143 },
2144 {
2145 .procname = "entropy_avail",
2146 .maxlen = sizeof(int),
2147 .mode = 0444,
2148 .proc_handler = proc_do_entropy,
2149 .data = &input_pool.entropy_count,
2150 },
2151 {
2152 .procname = "read_wakeup_threshold",
2153 .data = &random_read_wakeup_bits,
2154 .maxlen = sizeof(int),
2155 .mode = 0644,
2156 .proc_handler = proc_dointvec_minmax,
2157 .extra1 = &min_read_thresh,
2158 .extra2 = &max_read_thresh,
2159 },
2160 {
2161 .procname = "write_wakeup_threshold",
2162 .data = &random_write_wakeup_bits,
2163 .maxlen = sizeof(int),
2164 .mode = 0644,
2165 .proc_handler = proc_dointvec_minmax,
2166 .extra1 = &min_write_thresh,
2167 .extra2 = &max_write_thresh,
2168 },
2169 {
2170 .procname = "urandom_min_reseed_secs",
2171 .data = &random_min_urandom_seed,
2172 .maxlen = sizeof(int),
2173 .mode = 0644,
2174 .proc_handler = proc_dointvec,
2175 },
2176 {
2177 .procname = "boot_id",
2178 .data = &sysctl_bootid,
2179 .maxlen = 16,
2180 .mode = 0444,
2181 .proc_handler = proc_do_uuid,
2182 },
2183 {
2184 .procname = "uuid",
2185 .maxlen = 16,
2186 .mode = 0444,
2187 .proc_handler = proc_do_uuid,
2188 },
2189#ifdef ADD_INTERRUPT_BENCH
2190 {
2191 .procname = "add_interrupt_avg_cycles",
2192 .data = &avg_cycles,
2193 .maxlen = sizeof(avg_cycles),
2194 .mode = 0444,
2195 .proc_handler = proc_doulongvec_minmax,
2196 },
2197 {
2198 .procname = "add_interrupt_avg_deviation",
2199 .data = &avg_deviation,
2200 .maxlen = sizeof(avg_deviation),
2201 .mode = 0444,
2202 .proc_handler = proc_doulongvec_minmax,
2203 },
2204#endif
2205 { }
2206};
2207#endif
2208
2209struct batched_entropy {
2210 union {
2211 u64 entropy_u64[CHACHA20_BLOCK_SIZE / sizeof(u64)];
2212 u32 entropy_u32[CHACHA20_BLOCK_SIZE / sizeof(u32)];
2213 };
2214 unsigned int position;
2215};
2216static rwlock_t batched_entropy_reset_lock = __RW_LOCK_UNLOCKED(batched_entropy_reset_lock);
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64);
2227u64 get_random_u64(void)
2228{
2229 u64 ret;
2230 bool use_lock;
2231 unsigned long flags = 0;
2232 struct batched_entropy *batch;
2233 static void *previous;
2234
2235#if BITS_PER_LONG == 64
2236 if (arch_get_random_long((unsigned long *)&ret))
2237 return ret;
2238#else
2239 if (arch_get_random_long((unsigned long *)&ret) &&
2240 arch_get_random_long((unsigned long *)&ret + 1))
2241 return ret;
2242#endif
2243
2244 warn_unseeded_randomness(&previous);
2245
2246 use_lock = READ_ONCE(crng_init) < 2;
2247 batch = &get_cpu_var(batched_entropy_u64);
2248 if (use_lock)
2249 read_lock_irqsave(&batched_entropy_reset_lock, flags);
2250 if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) {
2251 extract_crng((__u32 *)batch->entropy_u64);
2252 batch->position = 0;
2253 }
2254 ret = batch->entropy_u64[batch->position++];
2255 if (use_lock)
2256 read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2257 put_cpu_var(batched_entropy_u64);
2258 return ret;
2259}
2260EXPORT_SYMBOL(get_random_u64);
2261
2262static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32);
2263u32 get_random_u32(void)
2264{
2265 u32 ret;
2266 bool use_lock;
2267 unsigned long flags = 0;
2268 struct batched_entropy *batch;
2269 static void *previous;
2270
2271 if (arch_get_random_int(&ret))
2272 return ret;
2273
2274 warn_unseeded_randomness(&previous);
2275
2276 use_lock = READ_ONCE(crng_init) < 2;
2277 batch = &get_cpu_var(batched_entropy_u32);
2278 if (use_lock)
2279 read_lock_irqsave(&batched_entropy_reset_lock, flags);
2280 if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) {
2281 extract_crng(batch->entropy_u32);
2282 batch->position = 0;
2283 }
2284 ret = batch->entropy_u32[batch->position++];
2285 if (use_lock)
2286 read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2287 put_cpu_var(batched_entropy_u32);
2288 return ret;
2289}
2290EXPORT_SYMBOL(get_random_u32);
2291
2292
2293
2294
2295
2296static void invalidate_batched_entropy(void)
2297{
2298 int cpu;
2299 unsigned long flags;
2300
2301 write_lock_irqsave(&batched_entropy_reset_lock, flags);
2302 for_each_possible_cpu (cpu) {
2303 per_cpu_ptr(&batched_entropy_u32, cpu)->position = 0;
2304 per_cpu_ptr(&batched_entropy_u64, cpu)->position = 0;
2305 }
2306 write_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2307}
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323unsigned long
2324randomize_page(unsigned long start, unsigned long range)
2325{
2326 if (!PAGE_ALIGNED(start)) {
2327 range -= PAGE_ALIGN(start) - start;
2328 start = PAGE_ALIGN(start);
2329 }
2330
2331 if (start > ULONG_MAX - range)
2332 range = ULONG_MAX - start;
2333
2334 range >>= PAGE_SHIFT;
2335
2336 if (range == 0)
2337 return start;
2338
2339 return start + (get_random_long() % range << PAGE_SHIFT);
2340}
2341
2342
2343
2344
2345
2346void add_hwgenerator_randomness(const char *buffer, size_t count,
2347 size_t entropy)
2348{
2349 struct entropy_store *poolp = &input_pool;
2350
2351 if (unlikely(crng_init == 0)) {
2352 crng_fast_load(buffer, count);
2353 return;
2354 }
2355
2356
2357
2358
2359
2360 wait_event_interruptible(random_write_wait, kthread_should_stop() ||
2361 ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
2362 mix_pool_bytes(poolp, buffer, count);
2363 credit_entropy_bits(poolp, entropy);
2364}
2365EXPORT_SYMBOL_GPL(add_hwgenerator_randomness);
2366