diff --git a/src/dap_enc_msrln.c b/src/dap_enc_msrln.c
index 80e7ba83896a2ec42bd2e135de5371c4b53e816d..b48008059adffb61d8b8e0ab243e067dce882101 100755
--- a/src/dap_enc_msrln.c
+++ b/src/dap_enc_msrln.c
@@ -112,8 +112,6 @@ size_t dap_enc_msrln_gen_bob_shared_key(struct dap_enc_key* b_key, const void* a
     *b_pub = malloc(MSRLN_PKB_BYTES);
     if(b_pub == NULL) {
         ret = 0;
-        DAP_DELETE(b_pub);
-        b_pub = NULL;
         DAP_DELETE(b_key->priv_key_data);
         b_key->priv_key_data = NULL;
         return ret;
@@ -125,8 +123,6 @@ size_t dap_enc_msrln_gen_bob_shared_key(struct dap_enc_key* b_key, const void* a
         ret = 0;
         DAP_DELETE(b_pub);
         b_pub = NULL;
-        DAP_DELETE(b_key->priv_key_data);
-        b_key->priv_key_data = NULL;
         return ret;
     }
 
diff --git a/src/sig_bliss/bliss_b_keys.c b/src/sig_bliss/bliss_b_keys.c
index 1740d31e7c03c9e6c7269285adf9b6e08e81ba27..7e8e4a4223c0ce38ba9985bac5516f4d4b3e48d5 100755
--- a/src/sig_bliss/bliss_b_keys.c
+++ b/src/sig_bliss/bliss_b_keys.c
@@ -118,17 +118,12 @@ static int32_t bliss_b_private_key_init(bliss_private_key_t *private_key, bliss_
 
   f = calloc(n, sizeof(int32_t));
   if (f == NULL) {
-      free(f);
-      free(g);
-      free(a);
       return BLISS_B_NO_MEM;
   }
 
   g = calloc(n, sizeof(int32_t));
   if (g == NULL) {
       free(f);
-      free(g);
-      free(a);
       return BLISS_B_NO_MEM;
   }
 
@@ -136,7 +131,6 @@ static int32_t bliss_b_private_key_init(bliss_private_key_t *private_key, bliss_
   if (a == NULL) {
       free(f);
       free(g);
-      free(a);
       return BLISS_B_NO_MEM;
   }
 
diff --git a/src/sig_bliss/bliss_b_signatures.c b/src/sig_bliss/bliss_b_signatures.c
index 0e1de13240b64cc4302a7f86e16d9ff3368b7710..173fa49675c72fbddcde02e0e57ec24dceccf8bb 100755
--- a/src/sig_bliss/bliss_b_signatures.c
+++ b/src/sig_bliss/bliss_b_signatures.c
@@ -404,18 +404,7 @@ int32_t bliss_b_sign(bliss_signature_t *signature,  const bliss_private_key_t *p
       /* initialize our sampler */
       if (!sampler_init(&sampler, p.sigma, p.ell, p.precision, entropy)) {
         retval = BLISS_B_BAD_ARGS;
-        secure_free(&z1, n);
-        secure_free(&z2, n);
-        secure_free((int32_t **)&indices, kappa);
-        free(hash);
-        hash = NULL;
         delete_ntt_state(state);
-        secure_free(&v, n);
-        secure_free(&dv, n);
-        secure_free(&y1, n);
-        secure_free(&y2, n);
-        secure_free(&v1, n);
-        secure_free(&v2, n);
         return retval;
       }
 
@@ -429,46 +418,91 @@ int32_t bliss_b_sign(bliss_signature_t *signature,  const bliss_private_key_t *p
 
       z1 = malloc(n * sizeof(int32_t));
       if(z1 ==  NULL){
+        free(hash);
         return BLISS_B_NO_MEM;
       }
 
       z2 = malloc(n * sizeof(int32_t));
       if(z2 ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
         return BLISS_B_NO_MEM;
       }
 
       v1 = malloc(n * sizeof(int32_t));
       if(v1 ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
         return BLISS_B_NO_MEM;
       }
 
       v2 = malloc(n * sizeof(int32_t));
       if(v2 ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
         return BLISS_B_NO_MEM;
       }
 
       y1 = malloc(n * sizeof(int32_t));
       if(y1 ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
+        secure_free(&v2, n);
         return BLISS_B_NO_MEM;
       }
 
       y2 = malloc(n * sizeof(int32_t));
       if(y2 ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
+        secure_free(&v2, n);
+        secure_free(&y1, n);
         return BLISS_B_NO_MEM;
       }
 
       v = calloc(n, sizeof(int32_t));
       if(v ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
+        secure_free(&v2, n);
+        secure_free(&y1, n);
+        secure_free(&y2, n);
         return BLISS_B_NO_MEM;
       }
 
       dv = calloc(n, sizeof(int32_t));
       if(dv ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
+        secure_free(&v2, n);
+        secure_free(&y1, n);
+        secure_free(&y2, n);
+        secure_free(&v, n);
         return BLISS_B_NO_MEM;
       }
 
       indices = calloc(kappa, sizeof(int32_t));
       if(indices ==  NULL){
+        free(hash);
+        secure_free(&z1, n);
+        secure_free(&z2, n);
+        secure_free(&v1, n);
+        secure_free(&v2, n);
+        secure_free(&y1, n);
+        secure_free(&y2, n);
+        secure_free(&v, n);
+        secure_free(&dv, n);
         return BLISS_B_NO_MEM;
       }