Free some memory allocations

Change-Id: Ifb6c186e43e1eb068e8075def16924ced04bb23d
diff --git a/partition.cpp b/partition.cpp
index e110ba7..5058e1d 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1572,6 +1572,7 @@
 						} else {
 							LOGINFO("Successfully wiped crypto footer.\n");
 						}
+						free(buffer);
 					}
 				}
 			}
diff --git a/twinstall.cpp b/twinstall.cpp
index c1ff705..7eea07d 100644
--- a/twinstall.cpp
+++ b/twinstall.cpp
@@ -182,9 +182,12 @@
 		close(pipe_fd[0]);
 		execve(Temp_Binary.c_str(), (char* const*)args, environ);
 		printf("E:Can't execute '%s': %s\n", Temp_Binary.c_str(), strerror(errno));
+		free(temp);
 		_exit(-1);
 	}
 	close(pipe_fd[1]);
+	free(temp);
+	temp = NULL;
 
 	*wipe_cache = 0;
 
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index 12e88dd..644d565 100644
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -208,32 +208,38 @@
 	f = fopen(fn.c_str(), "rb");
 	if (f == NULL) {
 		LOGERR("Failed to open '%s' to try decrypt\n", fn.c_str());
+		oaes_free(&ctx);
 		return -1;
 	}
 	read_len = fread(buffer, sizeof(uint8_t), 4096, f);
 	if (read_len <= 0) {
 		LOGERR("Read size during try decrypt failed\n");
 		fclose(f);
+		oaes_free(&ctx);
 		return -1;
 	}
 	if (oaes_decrypt(ctx, buffer, read_len, NULL, &out_len) != OAES_RET_SUCCESS) {
 		LOGERR("Error: Failed to retrieve required buffer size for trying decryption.\n");
 		fclose(f);
+		oaes_free(&ctx);
 		return -1;
 	}
 	buffer_out = (uint8_t *) calloc(out_len, sizeof(char));
 	if (buffer_out == NULL) {
 		LOGERR("Failed to allocate output buffer for try decrypt.\n");
 		fclose(f);
+		oaes_free(&ctx);
 		return -1;
 	}
 	if (oaes_decrypt(ctx, buffer, read_len, buffer_out, &out_len) != OAES_RET_SUCCESS) {
 		LOGERR("Failed to decrypt file '%s'\n", fn.c_str());
 		fclose(f);
 		free(buffer_out);
+		oaes_free(&ctx);
 		return 0;
 	}
 	fclose(f);
+	oaes_free(&ctx);
 	if (out_len < 2) {
 		LOGINFO("Successfully decrypted '%s' but read length too small.\n", fn.c_str());
 		free(buffer_out);