diff options
| author | alyptik <alyptik@protonmail.com> | 2017-04-29 22:45:20 -1000 | 
|---|---|---|
| committer | alyptik <alyptik@protonmail.com> | 2017-04-29 23:55:58 -1000 | 
| commit | 726300aed61b2d00c433893a78d6497a828212ba (patch) | |
| tree | 7c10e971ae2f3f3a9a5d1bb75f6f3cb53f21be60 | |
| parent | d503854b164d4426a325f88fa61148c13d07dabf (diff) | |
| download | sand-leek-726300aed61b2d00c433893a78d6497a828212ba.tar.xz | |
Fix memory leaks with BN/pthread_t pointers
| -rw-r--r-- | sand-leek.c | 18 | 
1 files changed, 13 insertions, 5 deletions
| diff --git a/sand-leek.c b/sand-leek.c index e66b91a..f845054 100644 --- a/sand-leek.c +++ b/sand-leek.c @@ -6,6 +6,7 @@  #include <semaphore.h>  #include <errno.h>  #include <string.h> +#include <endian.h>  #include <openssl/bn.h>  #include <openssl/rsa.h>  #include <openssl/sha.h> @@ -83,6 +84,14 @@ key_update_d(RSA *rsa_key) {  	BN_mod(true_dmp1, true_d, p1, bn_ctx);  	BN_mod(true_dmq1, true_d, q1, bn_ctx); +	/* cleanup BN structs not managed by RSA internal functions */ +	BN_clear_free(gcd); +	BN_clear_free(p1); +	BN_clear_free(q1); +	BN_clear_free(p1q1); +	BN_clear_free(lambda_n); +	BN_CTX_free(bn_ctx); +  	if (!RSA_set0_key(rsa_key, NULL, NULL, true_d)) {  		fprintf(stderr, "setting d failed\n");  		return 1; @@ -102,16 +111,15 @@ work(void *arg) {  	unsigned int e_big_endian = 0;  	unsigned char *der_data = NULL;  	unsigned char *tmp_data = NULL; -	size_t der_length = 0; +	ssize_t der_length = 0;  	unsigned long volatile *kilo_hashes = arg;  	unsigned long hashes = 0;  	BIGNUM *bignum_e = NULL; -	RSA *rsa_key = NULL;  	SHA_CTX sha_c;  	SHA_CTX working_sha_c;  	int sem_val = 0; +	RSA *rsa_key = RSA_new(); -	rsa_key = RSA_new();  	if (!rsa_key) {  		fprintf(stderr, "Failed to allocate RSA key\n");  		goto STOP; @@ -232,7 +240,6 @@ main(int argc, char **argv) {  	size_t offset = 0;  	pthread_t *workers = NULL;  	unsigned long volatile *khash_count = NULL; -	unsigned long khashes = 0;  	while ((opt = getopt(argc, argv, "t:s:")) != -1) {  		switch (opt) { @@ -273,6 +280,7 @@ main(int argc, char **argv) {  	khash_count = calloc(thread_count, sizeof(unsigned long));  	if (!khash_count) {  		perror("hash count array calloc"); +		free(workers);  		return 1;  	} @@ -288,9 +296,9 @@ main(int argc, char **argv) {  	/* workers started; wait on one to finish */  	loops = 0;  	while (sem_trywait(&working) && errno == EAGAIN) { +		unsigned long khashes = 0;  		sleep(1);  		loops++; -		khashes = 0;  		/* approximate hashes per second */  		for (i = 0; i < thread_count; i++) {  			khashes += khash_count[i]; | 
