337
337
#include <linux/spinlock.h>
338
338
#include <linux/kthread.h>
339
339
#include <linux/percpu.h>
340
- #include <linux/fips.h>
341
340
#include <linux/ptrace.h>
342
341
#include <linux/workqueue.h>
343
342
#include <linux/irq.h>
@@ -517,14 +516,12 @@ struct entropy_store {
517
516
u16 add_ptr ;
518
517
u16 input_rotate ;
519
518
int entropy_count ;
520
- unsigned int last_data_init :1 ;
521
- u8 last_data [EXTRACT_SIZE ];
522
519
};
523
520
524
521
static ssize_t extract_entropy (struct entropy_store * r , void * buf ,
525
522
size_t nbytes , int min , int rsvd );
526
523
static ssize_t _extract_entropy (struct entropy_store * r , void * buf ,
527
- size_t nbytes , int fips );
524
+ size_t nbytes );
528
525
529
526
static void crng_reseed (struct crng_state * crng , struct entropy_store * r );
530
527
static u32 input_pool_data [INPUT_POOL_WORDS ] __latent_entropy ;
@@ -821,7 +818,7 @@ static void crng_initialize_secondary(struct crng_state *crng)
821
818
822
819
static void __init crng_initialize_primary (struct crng_state * crng )
823
820
{
824
- _extract_entropy (& input_pool , & crng -> state [4 ], sizeof (u32 ) * 12 , 0 );
821
+ _extract_entropy (& input_pool , & crng -> state [4 ], sizeof (u32 ) * 12 );
825
822
if (crng_init_try_arch_early (crng ) && trust_cpu && crng_init < 2 ) {
826
823
invalidate_batched_entropy ();
827
824
numa_crng_init ();
@@ -1426,22 +1423,13 @@ static void extract_buf(struct entropy_store *r, u8 *out)
1426
1423
}
1427
1424
1428
1425
static ssize_t _extract_entropy (struct entropy_store * r , void * buf ,
1429
- size_t nbytes , int fips )
1426
+ size_t nbytes )
1430
1427
{
1431
1428
ssize_t ret = 0 , i ;
1432
1429
u8 tmp [EXTRACT_SIZE ];
1433
- unsigned long flags ;
1434
1430
1435
1431
while (nbytes ) {
1436
1432
extract_buf (r , tmp );
1437
-
1438
- if (fips ) {
1439
- spin_lock_irqsave (& r -> lock , flags );
1440
- if (!memcmp (tmp , r -> last_data , EXTRACT_SIZE ))
1441
- panic ("Hardware RNG duplicated output!\n" );
1442
- memcpy (r -> last_data , tmp , EXTRACT_SIZE );
1443
- spin_unlock_irqrestore (& r -> lock , flags );
1444
- }
1445
1433
i = min_t (int , nbytes , EXTRACT_SIZE );
1446
1434
memcpy (buf , tmp , i );
1447
1435
nbytes -= i ;
@@ -1467,28 +1455,9 @@ static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
1467
1455
static ssize_t extract_entropy (struct entropy_store * r , void * buf ,
1468
1456
size_t nbytes , int min , int reserved )
1469
1457
{
1470
- u8 tmp [EXTRACT_SIZE ];
1471
- unsigned long flags ;
1472
-
1473
- /* if last_data isn't primed, we need EXTRACT_SIZE extra bytes */
1474
- if (fips_enabled ) {
1475
- spin_lock_irqsave (& r -> lock , flags );
1476
- if (!r -> last_data_init ) {
1477
- r -> last_data_init = 1 ;
1478
- spin_unlock_irqrestore (& r -> lock , flags );
1479
- trace_extract_entropy (r -> name , EXTRACT_SIZE ,
1480
- ENTROPY_BITS (r ), _RET_IP_ );
1481
- extract_buf (r , tmp );
1482
- spin_lock_irqsave (& r -> lock , flags );
1483
- memcpy (r -> last_data , tmp , EXTRACT_SIZE );
1484
- }
1485
- spin_unlock_irqrestore (& r -> lock , flags );
1486
- }
1487
-
1488
1458
trace_extract_entropy (r -> name , nbytes , ENTROPY_BITS (r ), _RET_IP_ );
1489
1459
nbytes = account (r , nbytes , min , reserved );
1490
-
1491
- return _extract_entropy (r , buf , nbytes , fips_enabled );
1460
+ return _extract_entropy (r , buf , nbytes );
1492
1461
}
1493
1462
1494
1463
#define warn_unseeded_randomness (previous ) \
0 commit comments