aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/jitterentropy-kcapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/jitterentropy-kcapi.c')
-rw-r--r--crypto/jitterentropy-kcapi.c22
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 */
90void jent_get_nstime(__u64 *out) 99void 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}