diff --git a/LibOS/shim/include/shim_internal.h b/LibOS/shim/include/shim_internal.h
index 4f2529c7..dab7c3f2 100644
--- a/LibOS/shim/include/shim_internal.h
+++ b/LibOS/shim/include/shim_internal.h
@@ -785,7 +785,6 @@ static_always_inline void * current_stack(void)
void get_brk_region (void ** start, void ** end, void ** current);
-int init_randgen (void);
int reset_brk (void);
int init_brk_region (void * brk_region);
int init_heap (void);
diff --git a/LibOS/shim/include/shim_utils.h b/LibOS/shim/include/shim_utils.h
index c4fb7fbe..b6c35c88 100644
--- a/LibOS/shim/include/shim_utils.h
+++ b/LibOS/shim/include/shim_utils.h
@@ -208,9 +208,6 @@ void md5_final (struct shim_md5_ctx * mdContext);
/* prompt user for confirmation */
int message_confirm (const char * message, const char * options);
-/* get random bytes (not for crypto!) */
-void getrand (void * buffer, size_t size);
-
/* ELF binary loading */
int check_elf_object (struct shim_handle * file);
int load_elf_object (struct shim_handle * file, void * addr, size_t mapped);
diff --git a/LibOS/shim/src/Makefile b/LibOS/shim/src/Makefile
index d9861dee..6ed780ac 100644
--- a/LibOS/shim/src/Makefile
+++ b/LibOS/shim/src/Makefile
@@ -50,7 +50,7 @@ objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
$(addprefix ipc/shim_,ipc ipc_helper ipc_child) \
$(addprefix ipc/shim_ipc_,$(ipcns)) \
elf/shim_rtld \
- $(addprefix shim_,init table syscalls checkpoint random malloc \
+ $(addprefix shim_,init table syscalls checkpoint malloc \
async parser debug) syscallas start \
$(patsubst %.c,%,$(wildcard sys/*.c))
graphene_lib = .lib/graphene-lib.a
diff --git a/LibOS/shim/src/bookkeep/shim_vma.c b/LibOS/shim/src/bookkeep/shim_vma.c
index e6f29c92..481c141d 100644
--- a/LibOS/shim/src/bookkeep/shim_vma.c
+++ b/LibOS/shim/src/bookkeep/shim_vma.c
@@ -342,7 +342,7 @@ int init_vma (void)
uint64_t addr_rand_size =
(PAL_CB(user_address.end) - PAL_CB(user_address.start)) * 5 / 6;
uint64_t rand;
- getrand(&rand, sizeof(rand));
+ DkRandomBitsRead(&rand, sizeof(rand));
current_heap_top -= ALIGN_DOWN(rand % addr_rand_size);
#endif
diff --git a/LibOS/shim/src/fs/dev/fs.c b/LibOS/shim/src/fs/dev/fs.c
index 3bcd233b..217905c7 100644
--- a/LibOS/shim/src/fs/dev/fs.c
+++ b/LibOS/shim/src/fs/dev/fs.c
@@ -117,16 +117,13 @@ static int dev_random_mode (const char * name, mode_t * mode)
static int dev_random_read (struct shim_handle * hdl, void * buf,
size_t count)
{
- int rv = DkRandomBitsRead(buf, count);
- return rv;
+ return DkRandomBitsRead(buf, count);
}
static int dev_urandom_read (struct shim_handle * hdl, void * buf,
size_t count)
{
- // THIS IS NOT CRYPTO-SECURE, FIX!!!
- getrand(buf, count);
- return count;
+ return DkRandomBitsRead(buf, count);
}
static int dev_random_stat (const char * name, struct stat * stat)
diff --git a/LibOS/shim/src/shim_init.c b/LibOS/shim/src/shim_init.c
index 55b93154..a91a962d 100644
--- a/LibOS/shim/src/shim_init.c
+++ b/LibOS/shim/src/shim_init.c
@@ -636,7 +636,6 @@ DEFINE_PROFILE_INTERVAL(pal_tail_startup_time, pal);
DEFINE_PROFILE_INTERVAL(pal_child_creation_time, pal);
DEFINE_PROFILE_CATAGORY(init, );
-DEFINE_PROFILE_INTERVAL(init_randgen, init);
DEFINE_PROFILE_INTERVAL(init_vma, init);
DEFINE_PROFILE_INTERVAL(init_slab, init);
DEFINE_PROFILE_INTERVAL(init_str_mgr, init);
@@ -725,7 +724,6 @@ int shim_init (int argc, void * args, void ** return_stack)
#endif
BEGIN_PROFILE_INTERVAL();
- RUN_INIT(init_randgen);
RUN_INIT(init_vma);
RUN_INIT(init_slab);
RUN_INIT(read_environs, envp);
@@ -862,7 +860,7 @@ static int name_pipe (char * uri, size_t size, void * id)
{
IDTYPE pipeid;
int len;
- getrand(&pipeid, sizeof(pipeid));
+ DkRandomBitsRead(&pipeid, sizeof(pipeid));
debug("creating pipe: pipe.srv:%u\n", pipeid);
if ((len = snprintf(uri, size, "pipe.srv:%u", pipeid)) == size)
return -ERANGE;
@@ -911,7 +909,7 @@ static int name_path (char * path, size_t size, void * id)
unsigned int suffix;
int prefix_len = strlen(path);
int len;
- getrand(&suffix, sizeof(suffix));
+ DkRandomBitsRead(&suffix, sizeof(suffix));
len = snprintf(path + prefix_len, size - prefix_len, "%08x", suffix);
if (len == size)
return -ERANGE;
diff --git a/LibOS/shim/src/shim_random.c b/LibOS/shim/src/shim_random.c
deleted file mode 100644
index e72982bf..00000000
--- a/LibOS/shim/src/shim_random.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- mode:c; c-file-style:"k&r"; c-basic-offset: 4; tab-width:4; indent-tabs-mode:nil; mode:auto-fill; fill-column:78; -*- */
-/* vim: set ts=4 sw=4 et tw=78 fo=cqt wm=0: */
-
-/* Copyright (C) 2014 Stony Brook University
- This file is part of Graphene Library OS.
-
- Graphene Library OS is free software: you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- Graphene Library OS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see . */
-
-/*
- * shim_random.c
- *
- * This file contains codes for generating random numbers.
- */
-
-#include
-#include
-#include
-
-#include
-
-static LOCKTYPE randgen_lock;
-static unsigned long randval;
-
-int init_randgen (void)
-{
- if (DkRandomBitsRead (&randval, sizeof(randval)) < sizeof(randval))
- return -EACCES;
-
- debug("initial random value: %08lx\n", randval);
- create_lock(randgen_lock);
- return 0;
-}
-
-void getrand (void * buffer, size_t size)
-{
- size_t bytes = 0;
- lock(randgen_lock);
-
- while (bytes + sizeof(uint64_t) <= size) {
- *(uint64_t *) (buffer + bytes) = randval;
- bytes += sizeof(uint64_t);
- randval = hash64(randval);
- }
-
- if (bytes < size) {
- memcpy(buffer + bytes, &randval, size - bytes);
- randval = hash64(randval);
- }
-
- unlock(randgen_lock);
-}
-extern_alias(getrand);
diff --git a/LibOS/shim/src/sys/shim_brk.c b/LibOS/shim/src/sys/shim_brk.c
index f5295ce6..3377da16 100644
--- a/LibOS/shim/src/sys/shim_brk.c
+++ b/LibOS/shim/src/sys/shim_brk.c
@@ -85,7 +85,7 @@ int init_brk_region (void * brk_region)
if (brk_region) {
while (true) {
uint32_t rand;
- getrand(&rand, sizeof(rand));
+ DkRandomBitsRead(&rand, sizeof(rand));
rand %= 0x2000000;
rand = ALIGN_UP(rand);
diff --git a/LibOS/shim/src/sys/shim_migrate.c b/LibOS/shim/src/sys/shim_migrate.c
index 84b8c6de..b25bda05 100644
--- a/LibOS/shim/src/sys/shim_migrate.c
+++ b/LibOS/shim/src/sys/shim_migrate.c
@@ -113,7 +113,7 @@ int create_checkpoint (const char * cpdir, IDTYPE * sid)
}
} else {
retry:
- getrand(&cpsession->sid, sizeof(IDTYPE));
+ DkRandomBitsRead(&cpsession->sid, sizeof(cpsession->sid));
listp_for_each_entry(s, &cp_sessions, list)
if (s->sid == cpsession->sid)
diff --git a/Pal/src/host/FreeBSD/db_misc.c b/Pal/src/host/FreeBSD/db_misc.c
index 3f4296e0..46078895 100644
--- a/Pal/src/host/FreeBSD/db_misc.c
+++ b/Pal/src/host/FreeBSD/db_misc.c
@@ -184,52 +184,6 @@ int _DkInstructionCacheFlush (const void * addr, int size)
{
return -PAL_ERROR_NOTIMPLEMENTED;
}
-static PAL_LOCK lock = LOCK_INIT;
-static unsigned long randval = 0;
-
-static int init_randgen (void)
-{
- unsigned long val;
-
- if (_DkRandomBitsRead(&val, sizeof(val)) < sizeof(val))
- return -PAL_ERROR_DENIED;
-
- _DkInternalLock(&lock);
- randval = val;
- _DkInternalUnlock(&lock);
- return 0;
-}
-
-int getrand (void * buffer, size_t size)
-{
- unsigned long val;
- size_t bytes = 0;
-
- int ret = init_randgen();
- if (ret < 0)
- return ret;
-
- _DkInternalLock(&lock);
- val = randval;
- randval = hash64(~randval);
- _DkInternalUnlock(&lock);
-
- while (bytes + sizeof(uint64_t) <= size) {
- *(uint64_t *) (buffer + bytes) = val;
- val = hash64(val);
- bytes += sizeof(uint64_t);
- }
-
- if (bytes < size) {
- memcpy(buffer + bytes, &val, size - bytes);
- val = hash64(val);
- }
-
- _DkInternalLock(&lock);
- randval = val;
- _DkInternalUnlock(&lock);
- return 0;
-}
int _DkCpuIdRetrieve (unsigned int leaf, unsigned int subleaf,
unsigned int values[4])
diff --git a/Pal/src/host/FreeBSD/pal_freebsd.h b/Pal/src/host/FreeBSD/pal_freebsd.h
index b2a49b79..ed469c71 100644
--- a/Pal/src/host/FreeBSD/pal_freebsd.h
+++ b/Pal/src/host/FreeBSD/pal_freebsd.h
@@ -47,8 +47,6 @@ typedef int __kernel_pid_t;
#define ERRNO INTERNAL_SYSCALL_ERRNO
#define ERRNO_P INTERNAL_SYSCALL_ERRNO_P
-int getrand (void * buffer, size_t size);
-
struct timespec;
struct timeval;
extern struct pal_bsd_state {