Browse Source

Bugfix: Stratum: Address dereference-after-free and memory leak introduced in resume support

Luke Dashjr 13 years ago
parent
commit
0a91a948b3
1 changed files with 8 additions and 0 deletions
  1. 8 0
      miner.c

+ 8 - 0
miner.c

@@ -4042,6 +4042,7 @@ next_write_sws_del:
 				*swsp = sws->next;
 				*swsp = sws->next;
 				free_sws(sws);
 				free_sws(sws);
 				--wip;
 				--wip;
+				continue;
 			}
 			}
 			
 			
 			if (fd == INVSOCK || (!pool->stratum_auth) || (!pool->stratum_notify) || !FD_ISSET(fd, &wfds)) {
 			if (fd == INVSOCK || (!pool->stratum_auth) || (!pool->stratum_notify) || !FD_ISSET(fd, &wfds)) {
@@ -4079,6 +4080,13 @@ next_write_sws:
 				applog(LOG_DEBUG, "Successfully submitted, adding to stratum_shares db");
 				applog(LOG_DEBUG, "Successfully submitted, adding to stratum_shares db");
 				goto next_write_sws_del;
 				goto next_write_sws_del;
 			} else if (!pool_tset(pool, &pool->submit_fail)) {
 			} else if (!pool_tset(pool, &pool->submit_fail)) {
+				// Undo stuff
+				mutex_lock(&sshare_lock);
+				HASH_DEL(stratum_shares, sshare);
+				mutex_unlock(&sshare_lock);
+				free_work(sshare->work);
+				free(sshare);
+				
 				applog(LOG_WARNING, "Pool %d stratum share submission failure", pool->pool_no);
 				applog(LOG_WARNING, "Pool %d stratum share submission failure", pool->pool_no);
 				total_ro++;
 				total_ro++;
 				pool->remotefail_occasions++;
 				pool->remotefail_occasions++;