1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Do not use HP_TIMING_NOW for random bits

This patch removes the HP_TIMING_BITS usage for fast random bits and replace
with clock_gettime (CLOCK_MONOTONIC).  It has unspecified starting time and
nano-second accuracy, so its randomness is significantly better than
gettimeofday.

Althoug it should incur in more overhead (specially for architecture that
support hp-timing), the symbol is also common implemented as a vDSO.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu. I also
checked on a i686-gnu build.

	* include/random-bits.h: New file.
	* resolv/res_mkquery.c [HP_TIMING_AVAIL] (RANDOM_BITS,
	(__res_context_mkquery): Remove usage hp-timing usage and replace with
	random_bits.
	* resolv/res_send.c [HP_TIMING_AVAIL] (nameserver_offset): Likewise.
	* sysdeps/posix/tempname.c [HP_TIMING_AVAIL] (__gen_tempname):
	Likewise.
This commit is contained in:
Adhemerval Zanella
2019-01-16 18:10:56 +00:00
parent 6e8ba7fd57
commit 359653aaac
5 changed files with 66 additions and 54 deletions

View File

@ -109,7 +109,7 @@
#include <unistd.h>
#include <kernel-features.h>
#include <libc-diag.h>
#include <hp-timing.h>
#include <random-bits.h>
#if PACKETSZ > 65536
#define MAXPACKET PACKETSZ
@ -309,15 +309,7 @@ nameserver_offset (struct __res_state *statp)
if ((offset & 1) == 0)
{
/* Initialization is required. */
#if HP_TIMING_AVAIL
uint64_t ticks;
HP_TIMING_NOW (ticks);
offset = ticks;
#else
struct timeval tv;
__gettimeofday (&tv, NULL);
offset = ((tv.tv_sec << 8) ^ tv.tv_usec);
#endif
offset = random_bits ();
/* The lowest bit is the most random. Preserve it. */
offset <<= 1;