diff --git a/mixr/mixr.c b/mixr/mixr.c index d3a07bc4ef4a9732ec12d92a38414bbb35fc7db7..915e348956ccb3b6a559572293b2e547fe522237 100644 --- a/mixr/mixr.c +++ b/mixr/mixr.c @@ -55,6 +55,10 @@ static int q_fd; #define assert(a) #endif +#ifndef POLICY_RANDOM_MAX_ITERATIONS +#define POLICY_RANDOM_MAX_ITERATIONS 10 +#endif + int _mprotect(void *addr, size_t len, int flags); void _memcpy(void *dst, const void *src, unsigned long int len); @@ -197,7 +201,11 @@ void mixr_active_dollops_mark_from_stack(void *table_addr) { uint64_t read_random64(void) { unsigned long long random_value = -1; int fd = -1; +#ifdef CFAR + fd = open("/dev/cfar_urandom", 0x00, 0x00); +#else fd = open("/dev/urandom", 0x00, 0x00); +#endif if (fd != -1) { read(fd, (void*)&random_value, sizeof(unsigned long long)); close(fd); @@ -567,7 +575,12 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry) void zipr_mixr(void *table_addr) { uint64_t table_length = 0; +#ifdef POLICY_RANDOM + uint64_t random_iterator = 0; + uint64_t random_iterator_max = POLICY_RANDOM_MAX_ITERATIONS; +#else uint64_t table_iterator = 2; +#endif uint64_t table_fixed_size = 0; uint64_t q_value = 0xab; @@ -582,9 +595,20 @@ void zipr_mixr(void *table_addr) #endif mixr_active_dollops_mark_from_stack(table_addr); - for (table_iterator = 1; table_iterator<table_length; table_iterator+=2) +#ifdef POLICY_RANDOM + for (random_iterator=0;random_iterator<random_iterator_max;random_iterator++) +#else + for (table_iterator=1;table_iterator<table_length;table_iterator+=2) +#endif { +#ifdef POLICY_RANDOM + uint64_t a = read_random64() % table_length; + uint64_t b = read_random64() % table_length; +#else uint64_t a = table_iterator, b = a-1; + volatile uint64_t c = read_random64() % table_length; + volatile uint64_t d = read_random64() % table_length; +#endif uint64_t dt_address_a = dt_table_read_entry_address(table_addr, a); uint16_t dt_offset_a = dt_table_read_entry_offset(table_addr, a); uint64_t rw_address_a = dt_address_a + dt_offset_a; @@ -672,11 +696,17 @@ void zipr_mixr(void *table_addr) #ifdef DEMO dt_table_write_to_file(table_addr, "/tmp/testwrite.bin"); -#endif if (q_fd == -1) + { + print_str_debug("Attempting to open fifo q file handle."); q_fd = mixr_open_fifo_q("/tmp/testfifo.txt"); + } + print_str_debug("Attempting to write to fifo q file handle:"); + print_int_debug(q_fd); + print_str_debug("\n"); write(q_fd, (const char *)&q_value, sizeof(uint64_t)); +#endif } void zipr_hook_start(unsigned long long id,