diff --git a/software/infnoise.c b/software/infnoise.c index 03806bf..c468286 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -270,7 +270,6 @@ int main(int argc, char **argv) { fprintf(stderr, "Error: %s\n", context.message); return 1; // ERROR } - context.errorFlag = false; // calculate output size based on the parameters: uint64_t resultSize; diff --git a/software/libinfnoise.c b/software/libinfnoise.c index 636e00e..8b62270 100644 --- a/software/libinfnoise.c +++ b/software/libinfnoise.c @@ -241,6 +241,7 @@ devlist_node listUSBDevices(char **message) { current_entry->next = NULL; } } + ftdi_list_free2(devlist); return return_list; } @@ -255,6 +256,7 @@ bool initializeUSB(struct ftdi_context *ftdic, char **message, char *serial) { *message = "Can't find Infinite Noise Multiplier"; return false; } + ftdi_list_free2(devlist); // only one found, or no serial given if (serial == NULL) { diff --git a/software/writeentropy.c b/software/writeentropy.c index c6230f5..952123a 100644 --- a/software/writeentropy.c +++ b/software/writeentropy.c @@ -13,9 +13,7 @@ #define SIZE_PROC_FILENAME "/proc/sys/kernel/random/poolsize" #define FILL_PROC_FILENAME "/proc/sys/kernel/random/write_wakeup_threshold" -static uint32_t inmBufLen; -static bool inmDebug; -static int inmDevRandomFD; +static struct pollfd pfd; static uint32_t inmFillWatermark; static struct rand_pool_info *inmPoolInfo; @@ -39,12 +37,10 @@ static uint32_t readNumberFromFile(char *fileName) { // Open /dev/random void inmWriteEntropyStart(uint32_t bufLen, bool debug) { - inmBufLen = bufLen; - inmDebug = debug; - - //inmDevRandomFD = open("/dev/random", O_WRONLY); - inmDevRandomFD = open("/dev/random", O_RDWR); - if(inmDevRandomFD < 0) { + pfd.events = POLLOUT; + //pfd.fd = open("/dev/random", O_WRONLY); + pfd.fd = open("/dev/random", O_RDWR); + if(pfd.fd < 0) { fprintf(stderr, "Unable to open /dev/random\n"); exit(1); } @@ -54,7 +50,7 @@ void inmWriteEntropyStart(uint32_t bufLen, bool debug) { exit(1); } inmFillWatermark = readNumberFromFile(FILL_PROC_FILENAME); - if(inmDebug) { + if(debug) { printf("Entropy pool size:%u, fill watermark:%u\n", readNumberFromFile(SIZE_PROC_FILENAME), inmFillWatermark); } } @@ -66,14 +62,10 @@ void inmWriteEntropyEnd() { // Block until either the entropy pool has room, or 1 minute has passed. void inmWaitForPoolToHaveRoom() { int ent_count; - struct pollfd pfd = { - .fd = inmDevRandomFD, - .events = POLLOUT, - }; - if (ioctl(inmDevRandomFD, RNDGETENTCNT, &ent_count) == 0 && (uint32_t)ent_count < inmFillWatermark) { + if (ioctl(pfd.fd, RNDGETENTCNT, &ent_count) == 0 && (uint32_t)ent_count < inmFillWatermark) { return; } - poll(&pfd, 1, 1000u * 60u); // One minute + poll(&pfd, 1, -1); // waits until /dev/random is in usage } // Add the bytes to the entropy pool. This can be unwhitenened, but the estimated bits of @@ -84,5 +76,5 @@ void inmWriteEntropyToPool(uint8_t *bytes, uint32_t length, uint32_t entropy) { inmPoolInfo->buf_size = length; memcpy(inmPoolInfo->buf, bytes, length); //printf("Writing %u bytes with %u bits of entropy to /dev/random\n", length, entropy); - ioctl(inmDevRandomFD, RNDADDENTROPY, inmPoolInfo); + ioctl(pfd.fd, RNDADDENTROPY, inmPoolInfo); }