summaryrefslogtreecommitdiff
path: root/random/rndhw.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2017-01-28 15:00:28 +0200
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2017-02-04 12:47:05 +0200
commit37b537600f33fcf8e1c8dc2c658a142fbba44199 (patch)
tree7d76f7a6d7b91ed2a6e491f41737f4232e16c618 /random/rndhw.c
parent1407317a6112a23d4fec5827a9d74faef4196f66 (diff)
downloadlibgcrypt-37b537600f33fcf8e1c8dc2c658a142fbba44199.tar.gz
rndhw: avoid type-punching
* random/rndhw.c (rdrand_long, rdrand_nlong): Add 'volatile' for pointer. (poll_drng): Convert buffer to 'unsigned long[]' and make use of DIM macro. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'random/rndhw.c')
-rw-r--r--random/rndhw.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/random/rndhw.c b/random/rndhw.c
index 8e507515..063c25a1 100644
--- a/random/rndhw.c
+++ b/random/rndhw.c
@@ -129,7 +129,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins),
# define RDRAND_LONG RDRAND_INT
# endif
static inline int
-rdrand_long (unsigned long *v)
+rdrand_long (volatile unsigned long *v)
{
int ok;
asm volatile ("1: " RDRAND_LONG "\n\t"
@@ -145,7 +145,7 @@ rdrand_long (unsigned long *v)
static inline int
-rdrand_nlong (unsigned long *v, int count)
+rdrand_nlong (volatile unsigned long *v, int count)
{
while (count--)
if (!rdrand_long(v++))
@@ -157,12 +157,12 @@ rdrand_nlong (unsigned long *v, int count)
static size_t
poll_drng (add_fn_t add, enum random_origins origin, int fast)
{
- volatile char buffer[64] __attribute__ ((aligned (8)));
+ volatile unsigned long buffer[8] __attribute__ ((aligned (8)));
unsigned int nbytes = sizeof (buffer);
(void)fast;
- if (!rdrand_nlong ((unsigned long *)buffer, sizeof(buffer)/sizeof(long)))
+ if (!rdrand_nlong (buffer, DIM(buffer)))
return 0;
(*add)((void *)buffer, nbytes, origin);
return nbytes;