• Peter Korsgaard's avatar
    hwrng: atmel-rng - fix race condition leading to repeated bits · 121daad8
    Peter Korsgaard authored
    Data valid gets cleared by reading the ISR (status register) and NOT from
    reading ODATA (data register). A new data word can become available between
    checking ISR and reading ODATA, causing us to reuse the same data word next
    time atmel_trng_read() gets called, if that happens before the following
    data word is ready.
    
    With this fixed, rngtest no longer complains of 'Continous run' errors.
    Before:
    
    rngtest -c 1000 < /dev/hwrng
    rngtest 3
    Copyright (c) 2004 by Henrique de Moraes Holschuh
    This is free software; see the source for copying conditions.  There is NO warr.
    
    rngtest: starting FIPS tests...
    rngtest: bits received from input: 20000032
    rngtest: FIPS 140-2 successes: 923
    rngtest: FIPS 140-2 failures: 77
    rngtest: FIPS 140-2(2001-10-10) Monobit: 0
    rngtest: FIPS 140-2(2001-10-10) Poker: 0
    rngtest: FIPS 140-2(2001-10-10) Runs: 1
    rngtest: FIPS 140-2(2001-10-10) Long run: 0
    rngtest: FIPS 140-2(2001-10-10) Continuous run: 76
    rngtest: input channel speed: (min=721.402; avg=46003.510; max=49321.338)Kibitss
    rngtest: FIPS tests speed: (min=11.442; avg=12.714; max=12.801)Mibits/s
    rngtest: Program run time: 1931860 microseconds
    
    After:
    
    rngtest -c 1000 < /dev/hwrng
    rngtest 3
    Copyright (c) 2004 by Henrique de Moraes Holschuh
    This is free software; see the source for copying conditions.  There is NO warr.
    
    rngtest: starting FIPS tests...
    rngtest: bits received from input: 20000032
    rngtest: FIPS 140-2 successes: 1000
    rngtest: FIPS 140-2 failures: 0
    rngtest: FIPS 140-2(2001-10-10) Monobit: 0
    rngtest: FIPS 140-2(2001-10-10) Poker: 0
    rngtest: FIPS 140-2(2001-10-10) Runs: 0
    rngtest: FIPS 140-2(2001-10-10) Long run: 0
    rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
    rngtest: input channel speed: (min=777.518; avg=36988.482; max=43115.342)Kibitss
    rngtest: FIPS tests speed: (min=11.951; avg=12.715; max=12.887)Mibits/s
    rngtest: Program run time: 2035543 microseconds
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
    Reported-by: default avatarGeorge Pontis <GPontis@z9.com>
    Acked-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    121daad8
atmel-rng.c 3.29 KB