diff options
Diffstat (limited to 'crypto/jitterentropy-kcapi.c')
| -rw-r--r-- | crypto/jitterentropy-kcapi.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/crypto/jitterentropy-kcapi.c b/crypto/jitterentropy-kcapi.c index 597cedd3531c..c4938497eedb 100644 --- a/crypto/jitterentropy-kcapi.c +++ b/crypto/jitterentropy-kcapi.c | |||
| @@ -87,24 +87,28 @@ void jent_memcpy(void *dest, const void *src, unsigned int n) | |||
| 87 | memcpy(dest, src, n); | 87 | memcpy(dest, src, n); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | /* | ||
| 91 | * Obtain a high-resolution time stamp value. The time stamp is used to measure | ||
| 92 | * the execution time of a given code path and its variations. Hence, the time | ||
| 93 | * stamp must have a sufficiently high resolution. | ||
| 94 | * | ||
| 95 | * Note, if the function returns zero because a given architecture does not | ||
| 96 | * implement a high-resolution time stamp, the RNG code's runtime test | ||
| 97 | * will detect it and will not produce output. | ||
| 98 | */ | ||
| 90 | void jent_get_nstime(__u64 *out) | 99 | void jent_get_nstime(__u64 *out) |
| 91 | { | 100 | { |
| 92 | struct timespec ts; | ||
| 93 | __u64 tmp = 0; | 101 | __u64 tmp = 0; |
| 94 | 102 | ||
| 95 | tmp = random_get_entropy(); | 103 | tmp = random_get_entropy(); |
| 96 | 104 | ||
| 97 | /* | 105 | /* |
| 98 | * If random_get_entropy does not return a value (which is possible on, | 106 | * If random_get_entropy does not return a value, i.e. it is not |
| 99 | * for example, MIPS), invoke __getnstimeofday | 107 | * implemented for a given architecture, use a clock source. |
| 100 | * hoping that there are timers we can work with. | 108 | * hoping that there are timers we can work with. |
| 101 | */ | 109 | */ |
| 102 | if ((0 == tmp) && | 110 | if (tmp == 0) |
| 103 | (0 == __getnstimeofday(&ts))) { | 111 | tmp = ktime_get_ns(); |
| 104 | tmp = ts.tv_sec; | ||
| 105 | tmp = tmp << 32; | ||
| 106 | tmp = tmp | ts.tv_nsec; | ||
| 107 | } | ||
| 108 | 112 | ||
| 109 | *out = tmp; | 113 | *out = tmp; |
| 110 | } | 114 | } |
