Skip to content

Commit

Permalink
libhfcommon/util: if'izing the util_rndInitThread code
Browse files Browse the repository at this point in the history
  • Loading branch information
robertswiecki committed Dec 20, 2023
1 parent b366086 commit 408ec90
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 16 deletions.
8 changes: 3 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -427,14 +427,12 @@ hfuzz_cc/hfuzz-cc.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h
hfuzz_cc/hfuzz-cc.o: libhfcommon/files.h libhfcommon/common.h
hfuzz_cc/hfuzz-cc.o: libhfcommon/log.h
libhfcommon/files.o: libhfcommon/files.h libhfcommon/common.h
libhfcommon/files.o: libhfcommon/common.h libhfcommon/log.h
libhfcommon/files.o: libhfcommon/util.h
libhfcommon/files.o: libhfcommon/log.h libhfcommon/util.h
libhfcommon/log.o: libhfcommon/log.h libhfcommon/common.h libhfcommon/util.h
libhfcommon/ns.o: libhfcommon/ns.h libhfcommon/common.h libhfcommon/files.h
libhfcommon/ns.o: libhfcommon/common.h libhfcommon/log.h libhfcommon/util.h
libhfcommon/ns.o: libhfcommon/log.h libhfcommon/util.h
libhfcommon/util.o: libhfcommon/util.h libhfcommon/common.h
libhfcommon/util.o: libhfcommon/files.h libhfcommon/common.h
libhfcommon/util.o: libhfcommon/log.h
libhfcommon/util.o: libhfcommon/files.h libhfcommon/log.h
libhfnetdriver/netdriver.o: libhfnetdriver/netdriver.h honggfuzz.h
libhfnetdriver/netdriver.o: libhfcommon/util.h libhfcommon/common.h
libhfnetdriver/netdriver.o: libhfcommon/files.h libhfcommon/common.h
Expand Down
20 changes: 9 additions & 11 deletions libhfcommon/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,23 +228,24 @@ static __thread pthread_once_t rndThreadOnce = PTHREAD_ONCE_INIT;
static __thread uint64_t rndState[2];

static void util_rndInitThread(void) {
#if !defined(BSD)
#if defined(_HF_ARCH_LINUX)
#if defined(BSD)
arc4random_buf((void*)rndState, sizeof(rndState));
return;
#elif defined(_HF_ARCH_LINUX) && defined(__NR_getrandom)
size_t rrnd = 0;
size_t trnd = sizeof(rndState);

while (rrnd < trnd) {
// we are taking the harder road to cope with older linux versions without the getrandom's
// wrapper
ssize_t len = TEMP_FAILURE_RETRY((ssize_t)syscall(
SYS_getrandom, (uintptr_t)((uint8_t*)rndState + rrnd), (uintptr_t)(trnd - rrnd), 0L));
if (UNLIKELY(len < 0)) {
ssize_t len = TEMP_FAILURE_RETRY((ssize_t)syscall(__NR_getrandom,
(uintptr_t)((uint8_t*)rndState + rrnd), (uintptr_t)(trnd - rrnd), (uintptr_t)0));
if (UNLIKELY(len <= 0)) {
PLOG_F("Couldn't read '%zu' bytes from getrandom", (trnd - rrnd));
}

rrnd += (size_t)len;
}
#else
return;
#else /* defined(_HF_ARCH_LINUX) && defined(__NR_getrandom) */
int fd = TEMP_FAILURE_RETRY(open("/dev/urandom", O_RDONLY | O_CLOEXEC));
if (fd == -1) {
PLOG_F("Couldn't open /dev/urandom for reading");
Expand All @@ -254,9 +255,6 @@ static void util_rndInitThread(void) {
}
close(fd);
#endif
#else
arc4random_buf((void*)rndState, sizeof(rndState));
#endif
}

/*
Expand Down

0 comments on commit 408ec90

Please sign in to comment.